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

CertifiedKeyPair

using Org.BouncyCastle.Asn1.Crmf; using System; namespace Org.BouncyCastle.Asn1.Cmp { public class CertifiedKeyPair : Asn1Encodable { private readonly CertOrEncCert m_certOrEncCert; private readonly EncryptedKey m_privateKey; private readonly PkiPublicationInfo m_publicationInfo; public virtual CertOrEncCert CertOrEncCert => m_certOrEncCert; public virtual EncryptedKey PrivateKey => m_privateKey; public virtual PkiPublicationInfo PublicationInfo => m_publicationInfo; public static CertifiedKeyPair GetInstance(object obj) { if (obj == null) return null; CertifiedKeyPair certifiedKeyPair = obj as CertifiedKeyPair; if (certifiedKeyPair != null) return certifiedKeyPair; return new CertifiedKeyPair(Asn1Sequence.GetInstance(obj)); } public static CertifiedKeyPair GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new CertifiedKeyPair(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } private CertifiedKeyPair(Asn1Sequence seq) { m_certOrEncCert = CertOrEncCert.GetInstance(seq[0]); if (seq.Count >= 2) { if (seq.Count == 2) { Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[1], 128); if (instance.TagNo == 0) m_privateKey = EncryptedKey.GetInstance(instance.GetExplicitBaseObject()); else m_publicationInfo = PkiPublicationInfo.GetInstance(instance.GetExplicitBaseObject()); } else { m_privateKey = EncryptedKey.GetInstance(Asn1TaggedObject.GetInstance(seq[1], 128).GetExplicitBaseObject()); m_publicationInfo = PkiPublicationInfo.GetInstance(Asn1TaggedObject.GetInstance(seq[2], 128).GetExplicitBaseObject()); } } } public CertifiedKeyPair(CertOrEncCert certOrEncCert) : this(certOrEncCert, (EncryptedKey)null, (PkiPublicationInfo)null) { } public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedValue privateKey, PkiPublicationInfo publicationInfo) : this(certOrEncCert, (privateKey == null) ? null : new EncryptedKey(privateKey), publicationInfo) { } public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedKey privateKey, PkiPublicationInfo publicationInfo) { if (certOrEncCert == null) throw new ArgumentNullException("certOrEncCert"); m_certOrEncCert = certOrEncCert; m_privateKey = privateKey; m_publicationInfo = publicationInfo; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3); asn1EncodableVector.Add(m_certOrEncCert); asn1EncodableVector.AddOptionalTagged(true, 0, m_privateKey); asn1EncodableVector.AddOptionalTagged(true, 1, m_publicationInfo); return new DerSequence(asn1EncodableVector); } } }