Skip to content

Commit 08658ae

Browse files
committed
fixed use of random to avoid occassional null pointer
1 parent 547de69 commit 08658ae

File tree

10 files changed

+56
-105
lines changed

10 files changed

+56
-105
lines changed

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import org.bouncycastle.jcajce.spec.KEMParameterSpec;
2828
import org.bouncycastle.pqc.crypto.bike.BIKEKEMExtractor;
2929
import org.bouncycastle.pqc.crypto.bike.BIKEKEMGenerator;
30+
import org.bouncycastle.pqc.crypto.cmce.CMCEKEMGenerator;
31+
import org.bouncycastle.pqc.jcajce.provider.cmce.BCCMCEPrivateKey;
32+
import org.bouncycastle.pqc.jcajce.provider.cmce.BCCMCEPublicKey;
3033
import org.bouncycastle.pqc.jcajce.provider.util.WrapUtil;
3134
import org.bouncycastle.util.Arrays;
3235
import org.bouncycastle.util.Exceptions;
@@ -39,7 +42,6 @@ class BIKECipherSpi
3942
private KEMParameterSpec kemParameterSpec;
4043
private BCBIKEPublicKey wrapKey;
4144
private BCBIKEPrivateKey unwrapKey;
42-
private SecureRandom random;
4345

4446
private AlgorithmParameters engineParams;
4547

@@ -126,11 +128,6 @@ protected void engineInit(int opmode, Key key, SecureRandom random)
126128
protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec, SecureRandom random)
127129
throws InvalidKeyException, InvalidAlgorithmParameterException
128130
{
129-
if (random == null)
130-
{
131-
this.random = CryptoServicesRegistrar.getSecureRandom();
132-
}
133-
134131
if (paramSpec == null)
135132
{
136133
// TODO: default should probably use shake.
@@ -151,11 +148,11 @@ protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec,
151148
if (key instanceof BCBIKEPublicKey)
152149
{
153150
wrapKey = (BCBIKEPublicKey)key;
154-
kemGen = new BIKEKEMGenerator(random);
151+
kemGen = new BIKEKEMGenerator(CryptoServicesRegistrar.getSecureRandom(random));
155152
}
156153
else
157154
{
158-
throw new InvalidKeyException("Only an RSA public key can be used for wrapping");
155+
throw new InvalidKeyException("Only a " + algorithmName + " public key can be used for wrapping");
159156
}
160157
}
161158
else if (opmode == Cipher.UNWRAP_MODE)
@@ -166,7 +163,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
166163
}
167164
else
168165
{
169-
throw new InvalidKeyException("Only an RSA private key can be used for unwrapping");
166+
throw new InvalidKeyException("Only a " + algorithmName + " private key can be used for unwrapping");
170167
}
171168
}
172169
else
@@ -176,7 +173,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
176173
}
177174

178175
@Override
179-
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom secureRandom)
176+
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom random)
180177
throws InvalidKeyException, InvalidAlgorithmParameterException
181178
{
182179
AlgorithmParameterSpec paramSpec = null;

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class CMCECipherSpi
3939
private KEMParameterSpec kemParameterSpec;
4040
private BCCMCEPublicKey wrapKey;
4141
private BCCMCEPrivateKey unwrapKey;
42-
private SecureRandom random;
4342

4443
private AlgorithmParameters engineParams;
4544

@@ -125,11 +124,6 @@ protected void engineInit(int opmode, Key key, SecureRandom random)
125124
protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec, SecureRandom random)
126125
throws InvalidKeyException, InvalidAlgorithmParameterException
127126
{
128-
if (random == null)
129-
{
130-
this.random = CryptoServicesRegistrar.getSecureRandom();
131-
}
132-
133127
if (paramSpec == null)
134128
{
135129
// TODO: default should probably use shake.
@@ -150,11 +144,11 @@ protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec,
150144
if (key instanceof BCCMCEPublicKey)
151145
{
152146
wrapKey = (BCCMCEPublicKey)key;
153-
kemGen = new CMCEKEMGenerator(random);
147+
kemGen = new CMCEKEMGenerator(CryptoServicesRegistrar.getSecureRandom(random));
154148
}
155149
else
156150
{
157-
throw new InvalidKeyException("Only an CMCE public key can be used for wrapping");
151+
throw new InvalidKeyException("Only a " + algorithmName + " public key can be used for wrapping");
158152
}
159153
}
160154
else if (opmode == Cipher.UNWRAP_MODE)
@@ -165,7 +159,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
165159
}
166160
else
167161
{
168-
throw new InvalidKeyException("Only an CMCE private key can be used for unwrapping");
162+
throw new InvalidKeyException("Only a " + algorithmName + " private key can be used for unwrapping");
169163
}
170164
}
171165
else
@@ -175,7 +169,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
175169
}
176170

177171
@Override
178-
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom secureRandom)
172+
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom random)
179173
throws InvalidKeyException, InvalidAlgorithmParameterException
180174
{
181175
AlgorithmParameterSpec paramSpec = null;

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/frodo/FrodoCipherSpi.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import org.bouncycastle.jcajce.spec.KEMParameterSpec;
2828
import org.bouncycastle.pqc.crypto.frodo.FrodoKEMExtractor;
2929
import org.bouncycastle.pqc.crypto.frodo.FrodoKEMGenerator;
30+
import org.bouncycastle.pqc.crypto.hqc.HQCKEMGenerator;
31+
import org.bouncycastle.pqc.jcajce.provider.hqc.BCHQCPrivateKey;
32+
import org.bouncycastle.pqc.jcajce.provider.hqc.BCHQCPublicKey;
3033
import org.bouncycastle.pqc.jcajce.provider.util.WrapUtil;
3134
import org.bouncycastle.util.Arrays;
3235
import org.bouncycastle.util.Exceptions;
@@ -39,7 +42,6 @@ class FrodoCipherSpi
3942
private KEMParameterSpec kemParameterSpec;
4043
private BCFrodoPublicKey wrapKey;
4144
private BCFrodoPrivateKey unwrapKey;
42-
private SecureRandom random;
4345

4446
private AlgorithmParameters engineParams;
4547

@@ -126,11 +128,6 @@ protected void engineInit(int opmode, Key key, SecureRandom random)
126128
protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec, SecureRandom random)
127129
throws InvalidKeyException, InvalidAlgorithmParameterException
128130
{
129-
if (random == null)
130-
{
131-
this.random = CryptoServicesRegistrar.getSecureRandom();
132-
}
133-
134131
if (paramSpec == null)
135132
{
136133
// TODO: default should probably use shake.
@@ -151,11 +148,11 @@ protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec,
151148
if (key instanceof BCFrodoPublicKey)
152149
{
153150
wrapKey = (BCFrodoPublicKey)key;
154-
kemGen = new FrodoKEMGenerator(random);
151+
kemGen = new FrodoKEMGenerator(CryptoServicesRegistrar.getSecureRandom(random));
155152
}
156153
else
157154
{
158-
throw new InvalidKeyException("Only an RSA public key can be used for wrapping");
155+
throw new InvalidKeyException("Only a " + algorithmName + " public key can be used for wrapping");
159156
}
160157
}
161158
else if (opmode == Cipher.UNWRAP_MODE)
@@ -166,7 +163,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
166163
}
167164
else
168165
{
169-
throw new InvalidKeyException("Only an RSA private key can be used for unwrapping");
166+
throw new InvalidKeyException("Only a " + algorithmName + " private key can be used for unwrapping");
170167
}
171168
}
172169
else
@@ -176,7 +173,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
176173
}
177174

178175
@Override
179-
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom secureRandom)
176+
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom random)
180177
throws InvalidKeyException, InvalidAlgorithmParameterException
181178
{
182179
AlgorithmParameterSpec paramSpec = null;

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ class HQCCipherSpi
3939
private KEMParameterSpec kemParameterSpec;
4040
private BCHQCPublicKey wrapKey;
4141
private BCHQCPrivateKey unwrapKey;
42-
private SecureRandom random;
43-
4442
private AlgorithmParameters engineParams;
4543

4644
HQCCipherSpi(String algorithmName)
@@ -126,11 +124,6 @@ protected void engineInit(int opmode, Key key, SecureRandom random)
126124
protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec, SecureRandom random)
127125
throws InvalidKeyException, InvalidAlgorithmParameterException
128126
{
129-
if (random == null)
130-
{
131-
this.random = CryptoServicesRegistrar.getSecureRandom();
132-
}
133-
134127
if (paramSpec == null)
135128
{
136129
// TODO: default should probably use shake.
@@ -151,11 +144,11 @@ protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec,
151144
if (key instanceof BCHQCPublicKey)
152145
{
153146
wrapKey = (BCHQCPublicKey)key;
154-
kemGen = new HQCKEMGenerator(random);
147+
kemGen = new HQCKEMGenerator(CryptoServicesRegistrar.getSecureRandom(random));
155148
}
156149
else
157150
{
158-
throw new InvalidKeyException("Only an RSA public key can be used for wrapping");
151+
throw new InvalidKeyException("Only a " + algorithmName + " public key can be used for wrapping");
159152
}
160153
}
161154
else if (opmode == Cipher.UNWRAP_MODE)
@@ -166,7 +159,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
166159
}
167160
else
168161
{
169-
throw new InvalidKeyException("Only an RSA private key can be used for unwrapping");
162+
throw new InvalidKeyException("Only a " + algorithmName + " private key can be used for unwrapping");
170163
}
171164
}
172165
else
@@ -176,7 +169,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
176169
}
177170

178171
@Override
179-
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom secureRandom)
172+
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom random)
180173
throws InvalidKeyException, InvalidAlgorithmParameterException
181174
{
182175
AlgorithmParameterSpec paramSpec = null;

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ class KyberCipherSpi
4141
private KEMParameterSpec kemParameterSpec;
4242
private BCKyberPublicKey wrapKey;
4343
private BCKyberPrivateKey unwrapKey;
44-
private SecureRandom random;
4544

4645
private AlgorithmParameters engineParams;
4746
private KyberParameters kyberParameters;
@@ -135,11 +134,6 @@ protected void engineInit(int opmode, Key key, SecureRandom random)
135134
protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec, SecureRandom random)
136135
throws InvalidKeyException, InvalidAlgorithmParameterException
137136
{
138-
if (random == null)
139-
{
140-
this.random = CryptoServicesRegistrar.getSecureRandom();
141-
}
142-
143137
if (paramSpec == null)
144138
{
145139
// TODO: default should probably use shake.
@@ -160,11 +154,11 @@ protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec,
160154
if (key instanceof BCKyberPublicKey)
161155
{
162156
wrapKey = (BCKyberPublicKey)key;
163-
kemGen = new KyberKEMGenerator(random);
157+
kemGen = new KyberKEMGenerator(CryptoServicesRegistrar.getSecureRandom(random));
164158
}
165159
else
166160
{
167-
throw new InvalidKeyException("Only an RSA public key can be used for wrapping");
161+
throw new InvalidKeyException("Only a " + algorithmName + " public key can be used for wrapping");
168162
}
169163
}
170164
else if (opmode == Cipher.UNWRAP_MODE)
@@ -175,7 +169,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
175169
}
176170
else
177171
{
178-
throw new InvalidKeyException("Only an RSA private key can be used for unwrapping");
172+
throw new InvalidKeyException("Only a " + algorithmName + " private key can be used for unwrapping");
179173
}
180174
}
181175
else
@@ -194,7 +188,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
194188
}
195189

196190
@Override
197-
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom secureRandom)
191+
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom random)
198192
throws InvalidKeyException, InvalidAlgorithmParameterException
199193
{
200194
AlgorithmParameterSpec paramSpec = null;

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUCipherSpi.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
import org.bouncycastle.jcajce.spec.KEMParameterSpec;
2828
import org.bouncycastle.pqc.crypto.ntru.NTRUKEMExtractor;
2929
import org.bouncycastle.pqc.crypto.ntru.NTRUKEMGenerator;
30+
import org.bouncycastle.pqc.crypto.ntruprime.SNTRUPrimeKEMGenerator;
31+
import org.bouncycastle.pqc.jcajce.provider.ntruprime.BCNTRULPRimePublicKey;
32+
import org.bouncycastle.pqc.jcajce.provider.ntruprime.BCSNTRUPrimePrivateKey;
33+
import org.bouncycastle.pqc.jcajce.provider.ntruprime.BCSNTRUPrimePublicKey;
3034
import org.bouncycastle.pqc.jcajce.provider.util.WrapUtil;
3135
import org.bouncycastle.util.Arrays;
3236
import org.bouncycastle.util.Exceptions;
@@ -39,7 +43,6 @@ class NTRUCipherSpi
3943
private KEMParameterSpec kemParameterSpec;
4044
private BCNTRUPublicKey wrapKey;
4145
private BCNTRUPrivateKey unwrapKey;
42-
private SecureRandom random;
4346

4447
private AlgorithmParameters engineParams;
4548

@@ -126,11 +129,6 @@ protected void engineInit(int opmode, Key key, SecureRandom random)
126129
protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec, SecureRandom random)
127130
throws InvalidKeyException, InvalidAlgorithmParameterException
128131
{
129-
if (random == null)
130-
{
131-
this.random = CryptoServicesRegistrar.getSecureRandom();
132-
}
133-
134132
if (paramSpec == null)
135133
{
136134
// TODO: default should probably use shake.
@@ -151,11 +149,11 @@ protected void engineInit(int opmode, Key key, AlgorithmParameterSpec paramSpec,
151149
if (key instanceof BCNTRUPublicKey)
152150
{
153151
wrapKey = (BCNTRUPublicKey)key;
154-
kemGen = new NTRUKEMGenerator(random);
152+
kemGen = new NTRUKEMGenerator(CryptoServicesRegistrar.getSecureRandom(random));
155153
}
156154
else
157155
{
158-
throw new InvalidKeyException("Only an RSA public key can be used for wrapping");
156+
throw new InvalidKeyException("Only a " + algorithmName + " public key can be used for wrapping");
159157
}
160158
}
161159
else if (opmode == Cipher.UNWRAP_MODE)
@@ -166,7 +164,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
166164
}
167165
else
168166
{
169-
throw new InvalidKeyException("Only an RSA private key can be used for unwrapping");
167+
throw new InvalidKeyException("Only a " + algorithmName + " private key can be used for unwrapping");
170168
}
171169
}
172170
else
@@ -176,7 +174,7 @@ else if (opmode == Cipher.UNWRAP_MODE)
176174
}
177175

178176
@Override
179-
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom secureRandom)
177+
protected void engineInit(int opmode, Key key, AlgorithmParameters algorithmParameters, SecureRandom random)
180178
throws InvalidKeyException, InvalidAlgorithmParameterException
181179
{
182180
AlgorithmParameterSpec paramSpec = null;

0 commit comments

Comments
 (0)