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

TbsCertificateList

using System; using System.Collections; using System.Collections.Generic; namespace Org.BouncyCastle.Asn1.X509 { public class TbsCertificateList : Asn1Encodable { private class RevokedCertificatesEnumeration : IEnumerable<CrlEntry>, IEnumerable { private sealed class RevokedCertificatesEnumerator : IEnumerator<CrlEntry>, IDisposable, IEnumerator { private readonly IEnumerator<Asn1Encodable> m_e; object IEnumerator.Current { get { return Current; } } public CrlEntry Current => CrlEntry.GetInstance(m_e.Current); internal RevokedCertificatesEnumerator(IEnumerator<Asn1Encodable> e) { m_e = e; } public void Dispose() { m_e.Dispose(); GC.SuppressFinalize(this); } public bool MoveNext() { return m_e.MoveNext(); } public void Reset() { m_e.Reset(); } } private readonly IEnumerable<Asn1Encodable> m_en; internal RevokedCertificatesEnumeration(IEnumerable<Asn1Encodable> en) { m_en = en; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public IEnumerator<CrlEntry> GetEnumerator() { return new RevokedCertificatesEnumerator(m_en.GetEnumerator()); } } private readonly Asn1Sequence m_seq; private readonly DerInteger m_version; private readonly AlgorithmIdentifier m_signature; private readonly X509Name m_issuer; private readonly Time m_thisUpdate; private readonly Time m_nextUpdate; private readonly Asn1Sequence m_revokedCertificates; private readonly X509Extensions m_crlExtensions; public int Version => m_version.IntValueExact + 1; public DerInteger VersionNumber => m_version; public AlgorithmIdentifier Signature => m_signature; public X509Name Issuer => m_issuer; public Time ThisUpdate => m_thisUpdate; public Time NextUpdate => m_nextUpdate; public X509Extensions Extensions => m_crlExtensions; public static TbsCertificateList GetInstance(object obj) { if (obj == null) return null; TbsCertificateList tbsCertificateList = obj as TbsCertificateList; if (tbsCertificateList != null) return tbsCertificateList; return new TbsCertificateList(Asn1Sequence.GetInstance(obj)); } public static TbsCertificateList GetInstance(Asn1TaggedObject obj, bool explicitly) { return new TbsCertificateList(Asn1Sequence.GetInstance(obj, explicitly)); } public static TbsCertificateList GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new TbsCertificateList(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private TbsCertificateList(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 3 || count > 7) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_version = (Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerInteger.GetOptional) ?? DerInteger.Zero); m_signature = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]); m_issuer = X509Name.GetInstance(seq[sequencePosition++]); m_thisUpdate = Time.GetInstance(seq[sequencePosition++]); m_nextUpdate = Asn1Utilities.ReadOptional(seq, ref sequencePosition, Time.GetOptional); m_revokedCertificates = Asn1Utilities.ReadOptional(seq, ref sequencePosition, Asn1Sequence.GetOptional); m_crlExtensions = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, X509Extensions.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); m_seq = seq; } public CrlEntry[] GetRevokedCertificates() { return m_revokedCertificates?.MapElements(CrlEntry.GetInstance) ?? Array.Empty<CrlEntry>(); } public IEnumerable<CrlEntry> GetRevokedCertificateEnumeration() { if (m_revokedCertificates == null) return new List<CrlEntry>(0); return new RevokedCertificatesEnumeration(m_revokedCertificates); } public override Asn1Object ToAsn1Object() { return m_seq; } } }