1 package org.bouncycastle.asn1.x509; 2 3 import org.bouncycastle.asn1.ASN1Encodable; 4 import org.bouncycastle.asn1.ASN1EncodableVector; 5 import org.bouncycastle.asn1.ASN1Sequence; 6 import org.bouncycastle.asn1.DERBitString; 7 import org.bouncycastle.asn1.DERObject; 8 import org.bouncycastle.asn1.DERSequence; 9 10 public class AttributeCertificate 11 extends ASN1Encodable 12 { 13 AttributeCertificateInfo acinfo; 14 AlgorithmIdentifier signatureAlgorithm; 15 DERBitString signatureValue; 16 17 /** 18 * @param obj 19 * @return an AttributeCertificate object 20 */ 21 public static AttributeCertificate getInstance(Object obj) 22 { 23 if (obj instanceof AttributeCertificate) 24 { 25 return (AttributeCertificate)obj; 26 } 27 else if (obj != null) 28 { 29 return new AttributeCertificate(ASN1Sequence.getInstance(obj)); 30 } 31 32 return null; 33 } 34 35 public AttributeCertificate( 36 AttributeCertificateInfo acinfo, 37 AlgorithmIdentifier signatureAlgorithm, 38 DERBitString signatureValue) 39 { 40 this.acinfo = acinfo; 41 this.signatureAlgorithm = signatureAlgorithm; 42 this.signatureValue = signatureValue; 43 } 44 45 public AttributeCertificate( 46 ASN1Sequence seq) 47 { 48 if (seq.size() != 3) 49 { 50 throw new IllegalArgumentException("Bad sequence size: " 51 + seq.size()); 52 } 53 54 this.acinfo = AttributeCertificateInfo.getInstance(seq.getObjectAt(0)); 55 this.signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); 56 this.signatureValue = DERBitString.getInstance(seq.getObjectAt(2)); 57 } 58 59 public AttributeCertificateInfo getAcinfo() 60 { 61 return acinfo; 62 } 63 64 public AlgorithmIdentifier getSignatureAlgorithm() 65 { 66 return signatureAlgorithm; 67 } 68 69 public DERBitString getSignatureValue() 70 { 71 return signatureValue; 72 } 73 74 /** 75 * Produce an object suitable for an ASN1OutputStream. 76 * <pre> 77 * AttributeCertificate ::= SEQUENCE { 78 * acinfo AttributeCertificateInfo, 79 * signatureAlgorithm AlgorithmIdentifier, 80 * signatureValue BIT STRING 81 * } 82 * </pre> 83 */ 84 public DERObject toASN1Object() 85 { 86 ASN1EncodableVector v = new ASN1EncodableVector(); 87 88 v.add(acinfo); 89 v.add(signatureAlgorithm); 90 v.add(signatureValue); 91 92 return new DERSequence(v); 93 } 94 } 95