From f86e4f8e7e7a464bb28185a8c98fdcfc210e6200 Mon Sep 17 00:00:00 2001 From: "Arne Babenhauserheide (freenet releases)" Date: Wed, 10 Oct 2018 18:59:05 +0000 Subject: [PATCH] KeyGenUtils: re-use the bouncy castle instance to avoid the memory leak. --- src/freenet/crypt/KeyGenUtils.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/freenet/crypt/KeyGenUtils.java b/src/freenet/crypt/KeyGenUtils.java index 555feac7178..1b03ff07eb5 100755 --- a/src/freenet/crypt/KeyGenUtils.java +++ b/src/freenet/crypt/KeyGenUtils.java @@ -36,9 +36,7 @@ */ public final class KeyGenUtils { - static { - java.security.Security.insertProviderAt(new BouncyCastleProvider(), 1); - } + private static BouncyCastleProvider bcProvider = new BouncyCastleProvider(); /** * Generates a public/private key pair formatted for the algorithm specified @@ -51,7 +49,7 @@ public static KeyPair genKeyPair(KeyPairType type) { throw new UnsupportedTypeException(type); } try { - KeyPairGenerator kg = KeyPairGenerator.getInstance(type.alg); + KeyPairGenerator kg = KeyPairGenerator.getInstance(type.alg, bcProvider); kg.initialize(type.spec); return kg.generateKeyPair(); } catch (NoSuchAlgorithmException e) { @@ -72,7 +70,7 @@ public static PublicKey getPublicKey(KeyPairType type, byte[] pub){ throw new UnsupportedTypeException(type); } try { - KeyFactory kf = KeyFactory.getInstance(type.alg); + KeyFactory kf = KeyFactory.getInstance(type.alg, bcProvider); X509EncodedKeySpec xks = new X509EncodedKeySpec(pub); return kf.generatePublic(xks); } catch (NoSuchAlgorithmException e) { @@ -127,7 +125,7 @@ public static KeyPair getKeyPair(KeyPairType type, byte[] pub, byte[] pri) { throw new UnsupportedTypeException(type); } try { - KeyFactory kf = KeyFactory.getInstance(type.alg); + KeyFactory kf = KeyFactory.getInstance(type.alg, bcProvider); PublicKey pubK = getPublicKey(type, pub); @@ -174,7 +172,7 @@ public static KeyPair getKeyPair(PublicKey pubK, PrivateKey privK){ */ public static SecretKey genSecretKey(KeyType type){ try{ - KeyGenerator kg = KeyGenerator.getInstance(type.alg); + KeyGenerator kg = KeyGenerator.getInstance(type.alg, bcProvider); kg.init(type.keySize); return kg.generateKey(); } catch (NoSuchAlgorithmException e) {