Skip to content

Commit da142b2

Browse files
harrison314Jozef Gajdos
authored andcommitted
Allows creation of HashMLDsaSigner and HashSlhDsaSigner that can sign hashes.
1 parent 1c6d12a commit da142b2

File tree

2 files changed

+61
-4
lines changed

2 files changed

+61
-4
lines changed

crypto/src/crypto/signers/HashMLDsaSigner.cs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,43 @@ public sealed class HashMLDsaSigner
2424
private MLDsaEngine m_engine;
2525

2626
public HashMLDsaSigner(MLDsaParameters parameters, bool deterministic)
27+
: this(parameters, deterministic,
28+
DigestUtilities.GetDigest(parameters.PreHashOid),
29+
parameters.PreHashOid)
30+
{
31+
if (parameters == null)
32+
throw new ArgumentNullException(nameof(parameters));
33+
if (parameters.PreHashOid == null)
34+
throw new ArgumentException("cannot be used for ML-DSA", nameof(parameters));
35+
}
36+
37+
public static HashMLDsaSigner CreatePrehashSigner(MLDsaParameters parameters, bool deterministic)
2738
{
2839
if (parameters == null)
2940
throw new ArgumentNullException(nameof(parameters));
3041
if (parameters.PreHashOid == null)
3142
throw new ArgumentException("cannot be used for ML-DSA", nameof(parameters));
3243

44+
IDigest preHashDigest = DigestUtilities.GetDigest(parameters.PreHashOid);
45+
return new HashMLDsaSigner(parameters, deterministic, Prehash.ForDigest(preHashDigest), parameters.PreHashOid);
46+
}
47+
48+
public static HashMLDsaSigner CreatePrehashSigner(MLDsaParameters parametersWithoutPrehash, bool deterministic, DerObjectIdentifier preHashOid)
49+
{
50+
if (parametersWithoutPrehash == null)
51+
throw new ArgumentNullException(nameof(parametersWithoutPrehash));
52+
if (preHashOid == null)
53+
throw new ArgumentNullException(nameof(preHashOid));
54+
55+
IDigest preHashDigest = DigestUtilities.GetDigest(preHashOid);
56+
return new HashMLDsaSigner(parametersWithoutPrehash, deterministic, Prehash.ForDigest(preHashDigest), preHashOid);
57+
}
58+
59+
private HashMLDsaSigner(MLDsaParameters parameters, bool deterministic, IDigest preHashDigest, DerObjectIdentifier preHashOid)
60+
{
3361
m_parameters = parameters;
34-
m_preHashOidEncoding = parameters.PreHashOid.GetEncoded(Asn1Encodable.Der);
35-
m_preHashDigest = DigestUtilities.GetDigest(parameters.PreHashOid);
62+
m_preHashOidEncoding = preHashOid.GetEncoded(Asn1Encodable.Der);
63+
m_preHashDigest = preHashDigest;
3664
m_deterministic = deterministic;
3765
}
3866

crypto/src/crypto/signers/HashSlhDsaSigner.cs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.IO;
33

44
using Org.BouncyCastle.Asn1;
5+
using Org.BouncyCastle.Crypto.Digests;
56
using Org.BouncyCastle.Crypto.Parameters;
67
using Org.BouncyCastle.Crypto.Signers.SlhDsa;
78
using Org.BouncyCastle.Security;
@@ -23,15 +24,43 @@ public sealed class HashSlhDsaSigner
2324
private SlhDsaEngine m_engine;
2425

2526
public HashSlhDsaSigner(SlhDsaParameters parameters, bool deterministic)
27+
: this(parameters, deterministic,
28+
DigestUtilities.GetDigest(parameters.PreHashOid),
29+
parameters.PreHashOid)
30+
{
31+
if (parameters == null)
32+
throw new ArgumentNullException(nameof(parameters));
33+
if (parameters.PreHashOid == null)
34+
throw new ArgumentException("cannot be used for SLH-DSA", nameof(parameters));
35+
}
36+
37+
public static HashSlhDsaSigner CreatePrehashSigner(SlhDsaParameters parameters, bool deterministic)
2638
{
2739
if (parameters == null)
2840
throw new ArgumentNullException(nameof(parameters));
2941
if (parameters.PreHashOid == null)
3042
throw new ArgumentException("cannot be used for SLH-DSA", nameof(parameters));
3143

44+
IDigest preHashDigest = DigestUtilities.GetDigest(parameters.PreHashOid);
45+
return new HashSlhDsaSigner(parameters, deterministic, Prehash.ForDigest(preHashDigest), parameters.PreHashOid);
46+
}
47+
48+
public static HashSlhDsaSigner CreatePrehashSigner(SlhDsaParameters parametersWithoutPrehash, bool deterministic, DerObjectIdentifier preHashOid)
49+
{
50+
if (parametersWithoutPrehash == null)
51+
throw new ArgumentNullException(nameof(parametersWithoutPrehash));
52+
if (preHashOid == null)
53+
throw new ArgumentNullException(nameof(preHashOid));
54+
55+
IDigest preHashDigest = DigestUtilities.GetDigest(preHashOid);
56+
return new HashSlhDsaSigner(parametersWithoutPrehash, deterministic, Prehash.ForDigest(preHashDigest), preHashOid);
57+
}
58+
59+
private HashSlhDsaSigner(SlhDsaParameters parameters, bool deterministic, IDigest preHashDigest, DerObjectIdentifier preHashOid)
60+
{
3261
m_parameters = parameters;
33-
m_preHashOidEncoding = parameters.PreHashOid.GetEncoded(Asn1Encodable.Der);
34-
m_preHashDigest = DigestUtilities.GetDigest(parameters.PreHashOid);
62+
m_preHashOidEncoding = preHashOid.GetEncoded(Asn1Encodable.Der);
63+
m_preHashDigest = preHashDigest;
3564
m_deterministic = deterministic;
3665
}
3766

0 commit comments

Comments
 (0)