init commit

This commit is contained in:
2025-10-09 09:57:24 +09:00
commit 4d551bd74f
6636 changed files with 1218703 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
using System;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Ocsp;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;
namespace Org.BouncyCastle.Ocsp;
public class CertificateID
{
public const string HashSha1 = "1.3.14.3.2.26";
private readonly CertID id;
public string HashAlgOid => id.HashAlgorithm.Algorithm.Id;
public BigInteger SerialNumber => id.SerialNumber.Value;
public CertificateID(CertID id)
{
if (id == null)
{
throw new ArgumentNullException("id");
}
this.id = id;
}
public CertificateID(string hashAlgorithm, X509Certificate issuerCert, BigInteger serialNumber)
{
AlgorithmIdentifier hashAlg = new AlgorithmIdentifier(new DerObjectIdentifier(hashAlgorithm), DerNull.Instance);
id = CreateCertID(hashAlg, issuerCert, new DerInteger(serialNumber));
}
public byte[] GetIssuerNameHash()
{
return id.IssuerNameHash.GetOctets();
}
public byte[] GetIssuerKeyHash()
{
return id.IssuerKeyHash.GetOctets();
}
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;
}
if (!(obj is CertificateID certificateID))
{
return false;
}
return id.ToAsn1Object().Equals(certificateID.id.ToAsn1Object());
}
public override int GetHashCode()
{
return id.ToAsn1Object().GetHashCode();
}
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 algorithm = hashAlg.Algorithm.Id;
X509Name subjectX509Principal = PrincipalUtilities.GetSubjectX509Principal(issuerCert);
byte[] str = DigestUtilities.CalculateDigest(algorithm, subjectX509Principal.GetEncoded());
AsymmetricKeyParameter publicKey = issuerCert.GetPublicKey();
SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey);
byte[] str2 = DigestUtilities.CalculateDigest(algorithm, subjectPublicKeyInfo.PublicKeyData.GetBytes());
return new CertID(hashAlg, new DerOctetString(str), new DerOctetString(str2), serialNumber);
}
catch (Exception ex)
{
throw new OcspException("problem creating ID: " + ex, ex);
}
}
}