AttributeCertificateInfo.java revision 5db505e1f6a68c8d5dfdb0fed0b8607dea7bed96
1package org.bouncycastle.asn1.x509; 2 3import org.bouncycastle.asn1.ASN1Encodable; 4import org.bouncycastle.asn1.ASN1EncodableVector; 5import org.bouncycastle.asn1.ASN1Integer; 6import org.bouncycastle.asn1.ASN1Object; 7import org.bouncycastle.asn1.ASN1Primitive; 8import org.bouncycastle.asn1.ASN1Sequence; 9import org.bouncycastle.asn1.ASN1TaggedObject; 10import org.bouncycastle.asn1.DERBitString; 11import org.bouncycastle.asn1.DERSequence; 12 13public class AttributeCertificateInfo 14 extends ASN1Object 15{ 16 private ASN1Integer version; 17 private Holder holder; 18 private AttCertIssuer issuer; 19 private AlgorithmIdentifier signature; 20 private ASN1Integer serialNumber; 21 private AttCertValidityPeriod attrCertValidityPeriod; 22 private ASN1Sequence attributes; 23 private DERBitString issuerUniqueID; 24 private Extensions extensions; 25 26 public static AttributeCertificateInfo getInstance( 27 ASN1TaggedObject obj, 28 boolean explicit) 29 { 30 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 31 } 32 33 public static AttributeCertificateInfo getInstance( 34 Object obj) 35 { 36 if (obj instanceof AttributeCertificateInfo) 37 { 38 return (AttributeCertificateInfo)obj; 39 } 40 else if (obj != null) 41 { 42 return new AttributeCertificateInfo(ASN1Sequence.getInstance(obj)); 43 } 44 45 return null; 46 } 47 48 private AttributeCertificateInfo( 49 ASN1Sequence seq) 50 { 51 if (seq.size() < 6 || seq.size() > 9) 52 { 53 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 54 } 55 56 int start; 57 if (seq.getObjectAt(0) instanceof ASN1Integer) // in version 1 certs version is DEFAULT v1(0) 58 { 59 this.version = ASN1Integer.getInstance(seq.getObjectAt(0)); 60 start = 1; 61 } 62 else 63 { 64 this.version = new ASN1Integer(0); 65 start = 0; 66 } 67 68 this.holder = Holder.getInstance(seq.getObjectAt(start)); 69 this.issuer = AttCertIssuer.getInstance(seq.getObjectAt(start + 1)); 70 this.signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(start + 2)); 71 this.serialNumber = ASN1Integer.getInstance(seq.getObjectAt(start + 3)); 72 this.attrCertValidityPeriod = AttCertValidityPeriod.getInstance(seq.getObjectAt(start + 4)); 73 this.attributes = ASN1Sequence.getInstance(seq.getObjectAt(start + 5)); 74 75 for (int i = start + 6; i < seq.size(); i++) 76 { 77 ASN1Encodable obj = seq.getObjectAt(i); 78 79 if (obj instanceof DERBitString) 80 { 81 this.issuerUniqueID = DERBitString.getInstance(seq.getObjectAt(i)); 82 } 83 else if (obj instanceof ASN1Sequence || obj instanceof Extensions) 84 { 85 this.extensions = Extensions.getInstance(seq.getObjectAt(i)); 86 } 87 } 88 } 89 90 public ASN1Integer getVersion() 91 { 92 return version; 93 } 94 95 public Holder getHolder() 96 { 97 return holder; 98 } 99 100 public AttCertIssuer getIssuer() 101 { 102 return issuer; 103 } 104 105 public AlgorithmIdentifier getSignature() 106 { 107 return signature; 108 } 109 110 public ASN1Integer getSerialNumber() 111 { 112 return serialNumber; 113 } 114 115 public AttCertValidityPeriod getAttrCertValidityPeriod() 116 { 117 return attrCertValidityPeriod; 118 } 119 120 public ASN1Sequence getAttributes() 121 { 122 return attributes; 123 } 124 125 public DERBitString getIssuerUniqueID() 126 { 127 return issuerUniqueID; 128 } 129 130 public Extensions getExtensions() 131 { 132 return extensions; 133 } 134 135 /** 136 * Produce an object suitable for an ASN1OutputStream. 137 * <pre> 138 * AttributeCertificateInfo ::= SEQUENCE { 139 * version AttCertVersion -- version is v2, 140 * holder Holder, 141 * issuer AttCertIssuer, 142 * signature AlgorithmIdentifier, 143 * serialNumber CertificateSerialNumber, 144 * attrCertValidityPeriod AttCertValidityPeriod, 145 * attributes SEQUENCE OF Attribute, 146 * issuerUniqueID UniqueIdentifier OPTIONAL, 147 * extensions Extensions OPTIONAL 148 * } 149 * 150 * AttCertVersion ::= INTEGER { v2(1) } 151 * </pre> 152 */ 153 public ASN1Primitive toASN1Primitive() 154 { 155 ASN1EncodableVector v = new ASN1EncodableVector(); 156 157 if (version.getValue().intValue() != 0) 158 { 159 v.add(version); 160 } 161 v.add(holder); 162 v.add(issuer); 163 v.add(signature); 164 v.add(serialNumber); 165 v.add(attrCertValidityPeriod); 166 v.add(attributes); 167 168 if (issuerUniqueID != null) 169 { 170 v.add(issuerUniqueID); 171 } 172 173 if (extensions != null) 174 { 175 v.add(extensions); 176 } 177 178 return new DERSequence(v); 179 } 180} 181