1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.asn1.cms;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Encodable;
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence;
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Set;
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.DERObjectIdentifier;
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence;
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class Attribute
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ASN1ObjectIdentifier attrType;
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    private ASN1Set             attrValues;
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * return an Attribute object from the given object.
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @param o the object we want converted.
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @exception IllegalArgumentException if the object cannot be converted.
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static Attribute getInstance(
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Object o)
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (o instanceof Attribute)
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return (Attribute)o;
31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (o != null)
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return new Attribute(ASN1Sequence.getInstance(o));
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return null;
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private Attribute(
42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1Sequence seq)
43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        attrType = (ASN1ObjectIdentifier)seq.getObjectAt(0);
45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        attrValues = (ASN1Set)seq.getObjectAt(1);
46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @deprecated use ASN1ObjectIdentifier
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public Attribute(
52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        DERObjectIdentifier attrType,
53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1Set             attrValues)
54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.attrType = new ASN1ObjectIdentifier(attrType.getId());
56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.attrValues = attrValues;
57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Attribute(
604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier attrType,
61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1Set             attrValues)
62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.attrType = attrType;
64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.attrValues = attrValues;
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public ASN1ObjectIdentifier getAttrType()
68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return attrType;
70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ASN1Set getAttrValues()
736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return attrValues;
756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ASN1Encodable[] getAttributeValues()
78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
79e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return attrValues.toArray();
80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Produce an object suitable for an ASN1OutputStream.
84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * <pre>
85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Attribute ::= SEQUENCE {
86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *     attrType OBJECT IDENTIFIER,
87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *     attrValues SET OF AttributeValue
88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * }
89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * </pre>
90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1EncodableVector v = new ASN1EncodableVector();
94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        v.add(attrType);
96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        v.add(attrValues);
97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return new DERSequence(v);
99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
101