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

SignedDataParser

public class SignedDataParser
using Org.BouncyCastle.Utilities; using System.IO; namespace Org.BouncyCastle.Asn1.Cms { public class SignedDataParser { private readonly Asn1SequenceParser m_seq; private readonly DerInteger m_version; private object _nextObject; private bool _certsCalled; private bool _crlsCalled; public DerInteger Version => m_version; public static SignedDataParser GetInstance(object o) { Asn1SequenceParser asn1SequenceParser = o as Asn1SequenceParser; if (asn1SequenceParser != null) return new SignedDataParser(asn1SequenceParser); Asn1Sequence asn1Sequence = o as Asn1Sequence; if (asn1Sequence != null) return new SignedDataParser(asn1Sequence.Parser); throw new IOException("unknown object encountered: " + Platform.GetTypeName(o)); } public SignedDataParser(Asn1SequenceParser seq) { m_seq = seq; m_version = (DerInteger)seq.ReadObject(); } public Asn1SetParser GetDigestAlgorithms() { return (Asn1SetParser)m_seq.ReadObject(); } public ContentInfoParser GetEncapContentInfo() { return new ContentInfoParser((Asn1SequenceParser)m_seq.ReadObject()); } public Asn1SetParser GetCertificates() { _certsCalled = true; _nextObject = m_seq.ReadObject(); Asn1TaggedObjectParser asn1TaggedObjectParser = _nextObject as Asn1TaggedObjectParser; if (asn1TaggedObjectParser != null && asn1TaggedObjectParser.HasContextTag(0)) { Asn1SetParser result = (Asn1SetParser)asn1TaggedObjectParser.ParseBaseUniversal(false, 17); _nextObject = null; return result; } return null; } public Asn1SetParser GetCrls() { if (!_certsCalled) throw new IOException("GetCerts() has not been called."); _crlsCalled = true; if (_nextObject == null) _nextObject = m_seq.ReadObject(); Asn1TaggedObjectParser asn1TaggedObjectParser = _nextObject as Asn1TaggedObjectParser; if (asn1TaggedObjectParser != null && asn1TaggedObjectParser.HasContextTag(1)) { Asn1SetParser result = (Asn1SetParser)asn1TaggedObjectParser.ParseBaseUniversal(false, 17); _nextObject = null; return result; } return null; } public Asn1SetParser GetSignerInfos() { if (!_certsCalled || !_crlsCalled) throw new IOException("GetCerts() and/or GetCrls() has not been called."); if (_nextObject == null) _nextObject = m_seq.ReadObject(); return (Asn1SetParser)_nextObject; } } }