<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" />

EssCertIDv2

public class EssCertIDv2 : Asn1Encodable
using Org.BouncyCastle.Asn1.Nist; using Org.BouncyCastle.Asn1.Oiw; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Operators.Utilities; using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.Ess { public class EssCertIDv2 : Asn1Encodable { private static readonly AlgorithmIdentifier DefaultHashAlgorithm = DefaultDigestAlgorithmFinder.Instance.Find(NistObjectIdentifiers.IdSha256); private readonly AlgorithmIdentifier m_hashAlgorithm; private readonly Asn1OctetString m_certHash; private readonly IssuerSerial m_issuerSerial; public AlgorithmIdentifier HashAlgorithm => m_hashAlgorithm; public Asn1OctetString CertHash => m_certHash; public IssuerSerial IssuerSerial => m_issuerSerial; public static EssCertIDv2 From(EssCertID essCertID) { return new EssCertIDv2(new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1), essCertID.CertHash, essCertID.IssuerSerial); } public static EssCertIDv2 GetInstance(object obj) { if (obj == null) return null; EssCertIDv2 essCertIDv = obj as EssCertIDv2; if (essCertIDv != null) return essCertIDv; return new EssCertIDv2(Asn1Sequence.GetInstance(obj)); } public static EssCertIDv2 GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new EssCertIDv2(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static EssCertIDv2 GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new EssCertIDv2(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private EssCertIDv2(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 1 || count > 3) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_hashAlgorithm = (Asn1Utilities.ReadOptional(seq, ref sequencePosition, AlgorithmIdentifier.GetOptional) ?? DefaultHashAlgorithm); 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 EssCertIDv2(byte[] certHash) : this(null, certHash, null) { } public EssCertIDv2(AlgorithmIdentifier algId, byte[] certHash) : this(algId, certHash, null) { } public EssCertIDv2(byte[] certHash, IssuerSerial issuerSerial) : this(null, certHash, issuerSerial) { } public EssCertIDv2(AlgorithmIdentifier algId, byte[] certHash, IssuerSerial issuerSerial) { m_hashAlgorithm = (algId ?? DefaultHashAlgorithm); m_certHash = DerOctetString.FromContents(certHash); m_issuerSerial = issuerSerial; } public EssCertIDv2(AlgorithmIdentifier hashAlgorithm, Asn1OctetString certHash, IssuerSerial issuerSerial) { m_hashAlgorithm = (hashAlgorithm ?? DefaultHashAlgorithm); 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() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3); if (!DefaultHashAlgorithm.Equals(m_hashAlgorithm)) asn1EncodableVector.Add(m_hashAlgorithm); asn1EncodableVector.Add(m_certHash); asn1EncodableVector.AddOptional(m_issuerSerial); return new DerSequence(asn1EncodableVector); } } }