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

CertificatePair

using System; namespace Org.BouncyCastle.Asn1.X509 { public class CertificatePair : Asn1Encodable { private X509CertificateStructure m_forward; private X509CertificateStructure m_reverse; public X509CertificateStructure Forward => m_forward; public X509CertificateStructure Reverse => m_reverse; public static CertificatePair GetInstance(object obj) { if (obj == null) return null; CertificatePair certificatePair = obj as CertificatePair; if (certificatePair != null) return certificatePair; return new CertificatePair(Asn1Sequence.GetInstance(obj)); } public static CertificatePair GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new CertificatePair(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static CertificatePair GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new CertificatePair(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private CertificatePair(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 0 || count > 2) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_forward = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, X509CertificateStructure.GetTagged); m_reverse = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, X509CertificateStructure.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); Validate(); } public CertificatePair(X509CertificateStructure forward, X509CertificateStructure reverse) { m_forward = forward; m_reverse = reverse; Validate(); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2); asn1EncodableVector.AddOptionalTagged(true, 0, m_forward); asn1EncodableVector.AddOptionalTagged(true, 1, m_reverse); return new DerSequence(asn1EncodableVector); } private void Validate() { if (m_forward == null && m_reverse == null) throw new ArgumentException("At least one of the pair shall be present"); } } }