DERUnknownTag.java revision b61a96e7ef1a78acf013bbf08fe537e5b5f129ca
1package org.bouncycastle.asn1;
2
3import java.io.IOException;
4
5/**
6 * We insert one of these when we find a tag we don't recognise.
7 */
8public class DERUnknownTag
9    extends DERObject
10{
11    int         tag;
12    byte[]      data;
13
14    /**
15     * @param tag the tag value.
16     * @param data the octets making up the time.
17     */
18    public DERUnknownTag(
19        int     tag,
20        byte[]  data)
21    {
22        this.tag = tag;
23        this.data = data;
24    }
25
26    public int getTag()
27    {
28        return tag;
29    }
30
31    public byte[] getData()
32    {
33        return data;
34    }
35
36    void encode(
37        DEROutputStream  out)
38        throws IOException
39    {
40        out.writeEncoded(tag, data);
41    }
42
43    public boolean equals(
44        Object o)
45    {
46        if ((o == null) || !(o instanceof DERUnknownTag))
47        {
48            return false;
49        }
50
51        DERUnknownTag other = (DERUnknownTag)o;
52
53        if (tag != other.tag)
54        {
55            return false;
56        }
57
58        if (data.length != other.data.length)
59        {
60            return false;
61        }
62
63        for (int i = 0; i < data.length; i++)
64        {
65            if(data[i] != other.data[i])
66            {
67                return false;
68            }
69        }
70
71        return true;
72    }
73
74    public int hashCode()
75    {
76        byte[]  b = this.getData();
77        int     value = 0;
78
79        for (int i = 0; i != b.length; i++)
80        {
81            value ^= (b[i] & 0xff) << (i % 4);
82        }
83
84        return value ^ this.getTag();
85    }
86}
87