1package org.bouncycastle.asn1.x509; 2 3import org.bouncycastle.asn1.ASN1Encodable; 4import org.bouncycastle.asn1.ASN1EncodableVector; 5import org.bouncycastle.asn1.ASN1Sequence; 6import org.bouncycastle.asn1.DEREncodable; 7import org.bouncycastle.asn1.DERObject; 8import org.bouncycastle.asn1.DERIA5String; 9import org.bouncycastle.asn1.DERObjectIdentifier; 10import org.bouncycastle.asn1.DERSequence; 11 12/** 13 * Policy qualifiers, used in the X509V3 CertificatePolicies 14 * extension. 15 * 16 * <pre> 17 * PolicyQualifierInfo ::= SEQUENCE { 18 * policyQualifierId PolicyQualifierId, 19 * qualifier ANY DEFINED BY policyQualifierId } 20 * </pre> 21 */ 22public class PolicyQualifierInfo 23 extends ASN1Encodable 24{ 25 private DERObjectIdentifier policyQualifierId; 26 private DEREncodable qualifier; 27 28 /** 29 * Creates a new <code>PolicyQualifierInfo</code> instance. 30 * 31 * @param policyQualifierId a <code>PolicyQualifierId</code> value 32 * @param qualifier the qualifier, defined by the above field. 33 */ 34 public PolicyQualifierInfo( 35 DERObjectIdentifier policyQualifierId, 36 DEREncodable qualifier) 37 { 38 this.policyQualifierId = policyQualifierId; 39 this.qualifier = qualifier; 40 } 41 42 /** 43 * Creates a new <code>PolicyQualifierInfo</code> containing a 44 * cPSuri qualifier. 45 * 46 * @param cps the CPS (certification practice statement) uri as a 47 * <code>String</code>. 48 */ 49 public PolicyQualifierInfo( 50 String cps) 51 { 52 policyQualifierId = PolicyQualifierId.id_qt_cps; 53 qualifier = new DERIA5String (cps); 54 } 55 56 /** 57 * Creates a new <code>PolicyQualifierInfo</code> instance. 58 * 59 * @param as <code>PolicyQualifierInfo</code> X509 structure 60 * encoded as an ASN1Sequence. 61 */ 62 public PolicyQualifierInfo( 63 ASN1Sequence as) 64 { 65 if (as.size() != 2) 66 { 67 throw new IllegalArgumentException("Bad sequence size: " 68 + as.size()); 69 } 70 71 policyQualifierId = DERObjectIdentifier.getInstance(as.getObjectAt(0)); 72 qualifier = as.getObjectAt(1); 73 } 74 75 public static PolicyQualifierInfo getInstance( 76 Object as) 77 { 78 if (as instanceof PolicyQualifierInfo) 79 { 80 return (PolicyQualifierInfo)as; 81 } 82 else if (as instanceof ASN1Sequence) 83 { 84 return new PolicyQualifierInfo((ASN1Sequence)as); 85 } 86 87 throw new IllegalArgumentException("unknown object in getInstance."); 88 } 89 90 91 public DERObjectIdentifier getPolicyQualifierId() 92 { 93 return policyQualifierId; 94 } 95 96 public DEREncodable getQualifier() 97 { 98 return qualifier; 99 } 100 101 /** 102 * Returns a DER-encodable representation of this instance. 103 * 104 * @return a <code>DERObject</code> value 105 */ 106 public DERObject toASN1Object() 107 { 108 ASN1EncodableVector dev = new ASN1EncodableVector(); 109 dev.add(policyQualifierId); 110 dev.add(qualifier); 111 112 return new DERSequence(dev); 113 } 114} 115