001 package org.apache.commons.ssl.asn1;
002
003 import java.io.IOException;
004
005 /** We insert one of these when we find a tag we don't recognise. */
006 public class DERUnknownTag
007 extends DERObject {
008 int tag;
009 byte[] data;
010
011 /**
012 * @param tag the tag value.
013 * @param data the octets making up the time.
014 */
015 public DERUnknownTag(
016 int tag,
017 byte[] data) {
018 this.tag = tag;
019 this.data = data;
020 }
021
022 public int getTag() {
023 return tag;
024 }
025
026 public byte[] getData() {
027 return data;
028 }
029
030 void encode(
031 DEROutputStream out)
032 throws IOException {
033 out.writeEncoded(tag, data);
034 }
035
036 public boolean equals(
037 Object o) {
038 if (!(o instanceof DERUnknownTag)) {
039 return false;
040 }
041
042 DERUnknownTag other = (DERUnknownTag) o;
043
044 if (tag != other.tag) {
045 return false;
046 }
047
048 if (data.length != other.data.length) {
049 return false;
050 }
051
052 for (int i = 0; i < data.length; i++) {
053 if (data[i] != other.data[i]) {
054 return false;
055 }
056 }
057
058 return true;
059 }
060
061 public int hashCode() {
062 byte[] b = this.getData();
063 int value = 0;
064
065 for (int i = 0; i != b.length; i++) {
066 value ^= (b[i] & 0xff) << (i % 4);
067 }
068
069 return value ^ this.getTag();
070 }
071 }