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

TimeStampRequestGenerator

using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.Tsp; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Math; using System; using System.Collections.Generic; namespace Org.BouncyCastle.Tsp { public class TimeStampRequestGenerator { private DerObjectIdentifier reqPolicy; private DerBoolean certReq; private Dictionary<DerObjectIdentifier, X509Extension> m_extensions = new Dictionary<DerObjectIdentifier, X509Extension>(); private List<DerObjectIdentifier> m_ordering = new List<DerObjectIdentifier>(); public void SetReqPolicy(string reqPolicy) { this.reqPolicy = new DerObjectIdentifier(reqPolicy); } public void SetCertReq(bool certReq) { this.certReq = DerBoolean.GetInstance(certReq); } public virtual void AddExtension(DerObjectIdentifier oid, bool critical, Asn1Encodable extValue) { AddExtension(oid, critical, extValue.GetEncoded()); } public virtual void AddExtension(DerObjectIdentifier oid, bool critical, byte[] extValue) { m_extensions.Add(oid, new X509Extension(critical, new DerOctetString(extValue))); m_ordering.Add(oid); } public TimeStampRequest Generate(string digestAlgorithm, byte[] digest) { return Generate(digestAlgorithm, digest, null); } public TimeStampRequest Generate(string digestAlgorithmOid, byte[] digest, BigInteger nonce) { if (digestAlgorithmOid == null) throw new ArgumentException("No digest algorithm specified"); MessageImprint messageImprint = new MessageImprint(new AlgorithmIdentifier(new DerObjectIdentifier(digestAlgorithmOid), DerNull.Instance), digest); X509Extensions extensions = null; if (m_ordering.Count > 0) extensions = new X509Extensions(m_ordering, m_extensions); return new TimeStampRequest(new TimeStampReq(nonce: (nonce == null) ? null : new DerInteger(nonce), messageImprint: messageImprint, tsaPolicy: reqPolicy, certReq: certReq, extensions: extensions)); } public virtual TimeStampRequest Generate(DerObjectIdentifier digestAlgorithm, byte[] digest) { return Generate(digestAlgorithm.Id, digest); } public virtual TimeStampRequest Generate(DerObjectIdentifier digestAlgorithm, byte[] digest, BigInteger nonce) { return Generate(digestAlgorithm.Id, digest, nonce); } } }