V2Form.java revision a198e1ecc615e26a167d0f2dca9fa7e5fc62de10
1package org.bouncycastle.asn1.x509; 2 3import org.bouncycastle.asn1.ASN1EncodableVector; 4import org.bouncycastle.asn1.ASN1Object; 5import org.bouncycastle.asn1.ASN1Primitive; 6import org.bouncycastle.asn1.ASN1Sequence; 7import org.bouncycastle.asn1.ASN1TaggedObject; 8import org.bouncycastle.asn1.DERSequence; 9import org.bouncycastle.asn1.DERTaggedObject; 10 11public class V2Form 12 extends ASN1Object 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 instanceof V2Form) 29 { 30 return (V2Form)obj; 31 } 32 else if (obj != null) 33 { 34 return new V2Form(ASN1Sequence.getInstance(obj)); 35 } 36 37 return null; 38 } 39 40 public V2Form( 41 GeneralNames issuerName) 42 { 43 this(issuerName, null, null); 44 } 45 46 public V2Form( 47 GeneralNames issuerName, 48 IssuerSerial baseCertificateID) 49 { 50 this(issuerName, baseCertificateID, null); 51 } 52 53 public V2Form( 54 GeneralNames issuerName, 55 ObjectDigestInfo objectDigestInfo) 56 { 57 this(issuerName, null, objectDigestInfo); 58 } 59 60 public V2Form( 61 GeneralNames issuerName, 62 IssuerSerial baseCertificateID, 63 ObjectDigestInfo objectDigestInfo) 64 { 65 this.issuerName = issuerName; 66 this.baseCertificateID = baseCertificateID; 67 this.objectDigestInfo = objectDigestInfo; 68 } 69 70 /** 71 * @deprecated use getInstance(). 72 */ 73 public V2Form( 74 ASN1Sequence seq) 75 { 76 if (seq.size() > 3) 77 { 78 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 79 } 80 81 int index = 0; 82 83 if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject)) 84 { 85 index++; 86 this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0)); 87 } 88 89 for (int i = index; i != seq.size(); i++) 90 { 91 ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); 92 if (o.getTagNo() == 0) 93 { 94 baseCertificateID = IssuerSerial.getInstance(o, false); 95 } 96 else if (o.getTagNo() == 1) 97 { 98 objectDigestInfo = ObjectDigestInfo.getInstance(o, false); 99 } 100 else 101 { 102 throw new IllegalArgumentException("Bad tag number: " 103 + o.getTagNo()); 104 } 105 } 106 } 107 108 public GeneralNames getIssuerName() 109 { 110 return issuerName; 111 } 112 113 public IssuerSerial getBaseCertificateID() 114 { 115 return baseCertificateID; 116 } 117 118 public ObjectDigestInfo getObjectDigestInfo() 119 { 120 return objectDigestInfo; 121 } 122 123 /** 124 * Produce an object suitable for an ASN1OutputStream. 125 * <pre> 126 * V2Form ::= SEQUENCE { 127 * issuerName GeneralNames OPTIONAL, 128 * baseCertificateID [0] IssuerSerial OPTIONAL, 129 * objectDigestInfo [1] ObjectDigestInfo OPTIONAL 130 * -- issuerName MUST be present in this profile 131 * -- baseCertificateID and objectDigestInfo MUST NOT 132 * -- be present in this profile 133 * } 134 * </pre> 135 */ 136 public ASN1Primitive toASN1Primitive() 137 { 138 ASN1EncodableVector v = new ASN1EncodableVector(); 139 140 if (issuerName != null) 141 { 142 v.add(issuerName); 143 } 144 145 if (baseCertificateID != null) 146 { 147 v.add(new DERTaggedObject(false, 0, baseCertificateID)); 148 } 149 150 if (objectDigestInfo != null) 151 { 152 v.add(new DERTaggedObject(false, 1, objectDigestInfo)); 153 } 154 155 return new DERSequence(v); 156 } 157} 158