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

ContentInfo

public class ContentInfo : Asn1Encodable
using System; namespace Org.BouncyCastle.Asn1.Cms { public class ContentInfo : Asn1Encodable { private readonly DerObjectIdentifier m_contentType; private readonly Asn1Encodable m_content; private readonly bool m_isDefiniteLength; public DerObjectIdentifier ContentType => m_contentType; public Asn1Encodable Content => m_content; internal bool IsDefiniteLength => m_isDefiniteLength; public static ContentInfo GetInstance(object obj) { if (obj == null) return null; ContentInfo contentInfo = obj as ContentInfo; if (contentInfo != null) return contentInfo; return new ContentInfo(Asn1Sequence.GetInstance(obj)); } public static ContentInfo GetInstance(Asn1TaggedObject obj, bool isExplicit) { return new ContentInfo(Asn1Sequence.GetInstance(obj, isExplicit)); } public static ContentInfo GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new ContentInfo(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private ContentInfo(Asn1Sequence seq) { int count = seq.Count; if (count < 1 || count > 2) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_contentType = DerObjectIdentifier.GetInstance(seq[0]); if (seq.Count > 1) m_content = Asn1TaggedObject.GetInstance(seq[1], 128, 0).GetExplicitBaseObject(); else m_content = null; m_isDefiniteLength = IsDLSequence(seq); } public ContentInfo(DerObjectIdentifier contentType, Asn1Encodable content) { if (contentType == null) throw new ArgumentNullException("contentType"); m_contentType = contentType; m_content = content; m_isDefiniteLength = IsDLContent(content); } public override Asn1Object ToAsn1Object() { if (m_isDefiniteLength) { if (m_content != null) return new DLSequence(m_contentType, new DLTaggedObject(0, m_content)); return new DLSequence(m_contentType); } if (m_content != null) return new BerSequence(m_contentType, new BerTaggedObject(0, m_content)); return new BerSequence(m_contentType); } private static bool IsDLContent(Asn1Encodable content) { if (content == null) return true; Asn1Object asn1Object = content.ToAsn1Object(); if (!IsDLOctetString(asn1Object)) return IsDLSequence(asn1Object); return true; } private static bool IsDLOctetString(Asn1Object asn1Object) { return asn1Object.GetType().IsAssignableFrom(typeof(DerOctetString)); } private static bool IsDLSequence(Asn1Object asn1Object) { return asn1Object.GetType().IsAssignableFrom(typeof(DLSequence)); } } }