1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.asn1;
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN android-removed
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//import java.io.ByteArrayOutputStream;
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//import java.io.IOException;
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-removed
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Enumeration;
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN android-removed
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//import java.util.Vector;
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-removed;
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN android-note
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// Changed inheritence of class.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-note
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectabstract public class ASN1Set
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    extends ASN1Collection
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // BEGIN android-removed
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //protected Vector set = new Vector();
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // END android-removed
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * return an ASN1Set from the given object.
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj the object we want converted.
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IllegalArgumentException if the object cannot be converted.
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static ASN1Set getInstance(
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object  obj)
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (obj == null || obj instanceof ASN1Set)
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return (ASN1Set)obj;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new IllegalArgumentException("unknown object in getInstance");
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Return an ASN1 set from a tagged object. There is a special
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * case here, if an object appears to have been explicitly tagged on
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * reading but we were expecting it to be implictly tagged in the
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * normal course of events it indicates that we lost the surrounding
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * set - so we need to add it back (this will happen if the tagged
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * object is a sequence that contains other sequences). If you are
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * dealing with implicitly tagged sets you really <b>should</b>
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * be using this method.
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj the tagged object.
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param explicit true if the object is meant to be explicitly tagged
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *          false otherwise.
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IllegalArgumentException if the tagged object cannot
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *          be converted.
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static ASN1Set getInstance(
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ASN1TaggedObject    obj,
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean             explicit)
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (explicit)
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (!obj.isExplicit())
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            {
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new IllegalArgumentException("object implicit - explicit expected.");
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return (ASN1Set)obj.getObject();
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        else
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // constructed object which appears to be explicitly tagged
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // and it's really implicit means we have to add the
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // surrounding sequence.
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (obj.isExplicit())
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            {
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ASN1Set    set = new DERSet(obj.getObject());
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return set;
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            else
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (obj.getObject() instanceof ASN1Set)
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    return (ASN1Set)obj.getObject();
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // in this case the parser returns a sequence, convert it
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // into a set.
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ASN1EncodableVector  v = new ASN1EncodableVector();
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (obj.getObject() instanceof ASN1Sequence)
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                {
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    ASN1Sequence s = (ASN1Sequence)obj.getObject();
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Enumeration e = s.getObjects();
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    while (e.hasMoreElements())
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    {
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        v.add((DEREncodable)e.nextElement());
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    return new DERSet(v, false);
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new IllegalArgumentException(
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "unknown object in getInstanceFromTagged");
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public ASN1Set()
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // BEGIN android-removed
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //public Enumeration getObjects()
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    return set.elements();
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ///**
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // * return the object at the set postion indicated by index.
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // *
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // * @param index the set number (starting at zero) of the object
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // * @return the object at the set postion indicated by index.
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // */
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //public DEREncodable getObjectAt(
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    int index)
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    return (DEREncodable)set.elementAt(index);
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ///**
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // * return the number of objects in this set.
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // *
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // * @return the number of objects in this set.
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // */
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //public int size()
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    return set.size();
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //public int hashCode()
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    Enumeration             e = this.getObjects();
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    int                     hashCode = 0;
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    while (e.hasMoreElements())
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    {
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //        hashCode ^= e.nextElement().hashCode();
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    }
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    return hashCode;
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // END android-removed
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean equals(
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object  o)
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (o == this)
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return true;
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!(o instanceof DEREncodable))
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DERObject      dObj = ((DEREncodable)o).getDERObject();
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!(dObj instanceof ASN1Set))
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ASN1Set   other = (ASN1Set)dObj;
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (this.size() != other.size())
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration s1 = this.getObjects();
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration s2 = other.getObjects();
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (s1.hasMoreElements())
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (!s1.nextElement().equals(s2.nextElement()))
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            {
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return false;
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return true;
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // BEGIN android-removed
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ///**
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // * return true if a <= b (arrays are assumed padded with zeros).
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // */
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //private boolean lessThanOrEqual(
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //     byte[] a,
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //     byte[] b)
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //     if (a.length <= b.length)
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //     {
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         for (int i = 0; i != a.length; i++)
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         {
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             int    l = a[i] & 0xff;
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             int    r = b[i] & 0xff;
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             if (r > l)
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             {
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                 return true;
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             }
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             else if (l > r)
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             {
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                 return false;
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             }
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         }
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         return true;
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //     }
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //     else
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //     {
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         for (int i = 0; i != b.length; i++)
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         {
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             int    l = a[i] & 0xff;
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             int    r = b[i] & 0xff;
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             if (r > l)
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             {
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                 return true;
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             }
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             else if (l > r)
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             {
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                 return false;
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //             }
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         }
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //         return false;
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //     }
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //private byte[] getEncoded(
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    DEREncodable obj)
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    ASN1OutputStream        aOut = new ASN1OutputStream(bOut);
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    try
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    {
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //        aOut.writeObject(obj);
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    }
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    catch (IOException e)
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    {
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //        throw new IllegalArgumentException("cannot encode object added to SET");
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    }
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    return bOut.toByteArray();
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //protected void sort()
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    if (set.size() > 1)
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    {
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //        boolean    swapped = true;
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //        while (swapped)
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //        {
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            int    index = 0;
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            byte[] a = getEncoded((DEREncodable)set.elementAt(0));
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            swapped = false;
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            while (index != set.size() - 1)
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            {
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                byte[] b = getEncoded((DEREncodable)set.elementAt(index + 1));
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                if (lessThanOrEqual(a, b))
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                {
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                    a = b;
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                }
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                else
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                {
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                    Object  o = set.elementAt(index);
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                    set.setElementAt(set.elementAt(index + 1), index);
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                    set.setElementAt(o, index + 1);
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                    swapped = true;
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                }
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //                index++;
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            }
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //        }
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    }
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //protected void addObject(
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    DEREncodable obj)
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    set.addElement(obj);
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //abstract void encode(DEROutputStream out)
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //        throws IOException;
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //public String toString()
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //{
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //  return set.toString();
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //}
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // END android-removed
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
319