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

ObjectDigestInfo

using System; namespace Org.BouncyCastle.Asn1.X509 { public class ObjectDigestInfo : Asn1Encodable { public const int PublicKey = 0; public const int PublicKeyCert = 1; public const int OtherObjectDigest = 2; private readonly DerEnumerated m_digestedObjectType; private readonly DerObjectIdentifier m_otherObjectTypeID; private readonly AlgorithmIdentifier m_digestAlgorithm; private readonly DerBitString m_objectDigest; public DerEnumerated DigestedObjectType => m_digestedObjectType; public DerObjectIdentifier OtherObjectTypeID => m_otherObjectTypeID; public AlgorithmIdentifier DigestAlgorithm => m_digestAlgorithm; public DerBitString ObjectDigest => m_objectDigest; public static ObjectDigestInfo GetInstance(object obj) { if (obj == null) return null; ObjectDigestInfo objectDigestInfo = obj as ObjectDigestInfo; if (objectDigestInfo != null) return objectDigestInfo; return new ObjectDigestInfo(Asn1Sequence.GetInstance(obj)); } public static ObjectDigestInfo GetInstance(Asn1TaggedObject obj, bool isExplicit) { return new ObjectDigestInfo(Asn1Sequence.GetInstance(obj, isExplicit)); } public static ObjectDigestInfo GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new ObjectDigestInfo(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private ObjectDigestInfo(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 3 || count > 4) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_digestedObjectType = DerEnumerated.GetInstance(seq[sequencePosition++]); m_otherObjectTypeID = Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerObjectIdentifier.GetOptional); m_digestAlgorithm = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]); m_objectDigest = DerBitString.GetInstance(seq[sequencePosition++]); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public ObjectDigestInfo(int digestedObjectType, string otherObjectTypeID, AlgorithmIdentifier digestAlgorithm, byte[] objectDigest) { m_digestedObjectType = new DerEnumerated(digestedObjectType); if (digestedObjectType == 2) m_otherObjectTypeID = new DerObjectIdentifier(otherObjectTypeID); if (digestAlgorithm == null) throw new ArgumentNullException("digestAlgorithm"); m_digestAlgorithm = digestAlgorithm; m_objectDigest = new DerBitString(objectDigest); } public override Asn1Object ToAsn1Object() { if (m_otherObjectTypeID != null) return new DerSequence(m_digestedObjectType, m_otherObjectTypeID, m_digestAlgorithm, m_objectDigest); return new DerSequence(m_digestedObjectType, m_digestAlgorithm, m_objectDigest); } } }