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