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