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.DERInteger;
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERObjectIdentifier;
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERSequence;
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERGeneralizedTime;
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERBitString;
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERSet;
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generator for Version 2 AttributeCertificateInfo
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <pre>
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * AttributeCertificateInfo ::= SEQUENCE {
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       version              AttCertVersion -- version is v2,
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       holder               Holder,
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       issuer               AttCertIssuer,
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       signature            AlgorithmIdentifier,
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       serialNumber         CertificateSerialNumber,
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       attrCertValidityPeriod   AttCertValidityPeriod,
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       attributes           SEQUENCE OF Attribute,
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       issuerUniqueID       UniqueIdentifier OPTIONAL,
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       extensions           Extensions OPTIONAL
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * }
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </pre>
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class V2AttributeCertificateInfoGenerator
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private DERInteger version;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private Holder holder;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private AttCertIssuer issuer;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private AlgorithmIdentifier signature;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private DERInteger serialNumber;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private AttCertValidityPeriod attrCertValidityPeriod;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private ASN1EncodableVector attributes;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private DERBitString issuerUniqueID;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private X509Extensions extensions;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private DERGeneralizedTime startDate, endDate;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public V2AttributeCertificateInfoGenerator()
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.version = new DERInteger(1);
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        attributes = new ASN1EncodableVector();
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setHolder(Holder holder)
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.holder = holder;
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void addAttribute(String oid, ASN1Encodable value)
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        attributes.add(new Attribute(new DERObjectIdentifier(oid), new DERSet(value)));
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param attribute
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void addAttribute(Attribute attribute)
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        attributes.add(attribute);
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setSerialNumber(
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DERInteger  serialNumber)
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.serialNumber = serialNumber;
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setSignature(
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        AlgorithmIdentifier    signature)
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.signature = signature;
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setIssuer(
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        AttCertIssuer    issuer)
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.issuer = issuer;
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setStartDate(
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DERGeneralizedTime startDate)
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.startDate = startDate;
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setEndDate(
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DERGeneralizedTime endDate)
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.endDate = endDate;
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setIssuerUniqueID(
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DERBitString    issuerUniqueID)
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.issuerUniqueID = issuerUniqueID;
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setExtensions(
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        X509Extensions    extensions)
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.extensions = extensions;
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public AttributeCertificateInfo generateAttributeCertificateInfo()
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if ((serialNumber == null) || (signature == null)
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            || (issuer == null) || (startDate == null) || (endDate == null)
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            || (holder == null) || (attributes == null))
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalStateException("not all mandatory fields set in V2 AttributeCertificateInfo generator");
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ASN1EncodableVector  v = new ASN1EncodableVector();
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        v.add(version);
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        v.add(holder);
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        v.add(issuer);
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        v.add(signature);
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        v.add(serialNumber);
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // before and after dates => AttCertValidityPeriod
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        AttCertValidityPeriod validity = new AttCertValidityPeriod(startDate, endDate);
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        v.add(validity);
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Attributes
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        v.add(new DERSequence(attributes));
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (issuerUniqueID != null)
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            v.add(issuerUniqueID);
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (extensions != null)
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            v.add(extensions);
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new AttributeCertificateInfo(new DERSequence(v));
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
147