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

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> e; object IEnumerator.Current { get { return Current; } } public CrlEntry Current => new CrlEntry(Asn1Sequence.GetInstance(e.Current)); internal RevokedCertificatesEnumerator(IEnumerator<Asn1Encodable> e) { this.e = e; } public void Dispose() { e.Dispose(); GC.SuppressFinalize(this); } public bool MoveNext() { return e.MoveNext(); } public void Reset() { e.Reset(); } } private readonly IEnumerable<Asn1Encodable> en; internal RevokedCertificatesEnumeration(IEnumerable<Asn1Encodable> en) { this.en = en; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public IEnumerator<CrlEntry> GetEnumerator() { return new RevokedCertificatesEnumerator(en.GetEnumerator()); } } internal Asn1Sequence seq; internal DerInteger version; internal AlgorithmIdentifier signature; internal X509Name issuer; internal Time thisUpdate; internal Time nextUpdate; internal Asn1Sequence revokedCertificates; internal X509Extensions crlExtensions; public int Version => version.IntValueExact + 1; public DerInteger VersionNumber => version; public AlgorithmIdentifier Signature => signature; public X509Name Issuer => issuer; public Time ThisUpdate => thisUpdate; public Time NextUpdate => nextUpdate; public X509Extensions Extensions => 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 GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); } private TbsCertificateList(Asn1Sequence seq) { if (seq.Count < 3 || seq.Count > 7) throw new ArgumentException("Bad sequence size: " + seq.Count.ToString()); int num = 0; this.seq = seq; DerInteger derInteger = seq[num] as DerInteger; if (derInteger != null) { version = derInteger; num++; } else version = new DerInteger(0); signature = AlgorithmIdentifier.GetInstance(seq[num++]); issuer = X509Name.GetInstance(seq[num++]); thisUpdate = Time.GetInstance(seq[num++]); if (num < seq.Count && (seq[num] is Asn1UtcTime || seq[num] is Asn1GeneralizedTime || seq[num] is Time)) nextUpdate = Time.GetInstance(seq[num++]); if (num < seq.Count && !(seq[num] is Asn1TaggedObject)) revokedCertificates = Asn1Sequence.GetInstance(seq[num++]); if (num < seq.Count && seq[num] is Asn1TaggedObject) crlExtensions = X509Extensions.GetInstance(seq[num]); } public CrlEntry[] GetRevokedCertificates() { if (revokedCertificates == null) return new CrlEntry[0]; CrlEntry[] array = new CrlEntry[revokedCertificates.Count]; for (int i = 0; i < array.Length; i++) { array[i] = new CrlEntry(Asn1Sequence.GetInstance(revokedCertificates[i])); } return array; } public IEnumerable<CrlEntry> GetRevokedCertificateEnumeration() { if (revokedCertificates == null) return new List<CrlEntry>(0); return new RevokedCertificatesEnumeration(revokedCertificates); } public override Asn1Object ToAsn1Object() { return seq; } } }