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