123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using System.Collections;
- using System.IO;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Tsp;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
- namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tsp
- {
- /**
- * Base class for an RFC 3161 Time Stamp Request.
- */
- public class TimeStampRequest
- : X509ExtensionBase
- {
- private TimeStampReq req;
- private X509Extensions extensions;
- public TimeStampRequest(
- TimeStampReq req)
- {
- this.req = req;
- this.extensions = req.Extensions;
- }
- /**
- * Create a TimeStampRequest from the past in byte array.
- *
- * @param req byte array containing the request.
- * @throws IOException if the request is malformed.
- */
- public TimeStampRequest(
- byte[] req)
- : this(new Asn1InputStream(req))
- {
- }
- /**
- * Create a TimeStampRequest from the past in input stream.
- *
- * @param in input stream containing the request.
- * @throws IOException if the request is malformed.
- */
- public TimeStampRequest(
- Stream input)
- : this(new Asn1InputStream(input))
- {
- }
- private TimeStampRequest(
- Asn1InputStream str)
- {
- try
- {
- this.req = TimeStampReq.GetInstance(str.ReadObject());
- }
- catch (InvalidCastException e)
- {
- throw new IOException("malformed request: " + e);
- }
- catch (ArgumentException e)
- {
- throw new IOException("malformed request: " + e);
- }
- }
- public int Version
- {
- get { return req.Version.IntValueExact; }
- }
- public string MessageImprintAlgOid
- {
- get { return req.MessageImprint.HashAlgorithm.Algorithm.Id; }
- }
- public byte[] GetMessageImprintDigest()
- {
- return req.MessageImprint.GetHashedMessage();
- }
- public string ReqPolicy
- {
- get
- {
- return req.ReqPolicy == null
- ? null
- : req.ReqPolicy.Id;
- }
- }
- public BigInteger Nonce
- {
- get
- {
- return req.Nonce == null
- ? null
- : req.Nonce.Value;
- }
- }
- public bool CertReq
- {
- get
- {
- return req.CertReq == null
- ? false
- : req.CertReq.IsTrue;
- }
- }
- /**
- * Validate the timestamp request, checking the digest to see if it is of an
- * accepted type and whether it is of the correct length for the algorithm specified.
- *
- * @param algorithms a set of string OIDS giving accepted algorithms.
- * @param policies if non-null a set of policies we are willing to sign under.
- * @param extensions if non-null a set of extensions we are willing to accept.
- * @throws TspException if the request is invalid, or processing fails.
- */
- public void Validate(
- IList algorithms,
- IList policies,
- IList extensions)
- {
- if (!algorithms.Contains(this.MessageImprintAlgOid))
- throw new TspValidationException("request contains unknown algorithm", PkiFailureInfo.BadAlg);
- if (policies != null && this.ReqPolicy != null && !policies.Contains(this.ReqPolicy))
- throw new TspValidationException("request contains unknown policy", PkiFailureInfo.UnacceptedPolicy);
- if (this.Extensions != null && extensions != null)
- {
- foreach (DerObjectIdentifier oid in this.Extensions.ExtensionOids)
- {
- if (!extensions.Contains(oid.Id))
- throw new TspValidationException("request contains unknown extension", PkiFailureInfo.UnacceptedExtension);
- }
- }
- int digestLength = TspUtil.GetDigestLength(this.MessageImprintAlgOid);
- if (digestLength != this.GetMessageImprintDigest().Length)
- throw new TspValidationException("imprint digest the wrong length", PkiFailureInfo.BadDataFormat);
- }
- /**
- * return the ASN.1 encoded representation of this object.
- */
- public byte[] GetEncoded()
- {
- return req.GetEncoded();
- }
- internal X509Extensions Extensions
- {
- get { return req.Extensions; }
- }
-
- public virtual bool HasExtensions
- {
- get { return extensions != null; }
- }
- public virtual X509Extension GetExtension(DerObjectIdentifier oid)
- {
- return extensions == null ? null : extensions.GetExtension(oid);
- }
- public virtual IList GetExtensionOids()
- {
- return TspUtil.GetExtensionOids(extensions);
- }
- protected override X509Extensions GetX509Extensions()
- {
- return Extensions;
- }
- }
- }
- #pragma warning restore
- #endif
|