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    }