001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 009 010public class CertificatePolicies 011 extends ASN1Object 012{ 013 private final PolicyInformation[] policyInformation; 014 015 public static CertificatePolicies getInstance( 016 Object obj) 017 { 018 if (obj instanceof CertificatePolicies) 019 { 020 return (CertificatePolicies)obj; 021 } 022 023 if (obj != null) 024 { 025 return new CertificatePolicies(ASN1Sequence.getInstance(obj)); 026 } 027 028 return null; 029 } 030 031 public static CertificatePolicies getInstance( 032 ASN1TaggedObject obj, 033 boolean explicit) 034 { 035 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 036 } 037 038 /** 039 * Retrieve a CertificatePolicies for a passed in Extensions object, if present. 040 * 041 * @param extensions the extensions object to be examined. 042 * @return the CertificatePolicies, null if the extension is not present. 043 */ 044 public static CertificatePolicies fromExtensions(Extensions extensions) 045 { 046 return CertificatePolicies.getInstance(extensions.getExtensionParsedValue(Extension.certificatePolicies)); 047 } 048 049 /** 050 * Construct a CertificatePolicies object containing one PolicyInformation. 051 * 052 * @param name the name to be contained. 053 */ 054 public CertificatePolicies( 055 PolicyInformation name) 056 { 057 this.policyInformation = new PolicyInformation[] { name }; 058 } 059 060 public CertificatePolicies( 061 PolicyInformation[] policyInformation) 062 { 063 this.policyInformation = policyInformation; 064 } 065 066 private CertificatePolicies( 067 ASN1Sequence seq) 068 { 069 this.policyInformation = new PolicyInformation[seq.size()]; 070 071 for (int i = 0; i != seq.size(); i++) 072 { 073 policyInformation[i] = PolicyInformation.getInstance(seq.getObjectAt(i)); 074 } 075 } 076 077 public PolicyInformation[] getPolicyInformation() 078 { 079 PolicyInformation[] tmp = new PolicyInformation[policyInformation.length]; 080 081 System.arraycopy(policyInformation, 0, tmp, 0, policyInformation.length); 082 083 return tmp; 084 } 085 086 public PolicyInformation getPolicyInformation(ASN1ObjectIdentifier policyIdentifier) 087 { 088 for (int i = 0; i != policyInformation.length; i++) 089 { 090 if (policyIdentifier.equals(policyInformation[i].getPolicyIdentifier())) 091 { 092 return policyInformation[i]; 093 } 094 } 095 096 return null; 097 } 098 099 /** 100 * Produce an object suitable for an ASN1OutputStream. 101 * <pre> 102 * CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation 103 * </pre> 104 */ 105 public ASN1Primitive toASN1Primitive() 106 { 107 return new DERSequence(policyInformation); 108 } 109 110 public String toString() 111 { 112 String p = null; 113 for (int i = 0; i < policyInformation.length; i++) 114 { 115 if (p != null) 116 { 117 p += ", "; 118 } 119 p += policyInformation[i]; 120 } 121 122 return "CertificatePolicies: " + p; 123 } 124}