@@ -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