<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.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)); } public static CertifiedKeyPair GetOptional(Asn1Encodable element) { if (element == null) throw new ArgumentNullException("element"); CertifiedKeyPair certifiedKeyPair = element as CertifiedKeyPair; if (certifiedKeyPair != null) return certifiedKeyPair; Asn1Sequence optional = Asn1Sequence.GetOptional(element); if (optional != null) return new CertifiedKeyPair(optional); return null; } public static CertifiedKeyPair GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new CertifiedKeyPair(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private CertifiedKeyPair(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 1 || count > 3) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_certOrEncCert = CertOrEncCert.GetInstance(seq[sequencePosition++]); m_privateKey = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, EncryptedKey.GetTagged); m_publicationInfo = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, PkiPublicationInfo.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public CertifiedKeyPair(CertOrEncCert certOrEncCert) : this(certOrEncCert, (EncryptedKey)null, (PkiPublicationInfo)null) { } [Obsolete("Use constructor with EncryptedKey instead")] 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); } } }