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

CertOrEncCert

using Org.BouncyCastle.Asn1.Crmf; using System; namespace Org.BouncyCastle.Asn1.Cmp { public class CertOrEncCert : Asn1Encodable, IAsn1Choice { private readonly CmpCertificate m_certificate; private readonly EncryptedKey m_encryptedCert; public virtual CmpCertificate Certificate => m_certificate; public virtual EncryptedKey EncryptedCert => m_encryptedCert; public virtual bool HasEncryptedCertificate => m_encryptedCert != null; public static CertOrEncCert GetInstance(object obj) { if (obj == null) return null; CertOrEncCert certOrEncCert = obj as CertOrEncCert; if (certOrEncCert != null) return certOrEncCert; return new CertOrEncCert(Asn1TaggedObject.GetInstance(obj, 128)); } public static CertOrEncCert GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetInstanceChoice(taggedObject, declaredExplicit, GetInstance); } public static CertOrEncCert GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance); } private CertOrEncCert(Asn1TaggedObject taggedObject) { if (taggedObject.HasContextTag(0)) m_certificate = CmpCertificate.GetInstance(taggedObject.GetExplicitBaseObject()); else { if (!taggedObject.HasContextTag(1)) throw new ArgumentException("unknown tag: " + Asn1Utilities.GetTagText(taggedObject), "taggedObject"); m_encryptedCert = EncryptedKey.GetInstance(taggedObject.GetExplicitBaseObject()); } } public CertOrEncCert(CmpCertificate certificate) { if (certificate == null) throw new ArgumentNullException("certificate"); m_certificate = certificate; } [Obsolete("Use constructor with EncryptedKey instead")] public CertOrEncCert(EncryptedValue encryptedValue) { if (encryptedValue == null) throw new ArgumentNullException("encryptedValue"); m_encryptedCert = new EncryptedKey(encryptedValue); } public CertOrEncCert(EncryptedKey encryptedKey) { if (encryptedKey == null) throw new ArgumentNullException("encryptedKey"); m_encryptedCert = encryptedKey; } public override Asn1Object ToAsn1Object() { if (m_certificate != null) return new DerTaggedObject(true, 0, m_certificate); if (m_encryptedCert != null) return new DerTaggedObject(true, 1, m_encryptedCert); throw new InvalidOperationException(); } } }