~brian-thomason/+junk/bouncycastle

« back to all changes in this revision

Viewing changes to src/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java

  • Committer: Brian Thomason
  • Date: 2011-12-20 17:20:32 UTC
  • Revision ID: brian.thomason@canonical.com-20111220172032-rdtm13jgdxtksacr
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.bouncycastle.asn1.x509;
 
2
 
 
3
import java.util.Enumeration;
 
4
import java.util.Vector;
 
5
 
 
6
import org.bouncycastle.asn1.ASN1Encodable;
 
7
import org.bouncycastle.asn1.ASN1EncodableVector;
 
8
import org.bouncycastle.asn1.ASN1Sequence;
 
9
import org.bouncycastle.asn1.DERObject;
 
10
import org.bouncycastle.asn1.DERSequence;
 
11
 
 
12
/**
 
13
 * This extension may contain further X.500 attributes of the subject. See also
 
14
 * RFC 3039.
 
15
 * 
 
16
 * <pre>
 
17
 *     SubjectDirectoryAttributes ::= Attributes
 
18
 *     Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
 
19
 *     Attribute ::= SEQUENCE 
 
20
 *     {
 
21
 *       type AttributeType 
 
22
 *       values SET OF AttributeValue 
 
23
 *     }
 
24
 *     
 
25
 *     AttributeType ::= OBJECT IDENTIFIER
 
26
 *     AttributeValue ::= ANY DEFINED BY AttributeType
 
27
 * </pre>
 
28
 * 
 
29
 * @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers.
 
30
 */
 
31
public class SubjectDirectoryAttributes 
 
32
    extends ASN1Encodable
 
33
{
 
34
    private Vector attributes = new Vector();
 
35
 
 
36
    public static SubjectDirectoryAttributes getInstance(
 
37
        Object obj)
 
38
    {
 
39
        if (obj == null || obj instanceof SubjectDirectoryAttributes)
 
40
        {
 
41
            return (SubjectDirectoryAttributes)obj;
 
42
        }
 
43
 
 
44
        if (obj instanceof ASN1Sequence)
 
45
        {
 
46
            return new SubjectDirectoryAttributes((ASN1Sequence)obj);
 
47
        }
 
48
 
 
49
        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
 
50
    }
 
51
 
 
52
    /**
 
53
     * Constructor from ASN1Sequence.
 
54
     * 
 
55
     * The sequence is of type SubjectDirectoryAttributes:
 
56
     * 
 
57
     * <pre>
 
58
     *      SubjectDirectoryAttributes ::= Attributes
 
59
     *      Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
 
60
     *      Attribute ::= SEQUENCE 
 
61
     *      {
 
62
     *        type AttributeType 
 
63
     *        values SET OF AttributeValue 
 
64
     *      }
 
65
     *      
 
66
     *      AttributeType ::= OBJECT IDENTIFIER
 
67
     *      AttributeValue ::= ANY DEFINED BY AttributeType
 
68
     * </pre>
 
69
     * 
 
70
     * @param seq
 
71
     *            The ASN.1 sequence.
 
72
     */
 
73
    public SubjectDirectoryAttributes(ASN1Sequence seq)
 
74
    {
 
75
        Enumeration e = seq.getObjects();
 
76
 
 
77
        while (e.hasMoreElements())
 
78
        {
 
79
            ASN1Sequence s = ASN1Sequence.getInstance(e.nextElement());
 
80
            attributes.addElement(new Attribute(s));
 
81
        }
 
82
    }
 
83
 
 
84
    /**
 
85
     * Constructor from a vector of attributes.
 
86
     * 
 
87
     * The vector consists of attributes of type {@link Attribute Attribute}
 
88
     * 
 
89
     * @param attributes
 
90
     *            The attributes.
 
91
     * 
 
92
     */
 
93
    public SubjectDirectoryAttributes(Vector attributes)
 
94
    {
 
95
        Enumeration e = attributes.elements();
 
96
 
 
97
        while (e.hasMoreElements())
 
98
        {
 
99
            this.attributes.addElement(e.nextElement());
 
100
        }
 
101
    }
 
102
 
 
103
    /**
 
104
     * Produce an object suitable for an ASN1OutputStream.
 
105
     * 
 
106
     * Returns:
 
107
     * 
 
108
     * <pre>
 
109
     *      SubjectDirectoryAttributes ::= Attributes
 
110
     *      Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
 
111
     *      Attribute ::= SEQUENCE 
 
112
     *      {
 
113
     *        type AttributeType 
 
114
     *        values SET OF AttributeValue 
 
115
     *      }
 
116
     *      
 
117
     *      AttributeType ::= OBJECT IDENTIFIER
 
118
     *      AttributeValue ::= ANY DEFINED BY AttributeType
 
119
     * </pre>
 
120
     * 
 
121
     * @return a DERObject
 
122
     */
 
123
    public DERObject toASN1Object()
 
124
    {
 
125
        ASN1EncodableVector vec = new ASN1EncodableVector();
 
126
        Enumeration e = attributes.elements();
 
127
 
 
128
        while (e.hasMoreElements())
 
129
        {
 
130
 
 
131
            vec.add((Attribute)e.nextElement());
 
132
        }
 
133
 
 
134
        return new DERSequence(vec);
 
135
    }
 
136
 
 
137
    /**
 
138
     * @return Returns the attributes.
 
139
     */
 
140
    public Vector getAttributes()
 
141
    {
 
142
        return attributes;
 
143
    }
 
144
}