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