Skip to content

Commit 77c4e4f

Browse files
harrison314Jozef Gajdos
authored andcommitted
Allows creation of HashSlhDsaSigner that can sign hashes.
1 parent a98d0d5 commit 77c4e4f

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

crypto/src/crypto/signers/HashMLDsaSigner.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,26 @@ public HashMLDsaSigner(MLDsaParameters parameters, bool deterministic)
3434
throw new ArgumentException("cannot be used for ML-DSA", nameof(parameters));
3535
}
3636

37-
public static HashMLDsaSigner CreateRawSigner(MLDsaParameters parameters, bool deterministic)
37+
public static HashMLDsaSigner CreatePrehashSigner(MLDsaParameters parameters, bool deterministic)
3838
{
3939
if (parameters == null)
4040
throw new ArgumentNullException(nameof(parameters));
4141
if (parameters.PreHashOid == null)
4242
throw new ArgumentException("cannot be used for ML-DSA", nameof(parameters));
4343

44-
return new HashMLDsaSigner(parameters, deterministic, new NullDigest(), parameters.PreHashOid);
44+
IDigest preHashDigest = DigestUtilities.GetDigest(parameters.PreHashOid);
45+
return new HashMLDsaSigner(parameters, deterministic, Prehash.ForDigest(preHashDigest), parameters.PreHashOid);
4546
}
4647

47-
public static HashMLDsaSigner CreateRawSigner(MLDsaParameters parametersWithoutPrehash, bool deterministic, DerObjectIdentifier preHashOid)
48+
public static HashMLDsaSigner CreatePrehashSigner(MLDsaParameters parametersWithoutPrehash, bool deterministic, DerObjectIdentifier preHashOid)
4849
{
4950
if (parametersWithoutPrehash == null)
5051
throw new ArgumentNullException(nameof(parametersWithoutPrehash));
5152
if (preHashOid == null)
5253
throw new ArgumentNullException(nameof(preHashOid));
5354

54-
return new HashMLDsaSigner(parametersWithoutPrehash, deterministic, new NullDigest(), preHashOid);
55+
IDigest preHashDigest = DigestUtilities.GetDigest(preHashOid);
56+
return new HashMLDsaSigner(parametersWithoutPrehash, deterministic, Prehash.ForDigest(preHashDigest), preHashOid);
5557
}
5658

5759
private HashMLDsaSigner(MLDsaParameters parameters, bool deterministic, IDigest preHashDigest, DerObjectIdentifier preHashOid)

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)