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

RequestedCertificate

using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Utilities; 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 cert; private readonly byte[] publicKeyCert; private readonly byte[] attributeCert; public Choice Type { get { if (cert != null) return Choice.Certificate; if (publicKeyCert != null) return Choice.PublicKeyCertificate; return Choice.AttributeCertificate; } } public static RequestedCertificate GetInstance(object obj) { if (obj == null) return null; RequestedCertificate requestedCertificate = obj as RequestedCertificate; if (requestedCertificate != null) return requestedCertificate; if (obj is Asn1Sequence) return new RequestedCertificate(X509CertificateStructure.GetInstance(obj)); Asn1TaggedObject asn1TaggedObject = obj as Asn1TaggedObject; if (asn1TaggedObject != null) return new RequestedCertificate(asn1TaggedObject); throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj"); } public static RequestedCertificate GetInstance(Asn1TaggedObject obj, bool isExplicit) { return Asn1Utilities.GetInstanceFromChoice(obj, isExplicit, GetInstance); } private RequestedCertificate(Asn1TaggedObject tagged) { switch (tagged.TagNo) { case 1: attributeCert = Asn1OctetString.GetInstance(tagged, true).GetOctets(); break; case 0: publicKeyCert = Asn1OctetString.GetInstance(tagged, true).GetOctets(); break; default: throw new ArgumentException("unknown tag number: " + tagged.TagNo.ToString()); } } public RequestedCertificate(X509CertificateStructure certificate) { cert = certificate; } public RequestedCertificate(Choice type, byte[] certificateOctets) : this(new DerTaggedObject((int)type, new DerOctetString(certificateOctets))) { } public byte[] GetCertificateBytes() { if (cert != null) try { return cert.GetEncoded(); } catch (IOException ex) { throw new InvalidOperationException("can't decode certificate: " + ex?.ToString()); } if (publicKeyCert != null) return publicKeyCert; return attributeCert; } public override Asn1Object ToAsn1Object() { if (publicKeyCert != null) return new DerTaggedObject(0, new DerOctetString(publicKeyCert)); if (attributeCert != null) return new DerTaggedObject(1, new DerOctetString(attributeCert)); return cert.ToAsn1Object(); } } }