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

TimeStampTokenInfo

public class TimeStampTokenInfo
using Org.BouncyCastle.Asn1.Tsp; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Math; using System; namespace Org.BouncyCastle.Tsp { public class TimeStampTokenInfo { private TstInfo tstInfo; private DateTime genTime; public bool IsOrdered => tstInfo.Ordering.IsTrue; public Accuracy Accuracy => tstInfo.Accuracy; public DateTime GenTime => genTime; public GenTimeAccuracy GenTimeAccuracy { get { if (Accuracy != null) return new GenTimeAccuracy(Accuracy); return null; } } public string Policy => tstInfo.Policy.Id; public BigInteger SerialNumber => tstInfo.SerialNumber.Value; public GeneralName Tsa => tstInfo.Tsa; public BigInteger Nonce { get { if (tstInfo.Nonce != null) return tstInfo.Nonce.Value; return null; } } public AlgorithmIdentifier HashAlgorithm => tstInfo.MessageImprint.HashAlgorithm; public string MessageImprintAlgOid => tstInfo.MessageImprint.HashAlgorithm.Algorithm.Id; public TstInfo TstInfo => tstInfo; private static TstInfo ParseTstInfo(byte[] tstInfoEncoding) { try { return TstInfo.GetInstance(tstInfoEncoding); } catch (Exception ex) { throw new TspException("unable to parse TstInfo encoding: " + ex.Message); } } public TimeStampTokenInfo(byte[] tstInfoEncoding) : this(ParseTstInfo(tstInfoEncoding)) { } public TimeStampTokenInfo(TstInfo tstInfo) { this.tstInfo = tstInfo; try { genTime = tstInfo.GenTime.ToDateTime(); } catch (Exception ex) { throw new TspException("unable to parse genTime field: " + ex.Message); } } public byte[] GetMessageImprintDigest() { return tstInfo.MessageImprint.GetHashedMessage(); } public byte[] GetEncoded() { return tstInfo.GetEncoded(); } } }