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

RequestedCertificate

using Org.BouncyCastle.Asn1.X509; using System; using System.IO; namespace Org.BouncyCastle.Asn1.IsisMtt.Ocsp { public class RequestedCertificate : Asn1Encodable, IAsn1Choice { public enum Choice { Certificate = -1, PublicKeyCertificate, AttributeCertificate } private readonly X509CertificateStructure m_cert; private readonly Asn1OctetString m_publicKeyCert; private readonly Asn1OctetString m_attributeCert; public Choice Type { get { if (m_cert != null) return Choice.Certificate; if (m_publicKeyCert != null) return Choice.PublicKeyCertificate; return Choice.AttributeCertificate; } } public static RequestedCertificate GetInstance(object obj) { return Asn1Utilities.GetInstanceChoice(obj, GetOptional); } public static RequestedCertificate GetInstance(Asn1TaggedObject obj, bool isExplicit) { return Asn1Utilities.GetInstanceChoice(obj, isExplicit, GetInstance); } public static RequestedCertificate GetOptional(Asn1Encodable element) { if (element == null) throw new ArgumentNullException("element"); RequestedCertificate requestedCertificate = element as RequestedCertificate; if (requestedCertificate != null) return requestedCertificate; X509CertificateStructure optional = X509CertificateStructure.GetOptional(element); if (optional != null) return new RequestedCertificate(optional); Asn1TaggedObject optional2 = Asn1TaggedObject.GetOptional(element); if (optional2 != null && (optional2.HasContextTag(0) || optional2.HasContextTag(1))) return new RequestedCertificate(optional2); return null; } public static RequestedCertificate GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance); } private RequestedCertificate(Asn1TaggedObject tagged) { switch (tagged.TagNo) { case 1: m_attributeCert = Asn1OctetString.GetInstance(tagged, true); break; case 0: m_publicKeyCert = Asn1OctetString.GetInstance(tagged, true); break; default: throw new ArgumentException("unknown tag number: " + tagged.TagNo.ToString()); } } public RequestedCertificate(X509CertificateStructure certificate) { m_cert = certificate; } public RequestedCertificate(Choice type, byte[] certificateOctets) : this(new DerTaggedObject((int)type, DerOctetString.FromContents(certificateOctets))) { } public byte[] GetCertificateBytes() { if (m_cert != null) try { return m_cert.GetEncoded(); } catch (IOException ex) { throw new InvalidOperationException("can't decode certificate: " + ex?.ToString()); } if (m_publicKeyCert != null) return m_publicKeyCert.GetOctets(); return m_attributeCert.GetOctets(); } public override Asn1Object ToAsn1Object() { if (m_publicKeyCert != null) return new DerTaggedObject(0, m_publicKeyCert); if (m_attributeCert != null) return new DerTaggedObject(1, m_attributeCert); return m_cert.ToAsn1Object(); } } }