1 package org.bouncycastle.asn1.x509; 2 3 import org.bouncycastle.asn1.ASN1Encodable; 4 import org.bouncycastle.asn1.ASN1EncodableVector; 5 import org.bouncycastle.asn1.ASN1Sequence; 6 import org.bouncycastle.asn1.ASN1TaggedObject; 7 import org.bouncycastle.asn1.DERObject; 8 import org.bouncycastle.asn1.DERSequence; 9 import org.bouncycastle.asn1.DERTaggedObject; 10 11 public class V2Form 12 extends ASN1Encodable 13 { 14 GeneralNames issuerName; 15 IssuerSerial baseCertificateID; 16 ObjectDigestInfo objectDigestInfo; 17 18 public static V2Form getInstance( 19 ASN1TaggedObject obj, 20 boolean explicit) 21 { 22 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 23 } 24 25 public static V2Form getInstance( 26 Object obj) 27 { 28 if (obj == null || obj instanceof V2Form) 29 { 30 return (V2Form)obj; 31 } 32 else if (obj instanceof ASN1Sequence) 33 { 34 return new V2Form((ASN1Sequence)obj); 35 } 36 37 throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 38 } 39 40 public V2Form( 41 GeneralNames issuerName) 42 { 43 this.issuerName = issuerName; 44 } 45 46 public V2Form( 47 ASN1Sequence seq) 48 { 49 if (seq.size() > 3) 50 { 51 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 52 } 53 54 int index = 0; 55 56 if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject)) 57 { 58 index++; 59 this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0)); 60 } 61 62 for (int i = index; i != seq.size(); i++) 63 { 64 ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); 65 if (o.getTagNo() == 0) 66 { 67 baseCertificateID = IssuerSerial.getInstance(o, false); 68 } 69 else if (o.getTagNo() == 1) 70 { 71 objectDigestInfo = ObjectDigestInfo.getInstance(o, false); 72 } 73 else 74 { 75 throw new IllegalArgumentException("Bad tag number: " 76 + o.getTagNo()); 77 } 78 } 79 } 80 81 public GeneralNames getIssuerName() 82 { 83 return issuerName; 84 } 85 86 public IssuerSerial getBaseCertificateID() 87 { 88 return baseCertificateID; 89 } 90 91 public ObjectDigestInfo getObjectDigestInfo() 92 { 93 return objectDigestInfo; 94 } 95 96 /** 97 * Produce an object suitable for an ASN1OutputStream. 98 * <pre> 99 * V2Form ::= SEQUENCE { 100 * issuerName GeneralNames OPTIONAL, 101 * baseCertificateID [0] IssuerSerial OPTIONAL, 102 * objectDigestInfo [1] ObjectDigestInfo OPTIONAL 103 * -- issuerName MUST be present in this profile 104 * -- baseCertificateID and objectDigestInfo MUST NOT 105 * -- be present in this profile 106 * } 107 * </pre> 108 */ 109 public DERObject toASN1Object() 110 { 111 ASN1EncodableVector v = new ASN1EncodableVector(); 112 113 if (issuerName != null) 114 { 115 v.add(issuerName); 116 } 117 118 if (baseCertificateID != null) 119 { 120 v.add(new DERTaggedObject(false, 0, baseCertificateID)); 121 } 122 123 if (objectDigestInfo != null) 124 { 125 v.add(new DERTaggedObject(false, 1, objectDigestInfo)); 126 } 127 128 return new DERSequence(v); 129 } 130 } 131