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.DERBitString;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
009
010public class AttributeCertificate
011    extends ASN1Object
012{
013    AttributeCertificateInfo    acinfo;
014    AlgorithmIdentifier         signatureAlgorithm;
015    DERBitString                signatureValue;
016
017    /**
018     * @param obj
019     * @return an AttributeCertificate object
020     */
021    public static AttributeCertificate getInstance(Object obj)
022    {
023        if (obj instanceof AttributeCertificate)
024        {
025            return (AttributeCertificate)obj;
026        }
027        else if (obj != null)
028        {
029            return new AttributeCertificate(ASN1Sequence.getInstance(obj));
030        }
031
032        return null;
033    }
034    
035    public AttributeCertificate(
036        AttributeCertificateInfo    acinfo,
037        AlgorithmIdentifier         signatureAlgorithm,
038        DERBitString                signatureValue)
039    {
040        this.acinfo = acinfo;
041        this.signatureAlgorithm = signatureAlgorithm;
042        this.signatureValue = signatureValue;
043    }
044
045    /**
046     * @deprecated use getInstance() method.
047     */
048    public AttributeCertificate(
049        ASN1Sequence    seq)
050    {
051        if (seq.size() != 3)
052        {
053            throw new IllegalArgumentException("Bad sequence size: "
054                    + seq.size());
055        }
056
057        this.acinfo = AttributeCertificateInfo.getInstance(seq.getObjectAt(0));
058        this.signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
059        this.signatureValue = DERBitString.getInstance(seq.getObjectAt(2));
060    }
061    
062    public AttributeCertificateInfo getAcinfo()
063    {
064        return acinfo;
065    }
066
067    public AlgorithmIdentifier getSignatureAlgorithm()
068    {
069        return signatureAlgorithm;
070    }
071
072    public DERBitString getSignatureValue()
073    {
074        return signatureValue;
075    }
076
077    /**
078     * Produce an object suitable for an ASN1OutputStream.
079     * <pre>
080     *  AttributeCertificate ::= SEQUENCE {
081     *       acinfo               AttributeCertificateInfo,
082     *       signatureAlgorithm   AlgorithmIdentifier,
083     *       signatureValue       BIT STRING
084     *  }
085     * </pre>
086     */
087    public ASN1Primitive toASN1Primitive()
088    {
089        ASN1EncodableVector  v = new ASN1EncodableVector();
090
091        v.add(acinfo);
092        v.add(signatureAlgorithm);
093        v.add(signatureValue);
094
095        return new DERSequence(v);
096    }
097}