TimeStampRequest
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Tsp;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.X509;
using System;
using System.Collections.Generic;
using System.IO;
namespace Org.BouncyCastle.Tsp
{
public class TimeStampRequest : X509ExtensionBase
{
private TimeStampReq req;
public int Version => req.Version.IntValueExact;
public string MessageImprintAlgOid => req.MessageImprint.HashAlgorithm.Algorithm.Id;
public string ReqPolicy {
get {
if (req.ReqPolicy != null)
return req.ReqPolicy.Id;
return null;
}
}
public BigInteger Nonce {
get {
if (req.Nonce != null)
return req.Nonce.Value;
return null;
}
}
public bool CertReq {
get {
if (req.CertReq != null)
return req.CertReq.IsTrue;
return false;
}
}
internal X509Extensions Extensions => req.Extensions;
public virtual bool HasExtensions => Extensions != null;
public TimeStampRequest(TimeStampReq req)
{
this.req = req;
}
public TimeStampRequest(byte[] req)
: this(new Asn1InputStream(req))
{
}
public TimeStampRequest(Stream input)
: this(new Asn1InputStream(input))
{
}
private TimeStampRequest(Asn1InputStream str)
{
try {
req = TimeStampReq.GetInstance(str.ReadObject());
} catch (InvalidCastException ex) {
throw new IOException("malformed request: " + ex?.ToString());
} catch (ArgumentException ex2) {
throw new IOException("malformed request: " + ex2?.ToString());
}
}
public byte[] GetMessageImprintDigest()
{
return req.MessageImprint.GetHashedMessage();
}
public void Validate(IList<string> algorithms, IList<string> policies, IList<string> extensions)
{
if (!algorithms.Contains(MessageImprintAlgOid))
throw new TspValidationException("request contains unknown algorithm", 128);
if (policies != null && ReqPolicy != null && !policies.Contains(ReqPolicy))
throw new TspValidationException("request contains unknown policy", 256);
if (Extensions != null && extensions != null) {
foreach (DerObjectIdentifier extensionOid in Extensions.ExtensionOids) {
if (!extensions.Contains(extensionOid.Id))
throw new TspValidationException("request contains unknown extension", 8388608);
}
}
if (TspUtil.GetDigestLength(MessageImprintAlgOid) != GetMessageImprintDigest().Length)
throw new TspValidationException("imprint digest the wrong length", 4);
}
public byte[] GetEncoded()
{
return req.GetEncoded();
}
public virtual IList<DerObjectIdentifier> GetExtensionOids()
{
return TspUtil.GetExtensionOids(Extensions);
}
protected override X509Extensions GetX509Extensions()
{
return Extensions;
}
}
}