cad4c824bc9ef8028e3a8a2107b30fb4c903e0bc
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / AlgorithmIdentifier.java
1 package org.bouncycastle.asn1.x509;
2
3 import java.io.*;
4 import java.util.Enumeration;
5
6 import org.bouncycastle.asn1.*;
7
8 public class AlgorithmIdentifier
9     implements DEREncodable
10 {
11     private DERObjectIdentifier objectId;
12     private DERObject           parameters;
13     private boolean             parametersDefined = false;
14
15     public AlgorithmIdentifier(
16         DERObjectIdentifier     objectId)
17     {
18         this.objectId = objectId;
19     }
20
21     public AlgorithmIdentifier(
22         DERObjectIdentifier     objectId,
23         DERObject               parameters)
24     {
25         parametersDefined = true;
26
27         this.objectId = objectId;
28         this.parameters = parameters;
29     }
30
31     public AlgorithmIdentifier(
32         DERConstructedSequence  obj)
33     {
34         objectId = (DERObjectIdentifier)obj.getObjectAt(0);
35
36         if (obj.getSize() == 2)
37         {
38             parametersDefined = true;
39             parameters = (DERObject)obj.getObjectAt(1);
40         }
41         else
42         {
43             parameters = null;
44         }
45     }
46
47     public DERObjectIdentifier getObjectId()
48     {
49         return objectId;
50     }
51
52     public DERObject getParameters()
53     {
54         return parameters;
55     }
56
57     /**
58      * <pre>
59      *      AlgorithmIdentifier ::= SEQUENCE {
60      *                            algorithm OBJECT IDENTIFIER,
61      *                            parameters ANY DEFINED BY algorithm OPTIONAL }
62      * </pre>
63      */
64     public DERObject getDERObject()
65     {
66         DERConstructedSequence  seq = new DERConstructedSequence();
67
68         seq.addObject(objectId);
69
70         if (parametersDefined)
71         {
72             seq.addObject(parameters);
73         }
74
75         return seq;
76     }
77
78     public boolean equals(
79         Object  o)
80     {
81         if ((o == null) || !(o instanceof AlgorithmIdentifier))
82         {
83             return false;
84         }
85
86         AlgorithmIdentifier other = (AlgorithmIdentifier)o;
87
88         if (!this.getObjectId().equals(other.getObjectId()))
89         {
90             return false;
91         }
92
93         if (this.getParameters() == null && other.getParameters() == null)
94         {
95             return true;
96         }
97
98         if (this.getParameters() == null || other.getParameters() == null)
99         {
100             return false;
101         }
102
103         ByteArrayOutputStream   b1Out = new ByteArrayOutputStream();
104         ByteArrayOutputStream   b2Out = new ByteArrayOutputStream();
105         DEROutputStream         d1Out = new DEROutputStream(b1Out);
106         DEROutputStream         d2Out = new DEROutputStream(b2Out);
107
108         try
109         {
110             d1Out.writeObject(this.getParameters());
111             d2Out.writeObject(other.getParameters());
112
113             byte[]  b1 = b1Out.toByteArray();
114             byte[]  b2 = b2Out.toByteArray();
115
116             if (b1.length != b2.length)
117             {
118                 return false;
119             }
120
121             for (int i = 0; i != b1.length; i++)
122             {
123                 if (b1[i] != b2[i])
124                 {
125                     return false;
126                 }
127             }
128         }
129         catch (Exception e)
130         {
131             return false;
132         }
133
134         return true;
135     }
136 }