EssCertID
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Utilities;
using System;
namespace Org.BouncyCastle.Asn1.Ess
{
public class EssCertID : Asn1Encodable
{
private readonly Asn1OctetString m_certHash;
private readonly IssuerSerial m_issuerSerial;
public Asn1OctetString CertHash => m_certHash;
public IssuerSerial IssuerSerial => m_issuerSerial;
public static EssCertID GetInstance(object o)
{
if (o == null)
return null;
EssCertID essCertID = o as EssCertID;
if (essCertID != null)
return essCertID;
return new EssCertID(Asn1Sequence.GetInstance(o));
}
public static EssCertID GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new EssCertID(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static EssCertID GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new EssCertID(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
[Obsolete("Use 'GetInstance' instead")]
public EssCertID(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 1 || count > 2)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_certHash = Asn1OctetString.GetInstance(seq[sequencePosition++]);
m_issuerSerial = Asn1Utilities.ReadOptional(seq, ref sequencePosition, IssuerSerial.GetOptional);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public EssCertID(byte[] hash)
: this(hash, null)
{
}
public EssCertID(byte[] hash, IssuerSerial issuerSerial)
{
m_certHash = DerOctetString.FromContents(hash);
m_issuerSerial = issuerSerial;
}
public EssCertID(Asn1OctetString certHash, IssuerSerial issuerSerial)
{
if (certHash == null)
throw new ArgumentNullException("certHash");
m_certHash = certHash;
m_issuerSerial = issuerSerial;
}
public byte[] GetCertHash()
{
return Arrays.Clone(m_certHash.GetOctets());
}
public override Asn1Object ToAsn1Object()
{
if (m_issuerSerial != null)
return new DerSequence(m_certHash, m_issuerSerial);
return new DerSequence(m_certHash);
}
}
}