Skip to content

Commit e298b5b

Browse files
committed
added support for ContextParameterSpec to MLDSA
refactoring of ContextParameterSpec support.
1 parent 2d33a55 commit e298b5b

File tree

7 files changed

+240
-173
lines changed

7 files changed

+240
-173
lines changed

prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPublicKey.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.io.ObjectOutputStream;
66

77
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
8-
import org.bouncycastle.crypto.CipherParameters;
98
import org.bouncycastle.jcajce.interfaces.MLDSAPublicKey;
109
import org.bouncycastle.jcajce.spec.MLDSAParameterSpec;
1110
import org.bouncycastle.pqc.crypto.mldsa.MLDSAPublicKeyParameters;
@@ -129,7 +128,7 @@ public String toString()
129128
return buf.toString();
130129
}
131130

132-
CipherParameters getKeyParams()
131+
MLDSAPublicKeyParameters getKeyParams()
133132
{
134133
return params;
135134
}

prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi.java

Lines changed: 16 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@
66
import java.security.PublicKey;
77
import java.security.SecureRandom;
88
import java.security.SignatureException;
9-
import java.security.spec.AlgorithmParameterSpec;
109

1110
import org.bouncycastle.crypto.CipherParameters;
12-
import org.bouncycastle.crypto.params.ParametersWithRandom;
11+
import org.bouncycastle.jcajce.provider.asymmetric.util.BaseDeterministicOrRandomSignature;
1312
import org.bouncycastle.jcajce.spec.MLDSAParameterSpec;
1413
import org.bouncycastle.pqc.crypto.mldsa.HashMLDSASigner;
1514
import org.bouncycastle.pqc.crypto.mldsa.MLDSAParameters;
1615

1716
public class HashSignatureSpi
18-
extends java.security.Signature
17+
extends BaseDeterministicOrRandomSignature
1918
{
2019
private HashMLDSASigner signer;
2120
private MLDSAParameters parameters;
@@ -36,14 +35,15 @@ protected HashSignatureSpi(HashMLDSASigner signer, MLDSAParameters parameters)
3635
this.parameters = parameters;
3736
}
3837

39-
protected void engineInitVerify(PublicKey publicKey)
38+
@Override
39+
protected void verifyInit(PublicKey publicKey)
4040
throws InvalidKeyException
4141
{
4242
if (publicKey instanceof BCMLDSAPublicKey)
4343
{
4444
BCMLDSAPublicKey key = (BCMLDSAPublicKey)publicKey;
4545

46-
CipherParameters param = key.getKeyParams();
46+
this.keyParams = key.getKeyParams();
4747

4848
if (parameters != null)
4949
{
@@ -53,30 +53,22 @@ protected void engineInitVerify(PublicKey publicKey)
5353
throw new InvalidKeyException("signature configured for " + canonicalAlg);
5454
}
5555
}
56-
57-
signer.init(false, param);
5856
}
5957
else
6058
{
6159
throw new InvalidKeyException("unknown public key passed to ML-DSA");
6260
}
6361
}
6462

65-
protected void engineInitSign(PrivateKey privateKey, SecureRandom random)
63+
protected void signInit(PrivateKey privateKey, SecureRandom random)
6664
throws InvalidKeyException
6765
{
6866
this.appRandom = random;
69-
engineInitSign(privateKey);
70-
}
71-
72-
protected void engineInitSign(PrivateKey privateKey)
73-
throws InvalidKeyException
74-
{
7567
if (privateKey instanceof BCMLDSAPrivateKey)
7668
{
7769
BCMLDSAPrivateKey key = (BCMLDSAPrivateKey)privateKey;
7870

79-
CipherParameters param = key.getKeyParams();
71+
this.keyParams = key.getKeyParams();
8072

8173
if (parameters != null)
8274
{
@@ -86,32 +78,25 @@ protected void engineInitSign(PrivateKey privateKey)
8678
throw new InvalidKeyException("signature configured for " + canonicalAlg);
8779
}
8880
}
89-
90-
if (appRandom != null)
91-
{
92-
signer.init(true, new ParametersWithRandom(param, appRandom));
93-
}
94-
else
95-
{
96-
signer.init(true, param);
97-
}
9881
}
9982
else
10083
{
10184
throw new InvalidKeyException("unknown private key passed to ML-DSA");
10285
}
10386
}
10487

105-
protected void engineUpdate(byte b)
88+
@Override
89+
protected void updateEngine(byte b)
10690
throws SignatureException
10791
{
10892
signer.update(b);
10993
}
110-
111-
protected void engineUpdate(byte[] b, int off, int len)
94+
95+
@Override
96+
protected void updateEngine(byte[] buf, int off, int len)
11297
throws SignatureException
11398
{
114-
signer.update(b, off, len);
99+
signer.update(buf, off, len);
115100
}
116101

117102
protected byte[] engineSign()
@@ -133,29 +118,12 @@ protected boolean engineVerify(byte[] sigBytes)
133118
return signer.verifySignature(sigBytes);
134119
}
135120

136-
protected void engineSetParameter(AlgorithmParameterSpec params)
137-
{
138-
// TODO
139-
throw new UnsupportedOperationException("engineSetParameter unsupported");
140-
}
141-
142-
/**
143-
* @deprecated replaced with #engineSetParameter(java.security.spec.AlgorithmParameterSpec)
144-
*/
145-
protected void engineSetParameter(String param, Object value)
121+
@Override
122+
protected void reInitialize(boolean forSigning, CipherParameters params)
146123
{
147-
throw new UnsupportedOperationException("engineSetParameter unsupported");
124+
signer.init(forSigning, params);
148125
}
149126

150-
/**
151-
* @deprecated
152-
*/
153-
protected Object engineGetParameter(String param)
154-
{
155-
throw new UnsupportedOperationException("engineSetParameter unsupported");
156-
}
157-
158-
159127
public static class MLDSA
160128
extends HashSignatureSpi
161129
{

prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi.java

Lines changed: 11 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@
66
import java.security.PublicKey;
77
import java.security.SecureRandom;
88
import java.security.SignatureException;
9-
import java.security.spec.AlgorithmParameterSpec;
109

1110
import org.bouncycastle.crypto.CipherParameters;
12-
import org.bouncycastle.crypto.params.ParametersWithRandom;
11+
import org.bouncycastle.jcajce.provider.asymmetric.util.BaseDeterministicOrRandomSignature;
1312
import org.bouncycastle.jcajce.spec.MLDSAParameterSpec;
1413
import org.bouncycastle.pqc.crypto.mldsa.MLDSAParameters;
1514
import org.bouncycastle.pqc.crypto.mldsa.MLDSASigner;
1615

1716
public class SignatureSpi
18-
extends java.security.Signature
17+
extends BaseDeterministicOrRandomSignature
1918
{
2019
private MLDSASigner signer;
2120
private MLDSAParameters parameters;
@@ -36,14 +35,14 @@ protected SignatureSpi(MLDSASigner signer, MLDSAParameters parameters)
3635
this.parameters = parameters;
3736
}
3837

39-
protected void engineInitVerify(PublicKey publicKey)
38+
protected void verifyInit(PublicKey publicKey)
4039
throws InvalidKeyException
4140
{
4241
if (publicKey instanceof BCMLDSAPublicKey)
4342
{
4443
BCMLDSAPublicKey key = (BCMLDSAPublicKey)publicKey;
4544

46-
CipherParameters param = key.getKeyParams();
45+
this.keyParams = key.getKeyParams();
4746

4847
if (parameters != null)
4948
{
@@ -53,30 +52,22 @@ protected void engineInitVerify(PublicKey publicKey)
5352
throw new InvalidKeyException("signature configured for " + canonicalAlg);
5453
}
5554
}
56-
57-
signer.init(false, param);
5855
}
5956
else
6057
{
6158
throw new InvalidKeyException("unknown public key passed to ML-DSA");
6259
}
6360
}
6461

65-
protected void engineInitSign(PrivateKey privateKey, SecureRandom random)
62+
protected void signInit(PrivateKey privateKey, SecureRandom random)
6663
throws InvalidKeyException
6764
{
6865
this.appRandom = random;
69-
engineInitSign(privateKey);
70-
}
71-
72-
protected void engineInitSign(PrivateKey privateKey)
73-
throws InvalidKeyException
74-
{
7566
if (privateKey instanceof BCMLDSAPrivateKey)
7667
{
7768
BCMLDSAPrivateKey key = (BCMLDSAPrivateKey)privateKey;
7869

79-
CipherParameters param = key.getKeyParams();
70+
this.keyParams = key.getKeyParams();
8071

8172
if (parameters != null)
8273
{
@@ -86,29 +77,20 @@ protected void engineInitSign(PrivateKey privateKey)
8677
throw new InvalidKeyException("signature configured for " + canonicalAlg);
8778
}
8879
}
89-
90-
if (appRandom != null)
91-
{
92-
signer.init(true, new ParametersWithRandom(param, appRandom));
93-
}
94-
else
95-
{
96-
signer.init(true, param);
97-
}
9880
}
9981
else
10082
{
10183
throw new InvalidKeyException("unknown private key passed to ML-DSA");
10284
}
10385
}
10486

105-
protected void engineUpdate(byte b)
87+
protected void updateEngine(byte b)
10688
throws SignatureException
10789
{
10890
signer.update(b);
10991
}
11092

111-
protected void engineUpdate(byte[] b, int off, int len)
93+
protected void updateEngine(byte[] b, int off, int len)
11294
throws SignatureException
11395
{
11496
signer.update(b, off, len);
@@ -133,29 +115,11 @@ protected boolean engineVerify(byte[] sigBytes)
133115
return signer.verifySignature(sigBytes);
134116
}
135117

136-
protected void engineSetParameter(AlgorithmParameterSpec params)
118+
protected void reInitialize(boolean forSigning, CipherParameters params)
137119
{
138-
// TODO
139-
throw new UnsupportedOperationException("engineSetParameter unsupported");
120+
signer.init(forSigning, params);
140121
}
141122

142-
/**
143-
* @deprecated replaced with #engineSetParameter(java.security.spec.AlgorithmParameterSpec)
144-
*/
145-
protected void engineSetParameter(String param, Object value)
146-
{
147-
throw new UnsupportedOperationException("engineSetParameter unsupported");
148-
}
149-
150-
/**
151-
* @deprecated
152-
*/
153-
protected Object engineGetParameter(String param)
154-
{
155-
throw new UnsupportedOperationException("engineSetParameter unsupported");
156-
}
157-
158-
159123
public static class MLDSA
160124
extends SignatureSpi
161125
{
@@ -164,6 +128,7 @@ public MLDSA()
164128
super(new MLDSASigner());
165129
}
166130
}
131+
167132
public static class MLDSA44
168133
extends SignatureSpi
169134
{

prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/HashSignatureSpi.java

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package org.bouncycastle.jcajce.provider.asymmetric.slhdsa;
22

3-
import java.io.ByteArrayOutputStream;
43
import java.security.InvalidKeyException;
54
import java.security.PrivateKey;
65
import java.security.PublicKey;
76
import java.security.SecureRandom;
87
import java.security.SignatureException;
98

109
import org.bouncycastle.crypto.CipherParameters;
11-
import org.bouncycastle.crypto.params.ParametersWithContext;
12-
import org.bouncycastle.crypto.params.ParametersWithRandom;
1310
import org.bouncycastle.jcajce.provider.asymmetric.util.BaseDeterministicOrRandomSignature;
1411
import org.bouncycastle.pqc.crypto.slhdsa.HashSLHDSASigner;
1512
import org.bouncycastle.pqc.crypto.slhdsa.SLHDSAPrivateKeyParameters;
@@ -18,11 +15,12 @@
1815
public class HashSignatureSpi
1916
extends BaseDeterministicOrRandomSignature
2017
{
21-
private final ByteArrayOutputStream bOut = new ByteArrayOutputStream();
2218
private final HashSLHDSASigner signer;
2319

2420
protected HashSignatureSpi(HashSLHDSASigner signer)
2521
{
22+
super("HASH-SLH-DSA");
23+
2624
this.signer = signer;
2725
}
2826

@@ -79,16 +77,6 @@ protected byte[] engineSign()
7977
throw new SignatureException("engine initialized for verification");
8078
}
8179

82-
if (appRandom != null)
83-
{
84-
param = new ParametersWithRandom(param, appRandom);
85-
}
86-
87-
if (paramSpec != null)
88-
{
89-
param = new ParametersWithContext(param, paramSpec.getContext());
90-
}
91-
9280
try
9381
{
9482
byte[] sig = signer.generateSignature();
@@ -122,39 +110,12 @@ protected boolean engineVerify(byte[] sigBytes)
122110
finally
123111
{
124112
this.isInitState = true;
125-
bOut.reset();
126113
}
127114
}
128115

129-
protected void reInit()
116+
protected void reInitialize(boolean forSigning, CipherParameters params)
130117
{
131-
CipherParameters param = keyParams;
132-
133-
if (keyParams instanceof SLHDSAPublicKeyParameters)
134-
{
135-
if (paramSpec != null)
136-
{
137-
param = new ParametersWithContext(param, paramSpec.getContext());
138-
}
139-
140-
signer.init(false, param);
141-
}
142-
else
143-
{
144-
if (appRandom != null)
145-
{
146-
param = new ParametersWithRandom(param, appRandom);
147-
}
148-
149-
if (paramSpec != null)
150-
{
151-
param = new ParametersWithContext(param, paramSpec.getContext());
152-
}
153-
154-
signer.init(true, param);
155-
}
156-
157-
bOut.reset();
118+
signer.init(forSigning, params);
158119
}
159120

160121
static public class Direct

0 commit comments

Comments
 (0)