mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-27 10:46:17 +00:00
提交Unity 联机Pro
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
/// <remarks>
|
||||
/// <code>
|
||||
/// BasicOcspResponse ::= SEQUENCE {
|
||||
/// tbsResponseData ResponseData,
|
||||
/// signatureAlgorithm AlgorithmIdentifier,
|
||||
/// signature BIT STRING,
|
||||
/// certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL
|
||||
/// }
|
||||
/// </code>
|
||||
/// </remarks>
|
||||
public class BasicOcspResp
|
||||
: X509ExtensionBase
|
||||
{
|
||||
private readonly BasicOcspResponse resp;
|
||||
private readonly ResponseData data;
|
||||
// private readonly X509Certificate[] chain;
|
||||
|
||||
public BasicOcspResp(
|
||||
BasicOcspResponse resp)
|
||||
{
|
||||
this.resp = resp;
|
||||
this.data = resp.TbsResponseData;
|
||||
}
|
||||
|
||||
/// <returns>The DER encoding of the tbsResponseData field.</returns>
|
||||
/// <exception cref="OcspException">In the event of an encoding error.</exception>
|
||||
public byte[] GetTbsResponseData()
|
||||
{
|
||||
try
|
||||
{
|
||||
return data.GetDerEncoded();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new OcspException("problem encoding tbsResponseData", e);
|
||||
}
|
||||
}
|
||||
|
||||
public int Version
|
||||
{
|
||||
get { return data.Version.IntValueExact + 1; }
|
||||
}
|
||||
|
||||
public RespID ResponderId
|
||||
{
|
||||
get { return new RespID(data.ResponderID); }
|
||||
}
|
||||
|
||||
public DateTime ProducedAt
|
||||
{
|
||||
get { return data.ProducedAt.ToDateTime(); }
|
||||
}
|
||||
|
||||
public SingleResp[] Responses
|
||||
{
|
||||
get
|
||||
{
|
||||
Asn1Sequence s = data.Responses;
|
||||
SingleResp[] rs = new SingleResp[s.Count];
|
||||
|
||||
for (int i = 0; i != rs.Length; i++)
|
||||
{
|
||||
rs[i] = new SingleResp(SingleResponse.GetInstance(s[i]));
|
||||
}
|
||||
|
||||
return rs;
|
||||
}
|
||||
}
|
||||
|
||||
public X509Extensions ResponseExtensions
|
||||
{
|
||||
get { return data.ResponseExtensions; }
|
||||
}
|
||||
|
||||
protected override X509Extensions GetX509Extensions()
|
||||
{
|
||||
return ResponseExtensions;
|
||||
}
|
||||
|
||||
public string SignatureAlgName
|
||||
{
|
||||
get { return OcspUtilities.GetAlgorithmName(resp.SignatureAlgorithm.Algorithm); }
|
||||
}
|
||||
|
||||
public string SignatureAlgOid
|
||||
{
|
||||
get { return resp.SignatureAlgorithm.Algorithm.Id; }
|
||||
}
|
||||
|
||||
public byte[] GetSignature()
|
||||
{
|
||||
return resp.GetSignatureOctets();
|
||||
}
|
||||
|
||||
private List<X509Certificate> GetCertList()
|
||||
{
|
||||
// load the certificates if we have any
|
||||
|
||||
var result = new List<X509Certificate>();
|
||||
|
||||
Asn1Sequence certs = resp.Certs;
|
||||
if (certs != null)
|
||||
{
|
||||
foreach (Asn1Encodable ae in certs)
|
||||
{
|
||||
if (ae != null && ae.ToAsn1Object() is Asn1Sequence s)
|
||||
{
|
||||
result.Add(new X509Certificate(X509CertificateStructure.GetInstance(s)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public X509Certificate[] GetCerts()
|
||||
{
|
||||
return GetCertList().ToArray();
|
||||
}
|
||||
|
||||
/// <returns>The certificates, if any, associated with the response.</returns>
|
||||
/// <exception cref="OcspException">In the event of an encoding error.</exception>
|
||||
public IStore<X509Certificate> GetCertificates()
|
||||
{
|
||||
return CollectionUtilities.CreateStore(this.GetCertList());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verify the signature against the tbsResponseData object we contain.
|
||||
/// </summary>
|
||||
public bool Verify(
|
||||
AsymmetricKeyParameter publicKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
ISigner signature = SignerUtilities.GetSigner(this.SignatureAlgName);
|
||||
signature.Init(false, publicKey);
|
||||
byte[] bs = data.GetDerEncoded();
|
||||
signature.BlockUpdate(bs, 0, bs.Length);
|
||||
|
||||
return signature.VerifySignature(this.GetSignature());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("exception processing sig: " + e, e);
|
||||
}
|
||||
}
|
||||
|
||||
/// <returns>The ASN.1 encoded representation of this object.</returns>
|
||||
public byte[] GetEncoded()
|
||||
{
|
||||
return resp.GetEncoded();
|
||||
}
|
||||
|
||||
public override bool Equals(
|
||||
object obj)
|
||||
{
|
||||
if (obj == this)
|
||||
return true;
|
||||
|
||||
BasicOcspResp other = obj as BasicOcspResp;
|
||||
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
return resp.Equals(other.resp);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return resp.GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2617f7006c85dd44d864e1c11fe6ca73
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,294 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
/**
|
||||
* Generator for basic OCSP response objects.
|
||||
*/
|
||||
public class BasicOcspRespGenerator
|
||||
{
|
||||
private readonly List<ResponseObject> list = new List<ResponseObject>();
|
||||
|
||||
private X509Extensions responseExtensions;
|
||||
private RespID responderID;
|
||||
|
||||
private class ResponseObject
|
||||
{
|
||||
internal CertificateID certId;
|
||||
internal CertStatus certStatus;
|
||||
internal Asn1GeneralizedTime thisUpdate;
|
||||
internal Asn1GeneralizedTime nextUpdate;
|
||||
internal X509Extensions extensions;
|
||||
|
||||
internal ResponseObject(
|
||||
CertificateID certId,
|
||||
CertificateStatus certStatus,
|
||||
DateTime thisUpdate,
|
||||
DateTime? nextUpdate,
|
||||
X509Extensions extensions)
|
||||
{
|
||||
this.certId = certId;
|
||||
|
||||
if (certStatus == null)
|
||||
{
|
||||
this.certStatus = new CertStatus();
|
||||
}
|
||||
else if (certStatus is UnknownStatus)
|
||||
{
|
||||
this.certStatus = new CertStatus(2, DerNull.Instance);
|
||||
}
|
||||
else
|
||||
{
|
||||
RevokedStatus rs = (RevokedStatus) certStatus;
|
||||
CrlReason revocationReason = rs.HasRevocationReason
|
||||
? new CrlReason(rs.RevocationReason)
|
||||
: null;
|
||||
|
||||
this.certStatus = new CertStatus(
|
||||
new RevokedInfo(new Asn1GeneralizedTime(rs.RevocationTime), revocationReason));
|
||||
}
|
||||
|
||||
this.thisUpdate = new DerGeneralizedTime(thisUpdate);
|
||||
this.nextUpdate = nextUpdate.HasValue ? new DerGeneralizedTime(nextUpdate.Value) : null;
|
||||
|
||||
this.extensions = extensions;
|
||||
}
|
||||
|
||||
public SingleResponse ToResponse()
|
||||
{
|
||||
return new SingleResponse(certId.ToAsn1Object(), certStatus, thisUpdate, nextUpdate, extensions);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* basic constructor
|
||||
*/
|
||||
public BasicOcspRespGenerator(
|
||||
RespID responderID)
|
||||
{
|
||||
this.responderID = responderID;
|
||||
}
|
||||
|
||||
/**
|
||||
* construct with the responderID to be the SHA-1 keyHash of the passed in public key.
|
||||
*/
|
||||
public BasicOcspRespGenerator(
|
||||
AsymmetricKeyParameter publicKey)
|
||||
{
|
||||
this.responderID = new RespID(publicKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a response for a particular Certificate ID.
|
||||
*
|
||||
* @param certID certificate ID details
|
||||
* @param certStatus status of the certificate - null if okay
|
||||
*/
|
||||
public void AddResponse(
|
||||
CertificateID certID,
|
||||
CertificateStatus certStatus)
|
||||
{
|
||||
list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, null, null));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a response for a particular Certificate ID.
|
||||
*
|
||||
* @param certID certificate ID details
|
||||
* @param certStatus status of the certificate - null if okay
|
||||
* @param singleExtensions optional extensions
|
||||
*/
|
||||
public void AddResponse(
|
||||
CertificateID certID,
|
||||
CertificateStatus certStatus,
|
||||
X509Extensions singleExtensions)
|
||||
{
|
||||
list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, null, singleExtensions));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a response for a particular Certificate ID.
|
||||
*
|
||||
* @param certID certificate ID details
|
||||
* @param nextUpdate date when next update should be requested
|
||||
* @param certStatus status of the certificate - null if okay
|
||||
* @param singleExtensions optional extensions
|
||||
*/
|
||||
public void AddResponse(
|
||||
CertificateID certID,
|
||||
CertificateStatus certStatus,
|
||||
DateTime? nextUpdate,
|
||||
X509Extensions singleExtensions)
|
||||
{
|
||||
list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, nextUpdate, singleExtensions));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a response for a particular Certificate ID.
|
||||
*
|
||||
* @param certID certificate ID details
|
||||
* @param thisUpdate date this response was valid on
|
||||
* @param nextUpdate date when next update should be requested
|
||||
* @param certStatus status of the certificate - null if okay
|
||||
* @param singleExtensions optional extensions
|
||||
*/
|
||||
public void AddResponse(
|
||||
CertificateID certID,
|
||||
CertificateStatus certStatus,
|
||||
DateTime thisUpdate,
|
||||
DateTime? nextUpdate,
|
||||
X509Extensions singleExtensions)
|
||||
{
|
||||
list.Add(new ResponseObject(certID, certStatus, thisUpdate, nextUpdate, singleExtensions));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the extensions for the response.
|
||||
*
|
||||
* @param responseExtensions the extension object to carry.
|
||||
*/
|
||||
public void SetResponseExtensions(
|
||||
X509Extensions responseExtensions)
|
||||
{
|
||||
this.responseExtensions = responseExtensions;
|
||||
}
|
||||
|
||||
private BasicOcspResp GenerateResponse(
|
||||
ISignatureFactory signatureCalculator,
|
||||
X509Certificate[] chain,
|
||||
DateTime producedAt)
|
||||
{
|
||||
AlgorithmIdentifier signingAlgID = (AlgorithmIdentifier)signatureCalculator.AlgorithmDetails;
|
||||
DerObjectIdentifier signingAlgorithm = signingAlgID.Algorithm;
|
||||
|
||||
Asn1EncodableVector responses = new Asn1EncodableVector();
|
||||
|
||||
foreach (ResponseObject respObj in list)
|
||||
{
|
||||
try
|
||||
{
|
||||
responses.Add(respObj.ToResponse());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("exception creating Request", e);
|
||||
}
|
||||
}
|
||||
|
||||
ResponseData tbsResp = new ResponseData(responderID.ToAsn1Object(), new Asn1GeneralizedTime(producedAt),
|
||||
new DerSequence(responses), responseExtensions);
|
||||
DerBitString bitSig;
|
||||
|
||||
try
|
||||
{
|
||||
IStreamCalculator<IBlockResult> streamCalculator = signatureCalculator.CreateCalculator();
|
||||
using (Stream sigStream = streamCalculator.Stream)
|
||||
{
|
||||
tbsResp.EncodeTo(sigStream, Asn1Encodable.Der);
|
||||
}
|
||||
|
||||
bitSig = new DerBitString(streamCalculator.GetResult().Collect());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("exception processing TBSRequest: " + e, e);
|
||||
}
|
||||
|
||||
AlgorithmIdentifier sigAlgId = OcspUtilities.GetSigAlgID(signingAlgorithm);
|
||||
|
||||
DerSequence chainSeq = null;
|
||||
if (chain != null && chain.Length > 0)
|
||||
{
|
||||
Asn1EncodableVector v = new Asn1EncodableVector(chain.Length);
|
||||
try
|
||||
{
|
||||
for (int i = 0; i != chain.Length; i++)
|
||||
{
|
||||
v.Add(chain[i].CertificateStructure);
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new OcspException("error processing certs", e);
|
||||
}
|
||||
catch (CertificateEncodingException e)
|
||||
{
|
||||
throw new OcspException("error encoding certs", e);
|
||||
}
|
||||
|
||||
chainSeq = new DerSequence(v);
|
||||
}
|
||||
|
||||
return new BasicOcspResp(new BasicOcspResponse(tbsResp, sigAlgId, bitSig, chainSeq));
|
||||
}
|
||||
|
||||
public BasicOcspResp Generate(
|
||||
string signingAlgorithm,
|
||||
AsymmetricKeyParameter privateKey,
|
||||
X509Certificate[] chain,
|
||||
DateTime thisUpdate)
|
||||
{
|
||||
return Generate(signingAlgorithm, privateKey, chain, thisUpdate, null);
|
||||
}
|
||||
|
||||
public BasicOcspResp Generate(
|
||||
string signingAlgorithm,
|
||||
AsymmetricKeyParameter privateKey,
|
||||
X509Certificate[] chain,
|
||||
DateTime producedAt,
|
||||
SecureRandom random)
|
||||
{
|
||||
if (signingAlgorithm == null)
|
||||
{
|
||||
throw new ArgumentException("no signing algorithm specified");
|
||||
}
|
||||
|
||||
return GenerateResponse(new Asn1SignatureFactory(signingAlgorithm, privateKey, random), chain, producedAt);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate the signed response using the passed in signature calculator.
|
||||
/// </summary>
|
||||
/// <param name="signatureCalculatorFactory">Implementation of signing calculator factory.</param>
|
||||
/// <param name="chain">The certificate chain associated with the response signer.</param>
|
||||
/// <param name="producedAt">"produced at" date.</param>
|
||||
/// <returns></returns>
|
||||
public BasicOcspResp Generate(
|
||||
ISignatureFactory signatureCalculatorFactory,
|
||||
X509Certificate[] chain,
|
||||
DateTime producedAt)
|
||||
{
|
||||
if (signatureCalculatorFactory == null)
|
||||
{
|
||||
throw new ArgumentException("no signature calculator specified");
|
||||
}
|
||||
|
||||
return GenerateResponse(signatureCalculatorFactory, chain, producedAt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an IEnumerable of the signature names supported by the generator.
|
||||
*
|
||||
* @return an IEnumerable containing recognised names.
|
||||
*/
|
||||
public IEnumerable<string> SignatureAlgNames
|
||||
{
|
||||
get { return OcspUtilities.AlgNames; }
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4a4f1ab3630e2c4d84a48f911528701
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,145 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
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.Ocsp
|
||||
{
|
||||
public class CertificateID
|
||||
{
|
||||
public const string HashSha1 = "1.3.14.3.2.26";
|
||||
|
||||
private readonly CertID id;
|
||||
|
||||
public CertificateID(
|
||||
CertID id)
|
||||
{
|
||||
if (id == null)
|
||||
throw new ArgumentNullException("id");
|
||||
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* create from an issuer certificate and the serial number of the
|
||||
* certificate it signed.
|
||||
* @exception OcspException if any problems occur creating the id fields.
|
||||
*/
|
||||
public CertificateID(
|
||||
string hashAlgorithm,
|
||||
X509Certificate issuerCert,
|
||||
BigInteger serialNumber)
|
||||
{
|
||||
AlgorithmIdentifier hashAlg = new AlgorithmIdentifier(
|
||||
new DerObjectIdentifier(hashAlgorithm), DerNull.Instance);
|
||||
|
||||
this.id = CreateCertID(hashAlg, issuerCert, new DerInteger(serialNumber));
|
||||
}
|
||||
|
||||
public string HashAlgOid
|
||||
{
|
||||
get { return id.HashAlgorithm.Algorithm.Id; }
|
||||
}
|
||||
|
||||
public byte[] GetIssuerNameHash()
|
||||
{
|
||||
return id.IssuerNameHash.GetOctets();
|
||||
}
|
||||
|
||||
public byte[] GetIssuerKeyHash()
|
||||
{
|
||||
return id.IssuerKeyHash.GetOctets();
|
||||
}
|
||||
|
||||
/**
|
||||
* return the serial number for the certificate associated
|
||||
* with this request.
|
||||
*/
|
||||
public BigInteger SerialNumber
|
||||
{
|
||||
get { return id.SerialNumber.Value; }
|
||||
}
|
||||
|
||||
public bool MatchesIssuer(
|
||||
X509Certificate issuerCert)
|
||||
{
|
||||
return CreateCertID(id.HashAlgorithm, issuerCert, id.SerialNumber).Equals(id);
|
||||
}
|
||||
|
||||
public CertID ToAsn1Object()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public override bool Equals(
|
||||
object obj)
|
||||
{
|
||||
if (obj == this)
|
||||
return true;
|
||||
|
||||
CertificateID other = obj as CertificateID;
|
||||
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
return id.ToAsn1Object().Equals(other.id.ToAsn1Object());
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return id.ToAsn1Object().GetHashCode();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a new CertificateID for a new serial number derived from a previous one
|
||||
* calculated for the same CA certificate.
|
||||
*
|
||||
* @param original the previously calculated CertificateID for the CA.
|
||||
* @param newSerialNumber the serial number for the new certificate of interest.
|
||||
*
|
||||
* @return a new CertificateID for newSerialNumber
|
||||
*/
|
||||
public static CertificateID DeriveCertificateID(CertificateID original, BigInteger newSerialNumber)
|
||||
{
|
||||
return new CertificateID(new CertID(original.id.HashAlgorithm, original.id.IssuerNameHash,
|
||||
original.id.IssuerKeyHash, new DerInteger(newSerialNumber)));
|
||||
}
|
||||
|
||||
private static CertID CreateCertID(
|
||||
AlgorithmIdentifier hashAlg,
|
||||
X509Certificate issuerCert,
|
||||
DerInteger serialNumber)
|
||||
{
|
||||
try
|
||||
{
|
||||
string hashAlgorithm = hashAlg.Algorithm.Id;
|
||||
|
||||
X509Name issuerName = PrincipalUtilities.GetSubjectX509Principal(issuerCert);
|
||||
byte[] issuerNameHash = DigestUtilities.CalculateDigest(
|
||||
hashAlgorithm, issuerName.GetEncoded());
|
||||
|
||||
AsymmetricKeyParameter issuerKey = issuerCert.GetPublicKey();
|
||||
SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(issuerKey);
|
||||
byte[] issuerKeyHash = DigestUtilities.CalculateDigest(
|
||||
hashAlgorithm, info.PublicKeyData.GetBytes());
|
||||
|
||||
return new CertID(hashAlg, new DerOctetString(issuerNameHash),
|
||||
new DerOctetString(issuerKeyHash), serialNumber);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("problem creating ID: " + e, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a898aa4304e51464a8070aa0e95b80fe
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,13 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
public abstract class CertificateStatus
|
||||
{
|
||||
public static readonly CertificateStatus Good = null;
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 32c0717bda040f94a96b47918ac8e69b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,34 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
[Serializable]
|
||||
public class OcspException
|
||||
: Exception
|
||||
{
|
||||
public OcspException()
|
||||
: base()
|
||||
{
|
||||
}
|
||||
|
||||
public OcspException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public OcspException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
|
||||
protected OcspException(SerializationInfo info, StreamingContext context)
|
||||
: base(info, context)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7666ba2ef3fc4e44b94423593baebf5e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,250 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
/**
|
||||
* <pre>
|
||||
* OcspRequest ::= SEQUENCE {
|
||||
* tbsRequest TBSRequest,
|
||||
* optionalSignature [0] EXPLICIT Signature OPTIONAL }
|
||||
*
|
||||
* TBSRequest ::= SEQUENCE {
|
||||
* version [0] EXPLICIT Version DEFAULT v1,
|
||||
* requestorName [1] EXPLICIT GeneralName OPTIONAL,
|
||||
* requestList SEQUENCE OF Request,
|
||||
* requestExtensions [2] EXPLICIT Extensions OPTIONAL }
|
||||
*
|
||||
* Signature ::= SEQUENCE {
|
||||
* signatureAlgorithm AlgorithmIdentifier,
|
||||
* signature BIT STRING,
|
||||
* certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL}
|
||||
*
|
||||
* Version ::= INTEGER { v1(0) }
|
||||
*
|
||||
* Request ::= SEQUENCE {
|
||||
* reqCert CertID,
|
||||
* singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL }
|
||||
*
|
||||
* CertID ::= SEQUENCE {
|
||||
* hashAlgorithm AlgorithmIdentifier,
|
||||
* issuerNameHash OCTET STRING, -- Hash of Issuer's DN
|
||||
* issuerKeyHash OCTET STRING, -- Hash of Issuers public key
|
||||
* serialNumber CertificateSerialNumber }
|
||||
* </pre>
|
||||
*/
|
||||
public class OcspReq
|
||||
: X509ExtensionBase
|
||||
{
|
||||
private OcspRequest req;
|
||||
|
||||
public OcspReq(
|
||||
OcspRequest req)
|
||||
{
|
||||
this.req = req;
|
||||
}
|
||||
|
||||
public OcspReq(
|
||||
byte[] req)
|
||||
: this(new Asn1InputStream(req))
|
||||
{
|
||||
}
|
||||
|
||||
public OcspReq(
|
||||
Stream inStr)
|
||||
: this(new Asn1InputStream(inStr))
|
||||
{
|
||||
}
|
||||
|
||||
private OcspReq(
|
||||
Asn1InputStream aIn)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.req = OcspRequest.GetInstance(aIn.ReadObject());
|
||||
}
|
||||
catch (ArgumentException e)
|
||||
{
|
||||
throw new IOException("malformed request: " + e.Message);
|
||||
}
|
||||
catch (InvalidCastException e)
|
||||
{
|
||||
throw new IOException("malformed request: " + e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the DER encoding of the tbsRequest field.
|
||||
* @return DER encoding of tbsRequest
|
||||
* @throws OcspException in the event of an encoding error.
|
||||
*/
|
||||
public byte[] GetTbsRequest()
|
||||
{
|
||||
try
|
||||
{
|
||||
return req.TbsRequest.GetEncoded();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new OcspException("problem encoding tbsRequest", e);
|
||||
}
|
||||
}
|
||||
|
||||
public int Version
|
||||
{
|
||||
get { return req.TbsRequest.Version.IntValueExact + 1; }
|
||||
}
|
||||
|
||||
public GeneralName RequestorName
|
||||
{
|
||||
get { return GeneralName.GetInstance(req.TbsRequest.RequestorName); }
|
||||
}
|
||||
|
||||
public Req[] GetRequestList()
|
||||
{
|
||||
Asn1Sequence seq = req.TbsRequest.RequestList;
|
||||
Req[] requests = new Req[seq.Count];
|
||||
|
||||
for (int i = 0; i != requests.Length; i++)
|
||||
{
|
||||
requests[i] = new Req(Request.GetInstance(seq[i]));
|
||||
}
|
||||
|
||||
return requests;
|
||||
}
|
||||
|
||||
public X509Extensions RequestExtensions
|
||||
{
|
||||
get { return X509Extensions.GetInstance(req.TbsRequest.RequestExtensions); }
|
||||
}
|
||||
|
||||
protected override X509Extensions GetX509Extensions()
|
||||
{
|
||||
return RequestExtensions;
|
||||
}
|
||||
|
||||
/**
|
||||
* return the object identifier representing the signature algorithm
|
||||
*/
|
||||
public string SignatureAlgOid
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!this.IsSigned)
|
||||
return null;
|
||||
|
||||
return req.OptionalSignature.SignatureAlgorithm.Algorithm.Id;
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] GetSignature()
|
||||
{
|
||||
if (!this.IsSigned)
|
||||
return null;
|
||||
|
||||
return req.OptionalSignature.GetSignatureOctets();
|
||||
}
|
||||
|
||||
private List<X509Certificate> GetCertList()
|
||||
{
|
||||
// load the certificates if we have any
|
||||
|
||||
var result = new List<X509Certificate>();
|
||||
|
||||
Asn1Sequence certs = req.OptionalSignature.Certs;
|
||||
if (certs != null)
|
||||
{
|
||||
foreach (Asn1Encodable ae in certs)
|
||||
{
|
||||
if (ae != null && ae.ToAsn1Object() is Asn1Sequence s)
|
||||
{
|
||||
result.Add(new X509Certificate(X509CertificateStructure.GetInstance(s)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public X509Certificate[] GetCerts()
|
||||
{
|
||||
if (!this.IsSigned)
|
||||
return null;
|
||||
|
||||
return this.GetCertList().ToArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* If the request is signed return a possibly empty CertStore containing the certificates in the
|
||||
* request. If the request is not signed the method returns null.
|
||||
*
|
||||
* @return null if not signed, a CertStore otherwise
|
||||
* @throws OcspException
|
||||
*/
|
||||
public IStore<X509Certificate> GetCertificates()
|
||||
{
|
||||
if (!this.IsSigned)
|
||||
return null;
|
||||
|
||||
return CollectionUtilities.CreateStore(this.GetCertList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether or not this request is signed.
|
||||
*
|
||||
* @return true if signed false otherwise.
|
||||
*/
|
||||
public bool IsSigned
|
||||
{
|
||||
get { return req.OptionalSignature != null; }
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify the signature against the TBSRequest object we contain.
|
||||
*/
|
||||
public bool Verify(
|
||||
AsymmetricKeyParameter publicKey)
|
||||
{
|
||||
if (!this.IsSigned)
|
||||
throw new OcspException("attempt to Verify signature on unsigned object");
|
||||
|
||||
try
|
||||
{
|
||||
ISigner signature = SignerUtilities.GetSigner(this.SignatureAlgOid);
|
||||
|
||||
signature.Init(false, publicKey);
|
||||
|
||||
byte[] encoded = req.TbsRequest.GetEncoded();
|
||||
|
||||
signature.BlockUpdate(encoded, 0, encoded.Length);
|
||||
|
||||
return signature.VerifySignature(this.GetSignature());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("exception processing sig: " + e, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* return the ASN.1 encoded representation of this object.
|
||||
*/
|
||||
public byte[] GetEncoded()
|
||||
{
|
||||
return req.GetEncoded();
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0f95b7ecb00c00241947e9d20299129b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,245 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security.Certificates;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
public class OcspReqGenerator
|
||||
{
|
||||
private List<RequestObject> list = new List<RequestObject>();
|
||||
private GeneralName requestorName = null;
|
||||
private X509Extensions requestExtensions = null;
|
||||
|
||||
private class RequestObject
|
||||
{
|
||||
internal CertificateID certId;
|
||||
internal X509Extensions extensions;
|
||||
|
||||
public RequestObject(
|
||||
CertificateID certId,
|
||||
X509Extensions extensions)
|
||||
{
|
||||
this.certId = certId;
|
||||
this.extensions = extensions;
|
||||
}
|
||||
|
||||
public Request ToRequest()
|
||||
{
|
||||
return new Request(certId.ToAsn1Object(), extensions);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a request for the given CertificateID.
|
||||
*
|
||||
* @param certId certificate ID of interest
|
||||
*/
|
||||
public void AddRequest(
|
||||
CertificateID certId)
|
||||
{
|
||||
list.Add(new RequestObject(certId, null));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a request with extensions
|
||||
*
|
||||
* @param certId certificate ID of interest
|
||||
* @param singleRequestExtensions the extensions to attach to the request
|
||||
*/
|
||||
public void AddRequest(
|
||||
CertificateID certId,
|
||||
X509Extensions singleRequestExtensions)
|
||||
{
|
||||
list.Add(new RequestObject(certId, singleRequestExtensions));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the requestor name to the passed in X509Principal
|
||||
*
|
||||
* @param requestorName a X509Principal representing the requestor name.
|
||||
*/
|
||||
public void SetRequestorName(
|
||||
X509Name requestorName)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.requestorName = new GeneralName(GeneralName.DirectoryName, requestorName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ArgumentException("cannot encode principal", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetRequestorName(
|
||||
GeneralName requestorName)
|
||||
{
|
||||
this.requestorName = requestorName;
|
||||
}
|
||||
|
||||
public void SetRequestExtensions(
|
||||
X509Extensions requestExtensions)
|
||||
{
|
||||
this.requestExtensions = requestExtensions;
|
||||
}
|
||||
|
||||
private OcspReq GenerateRequest(
|
||||
DerObjectIdentifier signingAlgorithm,
|
||||
AsymmetricKeyParameter privateKey,
|
||||
X509Certificate[] chain,
|
||||
SecureRandom random)
|
||||
{
|
||||
Asn1EncodableVector requests = new Asn1EncodableVector();
|
||||
|
||||
foreach (RequestObject reqObj in list)
|
||||
{
|
||||
try
|
||||
{
|
||||
requests.Add(reqObj.ToRequest());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("exception creating Request", e);
|
||||
}
|
||||
}
|
||||
|
||||
TbsRequest tbsReq = new TbsRequest(requestorName, new DerSequence(requests), requestExtensions);
|
||||
|
||||
ISigner sig = null;
|
||||
Signature signature = null;
|
||||
|
||||
if (signingAlgorithm != null)
|
||||
{
|
||||
if (requestorName == null)
|
||||
{
|
||||
throw new OcspException("requestorName must be specified if request is signed.");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
sig = SignerUtilities.GetSigner(signingAlgorithm.Id);
|
||||
if (random != null)
|
||||
{
|
||||
sig.Init(true, new ParametersWithRandom(privateKey, random));
|
||||
}
|
||||
else
|
||||
{
|
||||
sig.Init(true, privateKey);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("exception creating signature: " + e, e);
|
||||
}
|
||||
|
||||
DerBitString bitSig = null;
|
||||
|
||||
try
|
||||
{
|
||||
byte[] encoded = tbsReq.GetEncoded();
|
||||
sig.BlockUpdate(encoded, 0, encoded.Length);
|
||||
|
||||
bitSig = new DerBitString(sig.GenerateSignature());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("exception processing TBSRequest: " + e, e);
|
||||
}
|
||||
|
||||
AlgorithmIdentifier sigAlgId = new AlgorithmIdentifier(signingAlgorithm, DerNull.Instance);
|
||||
|
||||
if (chain != null && chain.Length > 0)
|
||||
{
|
||||
Asn1EncodableVector v = new Asn1EncodableVector();
|
||||
try
|
||||
{
|
||||
for (int i = 0; i != chain.Length; i++)
|
||||
{
|
||||
v.Add(chain[i].CertificateStructure);
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new OcspException("error processing certs", e);
|
||||
}
|
||||
catch (CertificateEncodingException e)
|
||||
{
|
||||
throw new OcspException("error encoding certs", e);
|
||||
}
|
||||
|
||||
signature = new Signature(sigAlgId, bitSig, new DerSequence(v));
|
||||
}
|
||||
else
|
||||
{
|
||||
signature = new Signature(sigAlgId, bitSig);
|
||||
}
|
||||
}
|
||||
|
||||
return new OcspReq(new OcspRequest(tbsReq, signature));
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate an unsigned request
|
||||
*
|
||||
* @return the OcspReq
|
||||
* @throws OcspException
|
||||
*/
|
||||
public OcspReq Generate()
|
||||
{
|
||||
return GenerateRequest(null, null, null, null);
|
||||
}
|
||||
|
||||
public OcspReq Generate(
|
||||
string signingAlgorithm,
|
||||
AsymmetricKeyParameter privateKey,
|
||||
X509Certificate[] chain)
|
||||
{
|
||||
return Generate(signingAlgorithm, privateKey, chain, null);
|
||||
}
|
||||
|
||||
public OcspReq Generate(
|
||||
string signingAlgorithm,
|
||||
AsymmetricKeyParameter privateKey,
|
||||
X509Certificate[] chain,
|
||||
SecureRandom random)
|
||||
{
|
||||
if (signingAlgorithm == null)
|
||||
throw new ArgumentException("no signing algorithm specified");
|
||||
|
||||
try
|
||||
{
|
||||
DerObjectIdentifier oid = OcspUtilities.GetAlgorithmOid(signingAlgorithm);
|
||||
|
||||
return GenerateRequest(oid, privateKey, chain, random);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
throw new ArgumentException("unknown signing algorithm specified: " + signingAlgorithm);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an IEnumerable of the signature names supported by the generator.
|
||||
*
|
||||
* @return an IEnumerable containing recognised names.
|
||||
*/
|
||||
public IEnumerable<string> SignatureAlgNames
|
||||
{
|
||||
get { return OcspUtilities.AlgNames; }
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 69f137c4a9de5b640b7e294ab4400582
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,104 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
public class OcspResp
|
||||
{
|
||||
private OcspResponse resp;
|
||||
|
||||
public OcspResp(
|
||||
OcspResponse resp)
|
||||
{
|
||||
this.resp = resp;
|
||||
}
|
||||
|
||||
public OcspResp(
|
||||
byte[] resp)
|
||||
: this(new Asn1InputStream(resp))
|
||||
{
|
||||
}
|
||||
|
||||
public OcspResp(
|
||||
Stream inStr)
|
||||
: this(new Asn1InputStream(inStr))
|
||||
{
|
||||
}
|
||||
|
||||
private OcspResp(
|
||||
Asn1InputStream aIn)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.resp = OcspResponse.GetInstance(aIn.ReadObject());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new IOException("malformed response: " + e.Message, e);
|
||||
}
|
||||
}
|
||||
|
||||
public int Status
|
||||
{
|
||||
get { return this.resp.ResponseStatus.IntValueExact; }
|
||||
}
|
||||
|
||||
public object GetResponseObject()
|
||||
{
|
||||
ResponseBytes rb = this.resp.ResponseBytes;
|
||||
|
||||
if (rb == null)
|
||||
return null;
|
||||
|
||||
if (rb.ResponseType.Equals(OcspObjectIdentifiers.PkixOcspBasic))
|
||||
{
|
||||
try
|
||||
{
|
||||
return new BasicOcspResp(
|
||||
BasicOcspResponse.GetInstance(
|
||||
Asn1Object.FromByteArray(rb.Response.GetOctets())));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("problem decoding object: " + e, e);
|
||||
}
|
||||
}
|
||||
|
||||
return rb.Response;
|
||||
}
|
||||
|
||||
/**
|
||||
* return the ASN.1 encoded representation of this object.
|
||||
*/
|
||||
public byte[] GetEncoded()
|
||||
{
|
||||
return resp.GetEncoded();
|
||||
}
|
||||
|
||||
public override bool Equals(
|
||||
object obj)
|
||||
{
|
||||
if (obj == this)
|
||||
return true;
|
||||
|
||||
OcspResp other = obj as OcspResp;
|
||||
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
return resp.Equals(other.resp);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return resp.GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 19a37ebb18c778947808bd6a45e1a6ed
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,58 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
/**
|
||||
* base generator for an OCSP response - at the moment this only supports the
|
||||
* generation of responses containing BasicOCSP responses.
|
||||
*/
|
||||
public class OCSPRespGenerator
|
||||
{
|
||||
public const int Successful = 0; // Response has valid confirmations
|
||||
public const int MalformedRequest = 1; // Illegal confirmation request
|
||||
public const int InternalError = 2; // Internal error in issuer
|
||||
public const int TryLater = 3; // Try again later
|
||||
// (4) is not used
|
||||
public const int SigRequired = 5; // Must sign the request
|
||||
public const int Unauthorized = 6; // Request unauthorized
|
||||
|
||||
public OcspResp Generate(
|
||||
int status,
|
||||
object response)
|
||||
{
|
||||
if (response == null)
|
||||
{
|
||||
return new OcspResp(new OcspResponse(new OcspResponseStatus(status),null));
|
||||
}
|
||||
if (response is BasicOcspResp)
|
||||
{
|
||||
BasicOcspResp r = (BasicOcspResp)response;
|
||||
Asn1OctetString octs;
|
||||
|
||||
try
|
||||
{
|
||||
octs = new DerOctetString(r.GetEncoded());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("can't encode object.", e);
|
||||
}
|
||||
|
||||
ResponseBytes rb = new ResponseBytes(
|
||||
OcspObjectIdentifiers.PkixOcspBasic, octs);
|
||||
|
||||
return new OcspResp(new OcspResponse(
|
||||
new OcspResponseStatus(status), rb));
|
||||
}
|
||||
|
||||
throw new OcspException("unknown response object");
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 304a4d91bffb95a489fc47ab2d2a3fb1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,21 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
public abstract class OcspRespStatus
|
||||
{
|
||||
/**
|
||||
* note 4 is not used.
|
||||
*/
|
||||
public const int Successful = 0; // --Response has valid confirmations
|
||||
public const int MalformedRequest = 1; // --Illegal confirmation request
|
||||
public const int InternalError = 2; // --Internal error in issuer
|
||||
public const int TryLater = 3; // --Try again later
|
||||
public const int SigRequired = 5; // --Must sign the request
|
||||
public const int Unauthorized = 6; // --Request unauthorized
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 18a92b5f029fd6645be84f8f25950a0f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,150 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.CryptoPro;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Oiw;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.TeleTrust;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Collections;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
internal class OcspUtilities
|
||||
{
|
||||
private static readonly Dictionary<string, DerObjectIdentifier> Algorithms =
|
||||
new Dictionary<string, DerObjectIdentifier>(StringComparer.OrdinalIgnoreCase);
|
||||
private static readonly Dictionary<DerObjectIdentifier, string> Oids =
|
||||
new Dictionary<DerObjectIdentifier, string>();
|
||||
private static readonly HashSet<DerObjectIdentifier> NoParams = new HashSet<DerObjectIdentifier>();
|
||||
|
||||
static OcspUtilities()
|
||||
{
|
||||
Algorithms.Add("MD2WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD2WithRsaEncryption);
|
||||
Algorithms.Add("MD2WITHRSA", PkcsObjectIdentifiers.MD2WithRsaEncryption);
|
||||
Algorithms.Add("MD5WITHRSAENCRYPTION", PkcsObjectIdentifiers.MD5WithRsaEncryption);
|
||||
Algorithms.Add("MD5WITHRSA", PkcsObjectIdentifiers.MD5WithRsaEncryption);
|
||||
Algorithms.Add("SHA1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption);
|
||||
Algorithms.Add("SHA-1WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha1WithRsaEncryption);
|
||||
Algorithms.Add("SHA1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption);
|
||||
Algorithms.Add("SHA-1WITHRSA", PkcsObjectIdentifiers.Sha1WithRsaEncryption);
|
||||
Algorithms.Add("SHA224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption);
|
||||
Algorithms.Add("SHA-224WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha224WithRsaEncryption);
|
||||
Algorithms.Add("SHA224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption);
|
||||
Algorithms.Add("SHA-224WITHRSA", PkcsObjectIdentifiers.Sha224WithRsaEncryption);
|
||||
Algorithms.Add("SHA256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption);
|
||||
Algorithms.Add("SHA-256WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha256WithRsaEncryption);
|
||||
Algorithms.Add("SHA256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption);
|
||||
Algorithms.Add("SHA-256WITHRSA", PkcsObjectIdentifiers.Sha256WithRsaEncryption);
|
||||
Algorithms.Add("SHA384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption);
|
||||
Algorithms.Add("SHA-384WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha384WithRsaEncryption);
|
||||
Algorithms.Add("SHA384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption);
|
||||
Algorithms.Add("SHA-384WITHRSA", PkcsObjectIdentifiers.Sha384WithRsaEncryption);
|
||||
Algorithms.Add("SHA512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption);
|
||||
Algorithms.Add("SHA-512WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512WithRsaEncryption);
|
||||
Algorithms.Add("SHA512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption);
|
||||
Algorithms.Add("SHA-512WITHRSA", PkcsObjectIdentifiers.Sha512WithRsaEncryption);
|
||||
Algorithms.Add("SHA512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption);
|
||||
Algorithms.Add("SHA-512(224)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption);
|
||||
Algorithms.Add("SHA512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption);
|
||||
Algorithms.Add("SHA-512(224)WITHRSA", PkcsObjectIdentifiers.Sha512_224WithRSAEncryption);
|
||||
Algorithms.Add("SHA512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption);
|
||||
Algorithms.Add("SHA-512(256)WITHRSAENCRYPTION", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption);
|
||||
Algorithms.Add("SHA512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption);
|
||||
Algorithms.Add("SHA-512(256)WITHRSA", PkcsObjectIdentifiers.Sha512_256WithRSAEncryption);
|
||||
Algorithms.Add("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160);
|
||||
Algorithms.Add("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160);
|
||||
Algorithms.Add("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128);
|
||||
Algorithms.Add("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128);
|
||||
Algorithms.Add("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256);
|
||||
Algorithms.Add("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256);
|
||||
Algorithms.Add("SHA1WITHDSA", X9ObjectIdentifiers.IdDsaWithSha1);
|
||||
Algorithms.Add("DSAWITHSHA1", X9ObjectIdentifiers.IdDsaWithSha1);
|
||||
Algorithms.Add("SHA224WITHDSA", NistObjectIdentifiers.DsaWithSha224);
|
||||
Algorithms.Add("SHA256WITHDSA", NistObjectIdentifiers.DsaWithSha256);
|
||||
Algorithms.Add("SHA1WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha1);
|
||||
Algorithms.Add("ECDSAWITHSHA1", X9ObjectIdentifiers.ECDsaWithSha1);
|
||||
Algorithms.Add("SHA224WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha224);
|
||||
Algorithms.Add("SHA256WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha256);
|
||||
Algorithms.Add("SHA384WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha384);
|
||||
Algorithms.Add("SHA512WITHECDSA", X9ObjectIdentifiers.ECDsaWithSha512);
|
||||
Algorithms.Add("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94);
|
||||
Algorithms.Add("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94);
|
||||
|
||||
Oids.Add(PkcsObjectIdentifiers.MD2WithRsaEncryption, "MD2WITHRSA");
|
||||
Oids.Add(PkcsObjectIdentifiers.MD5WithRsaEncryption, "MD5WITHRSA");
|
||||
Oids.Add(PkcsObjectIdentifiers.Sha1WithRsaEncryption, "SHA1WITHRSA");
|
||||
Oids.Add(PkcsObjectIdentifiers.Sha224WithRsaEncryption, "SHA224WITHRSA");
|
||||
Oids.Add(PkcsObjectIdentifiers.Sha256WithRsaEncryption, "SHA256WITHRSA");
|
||||
Oids.Add(PkcsObjectIdentifiers.Sha384WithRsaEncryption, "SHA384WITHRSA");
|
||||
Oids.Add(PkcsObjectIdentifiers.Sha512WithRsaEncryption, "SHA512WITHRSA");
|
||||
Oids.Add(PkcsObjectIdentifiers.Sha512_224WithRSAEncryption, "SHA512(224)WITHRSA");
|
||||
Oids.Add(PkcsObjectIdentifiers.Sha512_256WithRSAEncryption, "SHA512(256)WITHRSA");
|
||||
Oids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD160, "RIPEMD160WITHRSA");
|
||||
Oids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD128, "RIPEMD128WITHRSA");
|
||||
Oids.Add(TeleTrusTObjectIdentifiers.RsaSignatureWithRipeMD256, "RIPEMD256WITHRSA");
|
||||
Oids.Add(X9ObjectIdentifiers.IdDsaWithSha1, "SHA1WITHDSA");
|
||||
Oids.Add(NistObjectIdentifiers.DsaWithSha224, "SHA224WITHDSA");
|
||||
Oids.Add(NistObjectIdentifiers.DsaWithSha256, "SHA256WITHDSA");
|
||||
Oids.Add(X9ObjectIdentifiers.ECDsaWithSha1, "SHA1WITHECDSA");
|
||||
Oids.Add(X9ObjectIdentifiers.ECDsaWithSha224, "SHA224WITHECDSA");
|
||||
Oids.Add(X9ObjectIdentifiers.ECDsaWithSha256, "SHA256WITHECDSA");
|
||||
Oids.Add(X9ObjectIdentifiers.ECDsaWithSha384, "SHA384WITHECDSA");
|
||||
Oids.Add(X9ObjectIdentifiers.ECDsaWithSha512, "SHA512WITHECDSA");
|
||||
Oids.Add(CryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94, "GOST3411WITHGOST3410");
|
||||
Oids.Add(OiwObjectIdentifiers.MD5WithRsa, "MD5WITHRSA");
|
||||
Oids.Add(OiwObjectIdentifiers.Sha1WithRsa, "SHA1WITHRSA");
|
||||
Oids.Add(OiwObjectIdentifiers.DsaWithSha1, "SHA1WITHDSA");
|
||||
|
||||
//
|
||||
// According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field.
|
||||
// The parameters field SHALL be NULL for RSA based signature algorithms.
|
||||
//
|
||||
NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha1);
|
||||
NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha224);
|
||||
NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha256);
|
||||
NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha384);
|
||||
NoParams.Add(X9ObjectIdentifiers.ECDsaWithSha512);
|
||||
NoParams.Add(X9ObjectIdentifiers.IdDsaWithSha1);
|
||||
NoParams.Add(OiwObjectIdentifiers.DsaWithSha1);
|
||||
NoParams.Add(NistObjectIdentifiers.DsaWithSha224);
|
||||
NoParams.Add(NistObjectIdentifiers.DsaWithSha256);
|
||||
}
|
||||
|
||||
internal static DerObjectIdentifier GetAlgorithmOid(string algorithmName)
|
||||
{
|
||||
if (Algorithms.TryGetValue(algorithmName, out var oid))
|
||||
return oid;
|
||||
|
||||
return new DerObjectIdentifier(algorithmName);
|
||||
}
|
||||
|
||||
internal static string GetAlgorithmName(DerObjectIdentifier oid)
|
||||
{
|
||||
if (Oids.TryGetValue(oid, out var algorithmName))
|
||||
return algorithmName;
|
||||
|
||||
return oid.Id;
|
||||
}
|
||||
|
||||
internal static AlgorithmIdentifier GetSigAlgID(DerObjectIdentifier sigOid)
|
||||
{
|
||||
if (NoParams.Contains(sigOid))
|
||||
return new AlgorithmIdentifier(sigOid);
|
||||
|
||||
return new AlgorithmIdentifier(sigOid, DerNull.Instance);
|
||||
}
|
||||
|
||||
internal static IEnumerable<string> AlgNames
|
||||
{
|
||||
get { return CollectionUtilities.Proxy(Algorithms.Keys); }
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: df2daa91f25e00345abf4eea8f4fcb89
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,39 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
public class Req
|
||||
: X509ExtensionBase
|
||||
{
|
||||
private Request req;
|
||||
|
||||
public Req(
|
||||
Request req)
|
||||
{
|
||||
this.req = req;
|
||||
}
|
||||
|
||||
public CertificateID GetCertID()
|
||||
{
|
||||
return new CertificateID(req.ReqCert);
|
||||
}
|
||||
|
||||
public X509Extensions SingleRequestExtensions
|
||||
{
|
||||
get { return req.SingleRequestExtensions; }
|
||||
}
|
||||
|
||||
protected override X509Extensions GetX509Extensions()
|
||||
{
|
||||
return SingleRequestExtensions;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0f5fbac749d65af408d1b69a21018425
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,63 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
public class RespData
|
||||
: X509ExtensionBase
|
||||
{
|
||||
internal readonly ResponseData data;
|
||||
|
||||
public RespData(
|
||||
ResponseData data)
|
||||
{
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public int Version
|
||||
{
|
||||
get { return data.Version.IntValueExact + 1; }
|
||||
}
|
||||
|
||||
public RespID GetResponderId()
|
||||
{
|
||||
return new RespID(data.ResponderID);
|
||||
}
|
||||
|
||||
public DateTime ProducedAt
|
||||
{
|
||||
get { return data.ProducedAt.ToDateTime(); }
|
||||
}
|
||||
|
||||
public SingleResp[] GetResponses()
|
||||
{
|
||||
Asn1Sequence s = data.Responses;
|
||||
SingleResp[] rs = new SingleResp[s.Count];
|
||||
|
||||
for (int i = 0; i != rs.Length; i++)
|
||||
{
|
||||
rs[i] = new SingleResp(SingleResponse.GetInstance(s[i]));
|
||||
}
|
||||
|
||||
return rs;
|
||||
}
|
||||
|
||||
public X509Extensions ResponseExtensions
|
||||
{
|
||||
get { return data.ResponseExtensions; }
|
||||
}
|
||||
|
||||
protected override X509Extensions GetX509Extensions()
|
||||
{
|
||||
return ResponseExtensions;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8ad49440b0bfa564096d37219b93ff9e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,76 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
/**
|
||||
* Carrier for a ResponderID.
|
||||
*/
|
||||
public class RespID
|
||||
{
|
||||
internal readonly ResponderID id;
|
||||
|
||||
public RespID(
|
||||
ResponderID id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public RespID(
|
||||
X509Name name)
|
||||
{
|
||||
this.id = new ResponderID(name);
|
||||
}
|
||||
|
||||
public RespID(
|
||||
AsymmetricKeyParameter publicKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey);
|
||||
|
||||
byte[] keyHash = DigestUtilities.CalculateDigest("SHA1", info.PublicKeyData.GetBytes());
|
||||
|
||||
this.id = new ResponderID(new DerOctetString(keyHash));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OcspException("problem creating ID: " + e, e);
|
||||
}
|
||||
}
|
||||
|
||||
public ResponderID ToAsn1Object()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public override bool Equals(
|
||||
object obj)
|
||||
{
|
||||
if (obj == this)
|
||||
return true;
|
||||
|
||||
RespID other = obj as RespID;
|
||||
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
return id.Equals(other.id);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return id.GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13f651178027dd544b220f45d0a9235a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,59 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
/// <summary>Wrapper for the RevokedInfo object</summary>
|
||||
public class RevokedStatus
|
||||
: CertificateStatus
|
||||
{
|
||||
private readonly RevokedInfo m_revokedInfo;
|
||||
|
||||
public RevokedStatus(RevokedInfo revokedInfo)
|
||||
{
|
||||
m_revokedInfo = revokedInfo;
|
||||
}
|
||||
|
||||
public RevokedStatus(DateTime revocationDate)
|
||||
{
|
||||
m_revokedInfo = new RevokedInfo(new Asn1GeneralizedTime(revocationDate));
|
||||
}
|
||||
|
||||
public RevokedStatus(DateTime revocationDate, int reason)
|
||||
{
|
||||
m_revokedInfo = new RevokedInfo(new Asn1GeneralizedTime(revocationDate), new CrlReason(reason));
|
||||
}
|
||||
|
||||
public DateTime RevocationTime
|
||||
{
|
||||
get { return m_revokedInfo.RevocationTime.ToDateTime(); }
|
||||
}
|
||||
|
||||
public bool HasRevocationReason
|
||||
{
|
||||
get { return m_revokedInfo.RevocationReason != null; }
|
||||
}
|
||||
|
||||
/// <summary>Return the revocation reason, if there is one.</summary>
|
||||
/// <remarks>This field is optional; test for it with <see cref="HasRevocationReason"/> first.</remarks>
|
||||
/// <returns>The revocation reason, if available.</returns>
|
||||
/// <exception cref="InvalidOperationException">If no revocation reason is available.</exception>
|
||||
public int RevocationReason
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_revokedInfo.RevocationReason == null)
|
||||
throw new InvalidOperationException("attempt to get a reason where none is available");
|
||||
|
||||
return m_revokedInfo.RevocationReason.IntValueExact;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 942d978af399500418044db4ab073932
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,74 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Ocsp;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
||||
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
public class SingleResp
|
||||
: X509ExtensionBase
|
||||
{
|
||||
internal readonly SingleResponse resp;
|
||||
|
||||
public SingleResp(
|
||||
SingleResponse resp)
|
||||
{
|
||||
this.resp = resp;
|
||||
}
|
||||
|
||||
public CertificateID GetCertID()
|
||||
{
|
||||
return new CertificateID(resp.CertId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the status object for the response - null indicates good.
|
||||
*
|
||||
* @return the status object for the response, null if it is good.
|
||||
*/
|
||||
public object GetCertStatus()
|
||||
{
|
||||
CertStatus s = resp.CertStatus;
|
||||
|
||||
if (s.TagNo == 0)
|
||||
{
|
||||
return null; // good
|
||||
}
|
||||
|
||||
if (s.TagNo == 1)
|
||||
{
|
||||
return new RevokedStatus(RevokedInfo.GetInstance(s.Status));
|
||||
}
|
||||
|
||||
return new UnknownStatus();
|
||||
}
|
||||
|
||||
public DateTime ThisUpdate
|
||||
{
|
||||
get { return resp.ThisUpdate.ToDateTime(); }
|
||||
}
|
||||
|
||||
/**
|
||||
* return the NextUpdate value - note: this is an optional field so may
|
||||
* be returned as null.
|
||||
*
|
||||
* @return nextUpdate, or null if not present.
|
||||
*/
|
||||
public DateTime? NextUpdate => resp.NextUpdate?.ToDateTime();
|
||||
|
||||
public X509Extensions SingleExtensions
|
||||
{
|
||||
get { return resp.SingleExtensions; }
|
||||
}
|
||||
|
||||
protected override X509Extensions GetX509Extensions()
|
||||
{
|
||||
return SingleExtensions;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 91706998de8e56c4082a6a753a1aeeab
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,19 @@
|
||||
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||||
#pragma warning disable
|
||||
using System;
|
||||
|
||||
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Ocsp
|
||||
{
|
||||
/**
|
||||
* wrapper for the UnknownInfo object
|
||||
*/
|
||||
public class UnknownStatus
|
||||
: CertificateStatus
|
||||
{
|
||||
public UnknownStatus()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore
|
||||
#endif
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f278a1680d992a45a352e630ce3ad55
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user