001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 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; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 010 011public class V2Form 012 extends ASN1Object 013{ 014 GeneralNames issuerName; 015 IssuerSerial baseCertificateID; 016 ObjectDigestInfo objectDigestInfo; 017 018 public static V2Form getInstance( 019 ASN1TaggedObject obj, 020 boolean explicit) 021 { 022 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 023 } 024 025 public static V2Form getInstance( 026 Object obj) 027 { 028 if (obj instanceof V2Form) 029 { 030 return (V2Form)obj; 031 } 032 else if (obj != null) 033 { 034 return new V2Form(ASN1Sequence.getInstance(obj)); 035 } 036 037 return null; 038 } 039 040 public V2Form( 041 GeneralNames issuerName) 042 { 043 this(issuerName, null, null); 044 } 045 046 public V2Form( 047 GeneralNames issuerName, 048 IssuerSerial baseCertificateID) 049 { 050 this(issuerName, baseCertificateID, null); 051 } 052 053 public V2Form( 054 GeneralNames issuerName, 055 ObjectDigestInfo objectDigestInfo) 056 { 057 this(issuerName, null, objectDigestInfo); 058 } 059 060 public V2Form( 061 GeneralNames issuerName, 062 IssuerSerial baseCertificateID, 063 ObjectDigestInfo objectDigestInfo) 064 { 065 this.issuerName = issuerName; 066 this.baseCertificateID = baseCertificateID; 067 this.objectDigestInfo = objectDigestInfo; 068 } 069 070 /** 071 * @deprecated use getInstance(). 072 */ 073 public V2Form( 074 ASN1Sequence seq) 075 { 076 if (seq.size() > 3) 077 { 078 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 079 } 080 081 int index = 0; 082 083 if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject)) 084 { 085 index++; 086 this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0)); 087 } 088 089 for (int i = index; i != seq.size(); i++) 090 { 091 ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); 092 if (o.getTagNo() == 0) 093 { 094 baseCertificateID = IssuerSerial.getInstance(o, false); 095 } 096 else if (o.getTagNo() == 1) 097 { 098 objectDigestInfo = ObjectDigestInfo.getInstance(o, false); 099 } 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}