Asn1Object
using System.IO;
namespace Org.BouncyCastle.Asn1
{
public abstract class Asn1Object : Asn1Encodable
{
public override void EncodeTo(Stream output)
{
using (Asn1OutputStream asn1OutputStream = Asn1OutputStream.Create(output, "BER", true))
GetEncoding(asn1OutputStream.Encoding).Encode(asn1OutputStream);
}
public override void EncodeTo(Stream output, string encoding)
{
using (Asn1OutputStream asn1OutputStream = Asn1OutputStream.Create(output, encoding, true))
GetEncoding(asn1OutputStream.Encoding).Encode(asn1OutputStream);
}
internal override byte[] GetEncoded(string encoding, int preAlloc, int postAlloc)
{
int encodingType = Asn1OutputStream.GetEncodingType(encoding);
IAsn1Encoding encoding2 = GetEncoding(encodingType);
int length = encoding2.GetLength();
byte[] array = new byte[preAlloc + length + postAlloc];
using (Asn1OutputStream asn1Out = Asn1OutputStream.Create(array, preAlloc, length, encoding, false)) {
encoding2.Encode(asn1Out);
return array;
}
}
public bool Equals(Asn1Object other)
{
if (this != other)
return Asn1Equals(other);
return true;
}
public static Asn1Object FromByteArray(byte[] data)
{
return FromMemoryStream(new MemoryStream(data, false));
}
internal static Asn1Object FromMemoryStream(MemoryStream memoryStream)
{
using (Asn1InputStream asn1InputStream = new Asn1InputStream(memoryStream)) {
Asn1Object result = asn1InputStream.ReadObject();
if (asn1InputStream.Position != asn1InputStream.Length)
throw new IOException("extra data found after object");
return result;
}
}
public static Asn1Object FromStream(Stream inStr)
{
int limit = Asn1InputStream.FindLimit(inStr);
using (Asn1InputStream asn1InputStream = new Asn1InputStream(inStr, limit, true))
return asn1InputStream.ReadObject();
}
public sealed override Asn1Object ToAsn1Object()
{
return this;
}
internal abstract IAsn1Encoding GetEncoding(int encoding);
internal abstract IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo);
internal abstract DerEncoding GetEncodingDer();
internal abstract DerEncoding GetEncodingDerImplicit(int tagClass, int tagNo);
protected abstract bool Asn1Equals(Asn1Object asn1Object);
protected abstract int Asn1GetHashCode();
internal bool CallAsn1Equals(Asn1Object obj)
{
return Asn1Equals(obj);
}
internal int CallAsn1GetHashCode()
{
return Asn1GetHashCode();
}
}
}