Skip to content

Commit 15932a2

Browse files
committed
JCE: synchronize key generation and encoding block to prevent multiple threads conflicting
1 parent b538dcb commit 15932a2

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

src/main/java/com/wolfssl/provider/jce/WolfCryptKeyPairGenerator.java

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,8 @@ public synchronized KeyPair generateKeyPair() {
290290
ECPublicKey eccPub = null;
291291
Ecc ecc = null;
292292

293+
/* synchronize entire key generation and encoding to prevent
294+
* multiple threads from mixing up keys during generation */
293295
synchronized (rngLock) {
294296
ecc = new Ecc(this.rng);
295297

@@ -298,38 +300,38 @@ public synchronized KeyPair generateKeyPair() {
298300
} else {
299301
ecc.makeKeyOnCurve(this.rng, this.keysize, this.curve);
300302
}
301-
}
302303

303-
/* private key */
304-
privDer = ecc.privateKeyEncodePKCS8();
305-
if (privDer == null) {
306-
throw new RuntimeException(
307-
"Unable to get ECC private key DER");
308-
}
309-
privSpec = new PKCS8EncodedKeySpec(privDer);
304+
/* private key */
305+
privDer = ecc.privateKeyEncodePKCS8();
306+
if (privDer == null) {
307+
throw new RuntimeException(
308+
"Unable to get ECC private key DER");
309+
}
310+
privSpec = new PKCS8EncodedKeySpec(privDer);
310311

311-
/* public key */
312-
pubDer = ecc.publicKeyEncode();
313-
if (pubDer == null) {
314-
throw new RuntimeException(
315-
"Unable to get ECC public key DER");
316-
}
317-
pubSpec = new X509EncodedKeySpec(pubDer);
312+
/* public key */
313+
pubDer = ecc.publicKeyEncode();
314+
if (pubDer == null) {
315+
throw new RuntimeException(
316+
"Unable to get ECC public key DER");
317+
}
318+
pubSpec = new X509EncodedKeySpec(pubDer);
318319

319-
zeroArray(privDer);
320-
zeroArray(pubDer);
321-
ecc.releaseNativeStruct();
320+
zeroArray(privDer);
321+
zeroArray(pubDer);
322+
ecc.releaseNativeStruct();
322323

323-
try {
324-
KeyFactory kf = KeyFactory.getInstance("EC");
324+
try {
325+
KeyFactory kf = KeyFactory.getInstance("EC");
325326

326-
eccPriv = (ECPrivateKey)kf.generatePrivate(privSpec);
327-
eccPub = (ECPublicKey)kf.generatePublic(pubSpec);
327+
eccPriv = (ECPrivateKey)kf.generatePrivate(privSpec);
328+
eccPub = (ECPublicKey)kf.generatePublic(pubSpec);
328329

329-
pair = new KeyPair(eccPub, eccPriv);
330+
pair = new KeyPair(eccPub, eccPriv);
330331

331-
} catch (Exception e) {
332-
throw new RuntimeException(e);
332+
} catch (Exception e) {
333+
throw new RuntimeException(e);
334+
}
333335
}
334336

335337
log("generated ECC KeyPair");

0 commit comments

Comments
 (0)