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

Extension

public class Extension : Asn1Encodable
using System; namespace Org.BouncyCastle.Asn1.X509 { public class Extension : Asn1Encodable { private static readonly DerBoolean DefaultCritical = DerBoolean.False; private readonly DerObjectIdentifier m_extnID; private readonly DerBoolean m_critical; private readonly Asn1OctetString m_extnValue; public DerBoolean Critical => m_critical; public DerObjectIdentifier ExtnID => m_extnID; public Asn1OctetString ExtnValue => m_extnValue; public static Extension GetInstance(object obj) { if (obj == null) return null; Extension extension = obj as Extension; if (extension != null) return extension; return new Extension(Asn1Sequence.GetInstance(obj)); } public static Extension GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new Extension(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static Extension GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new Extension(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private Extension(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 2 || count > 3) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_extnID = DerObjectIdentifier.GetInstance(seq[sequencePosition++]); m_critical = (Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerBoolean.GetOptional) ?? DefaultCritical); m_extnValue = Asn1OctetString.GetInstance(seq[sequencePosition++]); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public Extension(DerObjectIdentifier extnID, DerBoolean critical, Asn1OctetString extnValue) { if (extnID == null) throw new ArgumentNullException("extnID"); m_extnID = extnID; m_critical = (critical ?? DefaultCritical); if (extnValue == null) throw new ArgumentNullException("extnValue"); m_extnValue = extnValue; } public override Asn1Object ToAsn1Object() { if (!DefaultCritical.Equals(m_critical)) return new DerSequence(m_extnID, m_critical, m_extnValue); return new DerSequence(m_extnID, m_extnValue); } public X509Extension GetX509Extension() { return new X509Extension(m_critical, m_extnValue); } } }