Skip to content

Commit

Permalink
Merge branch 'master' into netstandard
Browse files Browse the repository at this point in the history
  • Loading branch information
Oren Novotny committed Jan 16, 2019
2 parents bc28177 + 82a9f99 commit c5fc317
Show file tree
Hide file tree
Showing 73 changed files with 4,964 additions and 289 deletions.
1 change: 1 addition & 0 deletions crypto/src/asn1/crmf/CertRequest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using Org.BouncyCastle.Crmf;

namespace Org.BouncyCastle.Asn1.Crmf
{
Expand Down
7 changes: 4 additions & 3 deletions crypto/src/asn1/crmf/Controls.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Org.BouncyCastle.Utilities;
using System;

using Org.BouncyCastle.Utilities;
using System.Collections.Generic;
using System.Text;

namespace Org.BouncyCastle.Asn1.Crmf
{
Expand All @@ -25,7 +26,7 @@ public static Controls GetInstance(object obj)
throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj");
}

public Controls(params AttributeTypeAndValue[] atvs)
public Controls(params AttributeTypeAndValue[] atvs)
{
content = new DerSequence(atvs);
}
Expand Down
6 changes: 6 additions & 0 deletions crypto/src/asn1/crmf/OptionalValidity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ public static OptionalValidity GetInstance(object obj)
return new OptionalValidity(Asn1Sequence.GetInstance(obj));
}

public OptionalValidity(Time notBefore, Time notAfter)
{
this.notBefore = notBefore;
this.notAfter = notAfter;
}

public virtual Time NotBefore
{
get { return notBefore; }
Expand Down
52 changes: 26 additions & 26 deletions crypto/src/asn1/cryptopro/ECGOST3410NamedCurves.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,70 +115,70 @@ static ECGost3410NamedCurves()
parameters[CryptoProObjectIdentifiers.GostR3410x2001CryptoProC] = ecParams;

//GOST34.10 2012
mod_p = new BigInteger("115792089237316195423570985008687907853269984665640564039457584007913129639319"); //p
mod_q = new BigInteger("115792089237316195423570985008687907853073762908499243225378155805079068850323"); //q
mod_p = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97", 16); //p
mod_q = new BigInteger("400000000000000000000000000000000FD8CDDFC87B6635C115AF556C360C67", 16); //q
curve = new FpCurve(
mod_p, // p
new BigInteger("115792089237316195423570985008687907853269984665640564039457584007913129639316"), // a
new BigInteger("166"), // b
new BigInteger("C2173F1513981673AF4892C23035A27CE25E2013BF95AA33B22C656F277E7335", 16), // a
new BigInteger("295F9BAE7428ED9CCC20E7C359A9D41A22FCCD9108E17BF7BA9337A6F8AE9513", 16), // b
mod_q, BigInteger.One);

ecParams = new ECDomainParameters(
curve,
curve.CreatePoint(
new BigInteger("1"), // x
new BigInteger("64033881142927202683649881450433473985931760268884941288852745803908878638612")), // y
new BigInteger("91E38443A5E82C0D880923425712B2BB658B9196932E02C78B2582FE742DAA28", 16), // x
new BigInteger("32879423AB1A0375895786C4BB46E9565FDE0B5344766740AF268ADB32322E5C", 16)), // y
mod_q, BigInteger.One);

parameters[RosstandartObjectIdentifiers.id_tc26_gost_3410_12_256_paramSetA] = ecParams;

mod_p = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7",16); //p
mod_q = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27E69532F48D89116FF22B8D4E0560609B4B38ABFAD2B85DCACDB1411F10B275",16); //q
mod_p = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7", 16); //p
mod_q = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27E69532F48D89116FF22B8D4E0560609B4B38ABFAD2B85DCACDB1411F10B275", 16); //q
curve = new FpCurve(
mod_p, // p
new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC4",16), // a
new BigInteger("E8C2505DEDFC86DDC1BD0B2B6667F1DA34B82574761CB0E879BD081CFD0B6265EE3CB090F30D27614CB4574010DA90DD862EF9D4EBEE4761503190785A71C760",16), // b
new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC4", 16), // a
new BigInteger("E8C2505DEDFC86DDC1BD0B2B6667F1DA34B82574761CB0E879BD081CFD0B6265EE3CB090F30D27614CB4574010DA90DD862EF9D4EBEE4761503190785A71C760", 16), // b
mod_q, BigInteger.One);

ecParams = new ECDomainParameters(
curve,
curve.CreatePoint(
new BigInteger("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003"), // x
new BigInteger("7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF1626BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4",16)), // y
new BigInteger("7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF1626BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4", 16)), // y
mod_q, BigInteger.One);

parameters[RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512_paramSetA] = ecParams;

mod_p = new BigInteger("8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006F",16); //p
mod_q = new BigInteger("800000000000000000000000000000000000000000000000000000000000000149A1EC142565A545ACFDB77BD9D40CFA8B996712101BEA0EC6346C54374F25BD",16); //q
mod_p = new BigInteger("8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006F", 16); //p
mod_q = new BigInteger("800000000000000000000000000000000000000000000000000000000000000149A1EC142565A545ACFDB77BD9D40CFA8B996712101BEA0EC6346C54374F25BD", 16); //q
curve = new FpCurve(
mod_p, // p
new BigInteger("8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006C",16), // a
new BigInteger("687D1B459DC841457E3E06CF6F5E2517B97C7D614AF138BCBF85DC806C4B289F3E965D2DB1416D217F8B276FAD1AB69C50F78BEE1FA3106EFB8CCBC7C5140116",16), // b
new BigInteger("8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006C", 16), // a
new BigInteger("687D1B459DC841457E3E06CF6F5E2517B97C7D614AF138BCBF85DC806C4B289F3E965D2DB1416D217F8B276FAD1AB69C50F78BEE1FA3106EFB8CCBC7C5140116", 16), // b
mod_q, BigInteger.One);

ecParams = new ECDomainParameters(
curve,
curve.CreatePoint(
new BigInteger("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002"), // x
new BigInteger("1A8F7EDA389B094C2C071E3647A8940F3C123B697578C213BE6DD9E6C8EC7335DCB228FD1EDF4A39152CBCAAF8C0398828041055F94CEEEC7E21340780FE41BD",16)), // y
new BigInteger("1A8F7EDA389B094C2C071E3647A8940F3C123B697578C213BE6DD9E6C8EC7335DCB228FD1EDF4A39152CBCAAF8C0398828041055F94CEEEC7E21340780FE41BD", 16)), // y
mod_q, BigInteger.One);

parameters[RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512_paramSetB] = ecParams;

mod_p = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7",16); //p
mod_q = new BigInteger("3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC98CDBA46506AB004C33A9FF5147502CC8EDA9E7A769A12694623CEF47F023ED",16); //q
mod_p = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7", 16); //p
mod_q = new BigInteger("3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC98CDBA46506AB004C33A9FF5147502CC8EDA9E7A769A12694623CEF47F023ED", 16); //q
curve = new FpCurve(
mod_p, // p
new BigInteger("DC9203E514A721875485A529D2C722FB187BC8980EB866644DE41C68E143064546E861C0E2C9EDD92ADE71F46FCF50FF2AD97F951FDA9F2A2EB6546F39689BD3",16), // a
new BigInteger("B4C4EE28CEBC6C2C8AC12952CF37F16AC7EFB6A9F69F4B57FFDA2E4F0DE5ADE038CBC2FFF719D2C18DE0284B8BFEF3B52B8CC7A5F5BF0A3C8D2319A5312557E1",16), // b
new BigInteger("DC9203E514A721875485A529D2C722FB187BC8980EB866644DE41C68E143064546E861C0E2C9EDD92ADE71F46FCF50FF2AD97F951FDA9F2A2EB6546F39689BD3", 16), // a
new BigInteger("B4C4EE28CEBC6C2C8AC12952CF37F16AC7EFB6A9F69F4B57FFDA2E4F0DE5ADE038CBC2FFF719D2C18DE0284B8BFEF3B52B8CC7A5F5BF0A3C8D2319A5312557E1", 16), // b
mod_q, BigInteger.One);

ecParams = new ECDomainParameters(
curve,
curve.CreatePoint(
new BigInteger("E2E31EDFC23DE7BDEBE241CE593EF5DE2295B7A9CBAEF021D385F7074CEA043AA27272A7AE602BF2A7B9033DB9ED3610C6FB85487EAE97AAC5BC7928C1950148", 16), // x
new BigInteger("F5CE40D95B5EB899ABBCCFF5911CB8577939804D6527378B8C108C3D2090FF9BE18E2D33E3021ED2EF32D85822423B6304F726AA854BAE07D0396E9A9ADDC40F",16)), // y
new BigInteger("F5CE40D95B5EB899ABBCCFF5911CB8577939804D6527378B8C108C3D2090FF9BE18E2D33E3021ED2EF32D85822423B6304F726AA854BAE07D0396E9A9ADDC40F", 16)), // y
mod_q, BigInteger.One);

parameters[RosstandartObjectIdentifiers.id_tc26_gost_3410_12_512_paramSetC] = ecParams;
Expand Down Expand Up @@ -213,7 +213,7 @@ static ECGost3410NamedCurves()
public static ECDomainParameters GetByOid(
DerObjectIdentifier oid)
{
return (ECDomainParameters) parameters[oid];
return (ECDomainParameters)parameters[oid];
}

/**
Expand All @@ -228,11 +228,11 @@ public static IEnumerable Names
public static ECDomainParameters GetByName(
string name)
{
DerObjectIdentifier oid = (DerObjectIdentifier) objIds[name];
DerObjectIdentifier oid = (DerObjectIdentifier)objIds[name];

if (oid != null)
{
return (ECDomainParameters) parameters[oid];
return (ECDomainParameters)parameters[oid];
}

return null;
Expand All @@ -244,13 +244,13 @@ public static ECDomainParameters GetByName(
public static string GetName(
DerObjectIdentifier oid)
{
return (string) names[oid];
return (string)names[oid];
}

public static DerObjectIdentifier GetOid(
string name)
{
return (DerObjectIdentifier) objIds[name];
return (DerObjectIdentifier)objIds[name];
}
}
}
31 changes: 30 additions & 1 deletion crypto/src/asn1/nist/NISTObjectIdentifiers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,35 @@ private NistObjectIdentifiers()
public static readonly DerObjectIdentifier DsaWithSha224 = new DerObjectIdentifier(IdDsaWithSha2 + ".1");
public static readonly DerObjectIdentifier DsaWithSha256 = new DerObjectIdentifier(IdDsaWithSha2 + ".2");
public static readonly DerObjectIdentifier DsaWithSha384 = new DerObjectIdentifier(IdDsaWithSha2 + ".3");
public static readonly DerObjectIdentifier DsaWithSha512 = new DerObjectIdentifier(IdDsaWithSha2 + ".4");
public static readonly DerObjectIdentifier DsaWithSha512 = new DerObjectIdentifier(IdDsaWithSha2 + ".4");

/** 2.16.840.1.101.3.4.3.5 */
public static readonly DerObjectIdentifier IdDsaWithSha3_224 = new DerObjectIdentifier(IdDsaWithSha2 + ".5");
/** 2.16.840.1.101.3.4.3.6 */
public static readonly DerObjectIdentifier IdDsaWithSha3_256 = new DerObjectIdentifier(IdDsaWithSha2 + ".6");
/** 2.16.840.1.101.3.4.3.7 */
public static readonly DerObjectIdentifier IdDsaWithSha3_384 = new DerObjectIdentifier(IdDsaWithSha2 + ".7");
/** 2.16.840.1.101.3.4.3.8 */
public static readonly DerObjectIdentifier IdDsaWithSha3_512 = new DerObjectIdentifier(IdDsaWithSha2 + ".8");

// ECDSA with SHA-3
/** 2.16.840.1.101.3.4.3.9 */
public static readonly DerObjectIdentifier IdEcdsaWithSha3_224 = new DerObjectIdentifier(IdDsaWithSha2 + ".9");
/** 2.16.840.1.101.3.4.3.10 */
public static readonly DerObjectIdentifier IdEcdsaWithSha3_256 = new DerObjectIdentifier(IdDsaWithSha2 + ".10");
/** 2.16.840.1.101.3.4.3.11 */
public static readonly DerObjectIdentifier IdEcdsaWithSha3_384 = new DerObjectIdentifier(IdDsaWithSha2 + ".11");
/** 2.16.840.1.101.3.4.3.12 */
public static readonly DerObjectIdentifier IdEcdsaWithSha3_512 = new DerObjectIdentifier(IdDsaWithSha2 + ".12");

// RSA PKCS #1 v1.5 Signature with SHA-3 family.
/** 2.16.840.1.101.3.4.3.9 */
public static readonly DerObjectIdentifier IdRsassaPkcs1V15WithSha3_224 = new DerObjectIdentifier(IdDsaWithSha2 + ".13");
/** 2.16.840.1.101.3.4.3.10 */
public static readonly DerObjectIdentifier IdRsassaPkcs1V15WithSha3_256 = new DerObjectIdentifier(IdDsaWithSha2 + ".14");
/** 2.16.840.1.101.3.4.3.11 */
public static readonly DerObjectIdentifier IdRsassaPkcs1V15WithSha3_384 = new DerObjectIdentifier(IdDsaWithSha2 + ".15");
/** 2.16.840.1.101.3.4.3.12 */
public static readonly DerObjectIdentifier IdRsassaPkcs1V15WithSha3_512 = new DerObjectIdentifier(IdDsaWithSha2 + ".16");
}
}
4 changes: 2 additions & 2 deletions crypto/src/asn1/pkcs/PKCSObjectIdentifiers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -235,10 +235,10 @@ public abstract class PkcsObjectIdentifiers
public static readonly DerObjectIdentifier IdAAEtsCertCrlTimestamp = new DerObjectIdentifier(IdAA + ".26");
public static readonly DerObjectIdentifier IdAAEtsArchiveTimestamp = new DerObjectIdentifier(IdAA + ".27");

/** PKCS#9: 1.2.840.113549.1.9.16.6.2.37 - <a href="https://tools.ietf.org/html/rfc4108#section-2.2.5">RFC 4108</a> */
/** PKCS#9: 1.2.840.113549.1.9.16.2.37 - <a href="https://tools.ietf.org/html/rfc4108#section-2.2.5">RFC 4108</a> */
public static readonly DerObjectIdentifier IdAADecryptKeyID = IdAAOid.Branch("37");

/** PKCS#9: 1.2.840.113549.1.9.16.6.2.38 - <a href="https://tools.ietf.org/html/rfc4108#section-2.2.6">RFC 4108</a> */
/** PKCS#9: 1.2.840.113549.1.9.16.2.38 - <a href="https://tools.ietf.org/html/rfc4108#section-2.2.6">RFC 4108</a> */
public static readonly DerObjectIdentifier IdAAImplCryptoAlgs = IdAAOid.Branch("38");

/** PKCS#9: 1.2.840.113549.1.9.16.2.54 <a href="https://tools.ietf.org/html/rfc7030">RFC7030</a>*/
Expand Down
43 changes: 43 additions & 0 deletions crypto/src/cmp/CertificateConfirmationContent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

using Org.BouncyCastle.Cms;
using Org.BouncyCastle.Asn1.Cmp;


namespace Org.BouncyCastle.Cmp
{
public class CertificateConfirmationContent
{
private DefaultDigestAlgorithmIdentifierFinder digestAlgFinder;
private CertConfirmContent content;


public CertificateConfirmationContent(CertConfirmContent content)
{
this.content = content;
}

public CertificateConfirmationContent(CertConfirmContent content,
DefaultDigestAlgorithmIdentifierFinder digestAlgFinder)
{
this.content = content;
this.digestAlgFinder = digestAlgFinder;
}

public CertConfirmContent ToAsn1Structure()
{
return content;
}

public CertificateStatus[] GetStatusMessages()
{
CertStatus[] statusArray = content.ToCertStatusArray();
CertificateStatus[] ret = new CertificateStatus[statusArray.Length];
for (int i = 0; i != ret.Length; i++)
{
ret[i] = new CertificateStatus(digestAlgFinder, statusArray[i]);
}

return ret;
}
}
}
70 changes: 70 additions & 0 deletions crypto/src/cmp/CertificateConfirmationContentBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
using System.Collections;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Cmp;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Cms;
using Org.BouncyCastle.Crypto.IO;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;

namespace Org.BouncyCastle.Cmp
{
public class CertificateConfirmationContentBuilder
{
DefaultSignatureAlgorithmIdentifierFinder sigAlgFinder = new DefaultSignatureAlgorithmIdentifierFinder();
private DefaultDigestAlgorithmIdentifierFinder digestAlgFinder;
private ArrayList acceptedCerts = new ArrayList();
private ArrayList acceptedReqIds = new ArrayList();

public CertificateConfirmationContentBuilder() : this(new DefaultDigestAlgorithmIdentifierFinder())
{

}

public CertificateConfirmationContentBuilder(DefaultDigestAlgorithmIdentifierFinder digestAlgFinder)
{
this.digestAlgFinder = digestAlgFinder;
}

public CertificateConfirmationContentBuilder AddAcceptedCertificate(X509Certificate certHolder,
BigInteger certReqId)
{
acceptedCerts.Add(certHolder);
acceptedReqIds.Add(certReqId);
return this;
}

public CertificateConfirmationContent Build()
{
Asn1EncodableVector v = new Asn1EncodableVector();
for (int i = 0; i != acceptedCerts.Count; i++)
{
X509Certificate cert = (X509Certificate) acceptedCerts[i];
BigInteger reqId = (BigInteger) acceptedReqIds[i];



AlgorithmIdentifier algorithmIdentifier = sigAlgFinder.Find(cert.SigAlgName);

AlgorithmIdentifier digAlg = digestAlgFinder.find(algorithmIdentifier);
if (digAlg == null)
{
throw new CmpException("cannot find algorithm for digest from signature");
}

DigestSink sink = new DigestSink(DigestUtilities.GetDigest(digAlg.Algorithm));

sink.Write(cert.GetEncoded());

byte[] dig = new byte[sink.Digest.GetDigestSize()];
sink.Digest.DoFinal(dig, 0);

v.Add(new CertStatus(dig,reqId));
}

return new CertificateConfirmationContent(CertConfirmContent.GetInstance(new DerSequence(v)),
digestAlgFinder);
}
}
}
52 changes: 52 additions & 0 deletions crypto/src/cmp/CertificateStatus.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using Org.BouncyCastle.Asn1.Cmp;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Cms;
using Org.BouncyCastle.Crypto.IO;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities;
using Org.BouncyCastle.X509;

namespace Org.BouncyCastle.Cmp
{
public class CertificateStatus
{
private DefaultSignatureAlgorithmIdentifierFinder sigAlgFinder = new DefaultSignatureAlgorithmIdentifierFinder();
private DefaultDigestAlgorithmIdentifierFinder digestAlgFinder;
private CertStatus certStatus;

public CertificateStatus(DefaultDigestAlgorithmIdentifierFinder digestAlgFinder, CertStatus certStatus)
{
this.digestAlgFinder = digestAlgFinder;
this.certStatus = certStatus;
}

public PkiStatusInfo PkiStatusInfo
{
get { return certStatus.StatusInfo; }
}

public BigInteger CertRequestId
{
get { return certStatus.CertReqID.Value; }
}

public bool IsVerified(X509Certificate cert)
{

AlgorithmIdentifier digAlg = digestAlgFinder.find( sigAlgFinder.Find(cert.SigAlgName));
if (digAlg == null)
{
throw new CmpException("cannot find algorithm for digest from signature "+cert.SigAlgName);
}

DigestSink digestSink = new DigestSink(DigestUtilities.GetDigest(digAlg.Algorithm));

digestSink.Write(cert.GetEncoded());

byte[] digest = new byte[digestSink.Digest.GetDigestSize()];
digestSink.Digest.DoFinal(digest, 0);
return Arrays.ConstantTimeAreEqual(certStatus.CertHash.GetOctets(), digest);
}
}
}
Loading

0 comments on commit c5fc317

Please sign in to comment.