| package org.bouncycastle.asn1; |
| |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| |
| import org.bouncycastle.util.Encodable; |
| |
| /** |
| * Base class for defining an ASN.1 object. |
| */ |
| public abstract class ASN1Object |
| implements ASN1Encodable, Encodable |
| { |
| /** |
| * Return the default BER or DER encoding for this object. |
| * |
| * @return BER/DER byte encoded object. |
| * @throws java.io.IOException on encoding error. |
| */ |
| public byte[] getEncoded() |
| throws IOException |
| { |
| ByteArrayOutputStream bOut = new ByteArrayOutputStream(); |
| ASN1OutputStream aOut = new ASN1OutputStream(bOut); |
| |
| aOut.writeObject(this); |
| |
| return bOut.toByteArray(); |
| } |
| |
| /** |
| * Return either the default for "BER" or a DER encoding if "DER" is specified. |
| * |
| * @param encoding name of encoding to use. |
| * @return byte encoded object. |
| * @throws IOException on encoding error. |
| */ |
| public byte[] getEncoded( |
| String encoding) |
| throws IOException |
| { |
| if (encoding.equals(ASN1Encoding.DER)) |
| { |
| ByteArrayOutputStream bOut = new ByteArrayOutputStream(); |
| DEROutputStream dOut = new DEROutputStream(bOut); |
| |
| dOut.writeObject(this); |
| |
| return bOut.toByteArray(); |
| } |
| else if (encoding.equals(ASN1Encoding.DL)) |
| { |
| ByteArrayOutputStream bOut = new ByteArrayOutputStream(); |
| DLOutputStream dOut = new DLOutputStream(bOut); |
| |
| dOut.writeObject(this); |
| |
| return bOut.toByteArray(); |
| } |
| |
| return this.getEncoded(); |
| } |
| |
| public int hashCode() |
| { |
| return this.toASN1Primitive().hashCode(); |
| } |
| |
| public boolean equals( |
| Object o) |
| { |
| if (this == o) |
| { |
| return true; |
| } |
| |
| if (!(o instanceof ASN1Encodable)) |
| { |
| return false; |
| } |
| |
| ASN1Encodable other = (ASN1Encodable)o; |
| |
| return this.toASN1Primitive().equals(other.toASN1Primitive()); |
| } |
| |
| /** |
| * @deprecated use toASN1Primitive() |
| * @return the underlying primitive type. |
| */ |
| public ASN1Primitive toASN1Object() |
| { |
| return this.toASN1Primitive(); |
| } |
| |
| /** |
| * Return true if obj is a byte array and represents an object with the given tag value. |
| * |
| * @param obj object of interest. |
| * @param tagValue tag value to check for. |
| * @return true if obj is a byte encoding starting with the given tag value, false otherwise. |
| */ |
| protected static boolean hasEncodedTagValue(Object obj, int tagValue) |
| { |
| return (obj instanceof byte[]) && ((byte[])obj)[0] == tagValue; |
| } |
| |
| /** |
| * Method providing a primitive representation of this object suitable for encoding. |
| * @return a primitive representation of this object. |
| */ |
| public abstract ASN1Primitive toASN1Primitive(); |
| } |