<PackageReference Include="BouncyCastle.Cryptography" Version="2.7.0-beta.98" />

TbsCertificateStructure

using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.X509 { public class TbsCertificateStructure : Asn1Encodable { private readonly DerInteger m_version; private readonly DerInteger m_serialNumber; private readonly AlgorithmIdentifier m_signature; private readonly X509Name m_issuer; private readonly Validity m_validity; private readonly X509Name m_subject; private readonly SubjectPublicKeyInfo m_subjectPublicKeyInfo; private readonly DerBitString m_issuerUniqueID; private readonly DerBitString m_subjectUniqueID; private readonly X509Extensions m_extensions; private readonly Asn1Sequence m_seq; public int Version => m_version.IntValueExact + 1; public DerInteger VersionNumber => m_version; public DerInteger SerialNumber => m_serialNumber; public AlgorithmIdentifier Signature => m_signature; public X509Name Issuer => m_issuer; public Validity Validity => m_validity; public Time StartDate => Validity.NotBefore; public Time EndDate => Validity.NotAfter; public X509Name Subject => m_subject; public SubjectPublicKeyInfo SubjectPublicKeyInfo => m_subjectPublicKeyInfo; public DerBitString IssuerUniqueID => m_issuerUniqueID; public DerBitString SubjectUniqueID => m_subjectUniqueID; public X509Extensions Extensions => m_extensions; public static TbsCertificateStructure GetInstance(object obj) { if (obj == null) return null; TbsCertificateStructure tbsCertificateStructure = obj as TbsCertificateStructure; if (tbsCertificateStructure != null) return tbsCertificateStructure; return new TbsCertificateStructure(Asn1Sequence.GetInstance(obj)); } public static TbsCertificateStructure GetInstance(Asn1TaggedObject obj, bool explicitly) { return new TbsCertificateStructure(Asn1Sequence.GetInstance(obj, explicitly)); } public static TbsCertificateStructure GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new TbsCertificateStructure(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private TbsCertificateStructure(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 6 || count > 10) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_version = (Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, DerInteger.GetTagged) ?? DerInteger.Zero); bool flag = false; bool flag2 = false; if (m_version.HasValue(0)) flag = true; else if (m_version.HasValue(1)) { flag2 = true; } else if (!m_version.HasValue(2)) { throw new ArgumentException("version number not recognised"); } m_serialNumber = DerInteger.GetInstance(seq[sequencePosition++]); m_signature = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]); m_issuer = X509Name.GetInstance(seq[sequencePosition++]); m_validity = Validity.GetInstance(seq[sequencePosition++]); m_subject = X509Name.GetInstance(seq[sequencePosition++]); m_subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[sequencePosition++]); if (!flag) { m_issuerUniqueID = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, DerBitString.GetTagged); m_subjectUniqueID = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, false, DerBitString.GetTagged); if (!flag2) m_extensions = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 3, true, X509Extensions.GetTagged); } if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); m_seq = seq; } public TbsCertificateStructure(DerInteger version, DerInteger serialNumber, AlgorithmIdentifier signature, X509Name issuer, Validity validity, X509Name subject, SubjectPublicKeyInfo subjectPublicKeyInfo, DerBitString issuerUniqueID, DerBitString subjectUniqueID, X509Extensions extensions) { m_version = (version ?? DerInteger.Zero); if (serialNumber == null) throw new ArgumentNullException("serialNumber"); m_serialNumber = serialNumber; if (signature == null) throw new ArgumentNullException("signature"); m_signature = signature; if (issuer == null) throw new ArgumentNullException("issuer"); m_issuer = issuer; if (validity == null) throw new ArgumentNullException("validity"); m_validity = validity; if (subject == null) throw new ArgumentNullException("subject"); m_subject = subject; if (subjectPublicKeyInfo == null) throw new ArgumentNullException("subjectPublicKeyInfo"); m_subjectPublicKeyInfo = subjectPublicKeyInfo; m_issuerUniqueID = issuerUniqueID; m_subjectUniqueID = subjectUniqueID; m_extensions = extensions; m_seq = null; } public override Asn1Object ToAsn1Object() { if (m_seq != null) { string environmentVariable = Platform.GetEnvironmentVariable("Org.BouncyCastle.X509.Allow_Non-DER_TBSCert"); if (environmentVariable == null || Platform.EqualsIgnoreCase("true", environmentVariable)) return m_seq; } Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(10); if (!m_version.HasValue(0)) asn1EncodableVector.Add(new DerTaggedObject(true, 0, m_version)); asn1EncodableVector.Add(m_serialNumber, m_signature, m_issuer, m_validity, m_subject, m_subjectPublicKeyInfo); asn1EncodableVector.AddOptionalTagged(false, 1, m_issuerUniqueID); asn1EncodableVector.AddOptionalTagged(false, 2, m_subjectUniqueID); asn1EncodableVector.AddOptionalTagged(true, 3, m_extensions); return new DerSequence(asn1EncodableVector); } } }