8004044: Lazily instantiate SunJCE.RANDOM
Replace the static initialization of SunJCE.RANDOM object w/ lazy initialization Reviewed-by: mchung
This commit is contained in:
parent
2edaf46a3d
commit
c6f02e06f0
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -106,7 +106,7 @@ public final class AESKeyGenerator extends KeyGeneratorSpi {
|
||||
SecretKeySpec aesKey = null;
|
||||
|
||||
if (this.random == null) {
|
||||
this.random = SunJCE.RANDOM;
|
||||
this.random = SunJCE.getRandom();
|
||||
}
|
||||
|
||||
byte[] keyBytes = new byte[keySize];
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -104,7 +104,7 @@ public final class BlowfishKeyGenerator extends KeyGeneratorSpi {
|
||||
*/
|
||||
protected SecretKey engineGenerateKey() {
|
||||
if (this.random == null) {
|
||||
this.random = SunJCE.RANDOM;
|
||||
this.random = SunJCE.getRandom();
|
||||
}
|
||||
|
||||
byte[] keyBytes = new byte[this.keysize];
|
||||
|
@ -410,7 +410,7 @@ final class CipherCore {
|
||||
} else {
|
||||
iv = new byte[blockSize];
|
||||
}
|
||||
SunJCE.RANDOM.nextBytes(iv);
|
||||
SunJCE.getRandom().nextBytes(iv);
|
||||
}
|
||||
if (cipherMode == GCM_MODE) {
|
||||
algName = "GCM";
|
||||
@ -564,7 +564,7 @@ final class CipherCore {
|
||||
}
|
||||
|
||||
if (random == null) {
|
||||
random = SunJCE.RANDOM;
|
||||
random = SunJCE.getRandom();
|
||||
}
|
||||
if (cipherMode == GCM_MODE) {
|
||||
ivBytes = new byte[GaloisCounterMode.DEFAULT_IV_LEN];
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -102,7 +102,7 @@ public final class DESKeyGenerator extends KeyGeneratorSpi {
|
||||
DESKey desKey = null;
|
||||
|
||||
if (this.random == null) {
|
||||
this.random = SunJCE.RANDOM;
|
||||
this.random = SunJCE.getRandom();
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -105,7 +105,7 @@ public final class DESedeKeyGenerator extends KeyGeneratorSpi {
|
||||
*/
|
||||
protected SecretKey engineGenerateKey() {
|
||||
if (this.random == null) {
|
||||
this.random = SunJCE.RANDOM;
|
||||
this.random = SunJCE.getRandom();
|
||||
}
|
||||
|
||||
byte[] rawkey = new byte[DESedeKeySpec.DES_EDE_KEY_LEN];
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -217,7 +217,7 @@ public final class DESedeWrapCipher extends CipherSpi {
|
||||
if (params == null) {
|
||||
iv = new byte[8];
|
||||
if (random == null) {
|
||||
random = SunJCE.RANDOM;
|
||||
random = SunJCE.getRandom();
|
||||
}
|
||||
random.nextBytes(iv);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -140,7 +140,7 @@ public final class DHKeyPairGenerator extends KeyPairGeneratorSpi {
|
||||
*/
|
||||
public KeyPair generateKeyPair() {
|
||||
if (random == null) {
|
||||
random = SunJCE.RANDOM;
|
||||
random = SunJCE.getRandom();
|
||||
}
|
||||
|
||||
if (params == null) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -131,7 +131,7 @@ extends AlgorithmParameterGeneratorSpi {
|
||||
}
|
||||
|
||||
if (this.random == null)
|
||||
this.random = SunJCE.RANDOM;
|
||||
this.random = SunJCE.getRandom();
|
||||
|
||||
try {
|
||||
AlgorithmParameterGenerator paramGen;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -98,7 +98,7 @@ public final class HmacMD5KeyGenerator extends KeyGeneratorSpi {
|
||||
*/
|
||||
protected SecretKey engineGenerateKey() {
|
||||
if (this.random == null) {
|
||||
this.random = SunJCE.RANDOM;
|
||||
this.random = SunJCE.getRandom();
|
||||
}
|
||||
|
||||
byte[] keyBytes = new byte[this.keysize];
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -89,7 +89,7 @@ public final class HmacPKCS12PBESHA1 extends HmacCore {
|
||||
// generate default for salt and iteration count if necessary
|
||||
if (salt == null) {
|
||||
salt = new byte[20];
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
}
|
||||
if (iCount == 0) iCount = 100;
|
||||
} else if (!(params instanceof PBEParameterSpec)) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -98,7 +98,7 @@ public final class HmacSHA1KeyGenerator extends KeyGeneratorSpi {
|
||||
*/
|
||||
protected SecretKey engineGenerateKey() {
|
||||
if (this.random == null) {
|
||||
this.random = SunJCE.RANDOM;
|
||||
this.random = SunJCE.getRandom();
|
||||
}
|
||||
|
||||
byte[] keyBytes = new byte[this.keysize];
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -69,7 +69,7 @@ final class ISO10126Padding implements Padding {
|
||||
|
||||
byte paddingOctet = (byte) (len & 0xff);
|
||||
byte[] padding = new byte[len];
|
||||
SunJCE.RANDOM.nextBytes(padding);
|
||||
SunJCE.getRandom().nextBytes(padding);
|
||||
padding[len-1] = paddingOctet;
|
||||
System.arraycopy(padding, 0, in, off, len);
|
||||
return;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -98,7 +98,7 @@ final class KeyGeneratorCore {
|
||||
// generate the key
|
||||
SecretKey implGenerateKey() {
|
||||
if (random == null) {
|
||||
random = SunJCE.RANDOM;
|
||||
random = SunJCE.getRandom();
|
||||
}
|
||||
byte[] b = new byte[(keySize + 7) >> 3];
|
||||
random.nextBytes(b);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -99,7 +99,7 @@ final class KeyProtector {
|
||||
{
|
||||
// create a random salt (8 bytes)
|
||||
byte[] salt = new byte[8];
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
|
||||
// create PBE parameters from salt and iteration count
|
||||
PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, 20);
|
||||
@ -284,7 +284,7 @@ final class KeyProtector {
|
||||
{
|
||||
// create a random salt (8 bytes)
|
||||
byte[] salt = new byte[8];
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
|
||||
// create PBE parameters from salt and iteration count
|
||||
PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, 20);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -164,7 +164,7 @@ final class PBECipherCore {
|
||||
AlgorithmParameters params = null;
|
||||
if (salt == null) {
|
||||
salt = new byte[8];
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
}
|
||||
PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, iCount);
|
||||
try {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -164,7 +164,7 @@ final class PBES1Core {
|
||||
AlgorithmParameters params = null;
|
||||
if (salt == null) {
|
||||
salt = new byte[8];
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
}
|
||||
PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, iCount);
|
||||
try {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -134,13 +134,13 @@ abstract class PBES2Core extends CipherSpi {
|
||||
if (salt == null) {
|
||||
// generate random salt and use default iteration count
|
||||
salt = new byte[DEFAULT_SALT_LENGTH];
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
iCount = DEFAULT_COUNT;
|
||||
}
|
||||
if (ivSpec == null) {
|
||||
// generate random IV
|
||||
byte[] ivBytes = new byte[blkSize];
|
||||
SunJCE.RANDOM.nextBytes(ivBytes);
|
||||
SunJCE.getRandom().nextBytes(ivBytes);
|
||||
ivSpec = new IvParameterSpec(ivBytes);
|
||||
}
|
||||
PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, iCount, ivSpec);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -123,7 +123,7 @@ abstract class PBMAC1Core extends HmacCore {
|
||||
// generate default for salt and iteration count if necessary
|
||||
if (salt == null) {
|
||||
salt = new byte[DEFAULT_SALT_LENGTH];
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
}
|
||||
if (iCount == 0) iCount = DEFAULT_COUNT;
|
||||
} else if (!(params instanceof PBEParameterSpec)) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -227,7 +227,7 @@ final class PKCS12PBECipherCore {
|
||||
// follow the recommendation in PKCS12 v1.0
|
||||
// section B.4 to generate salt and iCount.
|
||||
salt = new byte[DEFAULT_SALT_LENGTH];
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
iCount = DEFAULT_COUNT;
|
||||
}
|
||||
PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, iCount);
|
||||
@ -294,7 +294,7 @@ final class PKCS12PBECipherCore {
|
||||
if (random != null) {
|
||||
random.nextBytes(salt);
|
||||
} else {
|
||||
SunJCE.RANDOM.nextBytes(salt);
|
||||
SunJCE.getRandom().nextBytes(salt);
|
||||
}
|
||||
}
|
||||
if (iCount == 0) iCount = DEFAULT_COUNT;
|
||||
|
@ -91,7 +91,12 @@ public final class SunJCE extends Provider {
|
||||
/* Are we debugging? -- for developers */
|
||||
static final boolean debug = false;
|
||||
|
||||
static final SecureRandom RANDOM = new SecureRandom();
|
||||
// lazy initialize SecureRandom to avoid potential recursion if Sun
|
||||
// provider has not been installed yet
|
||||
private static class SecureRandomHolder {
|
||||
static final SecureRandom RANDOM = new SecureRandom();
|
||||
}
|
||||
static SecureRandom getRandom() { return SecureRandomHolder.RANDOM; }
|
||||
|
||||
public SunJCE() {
|
||||
/* We are the "SunJCE" provider */
|
||||
|
Loading…
Reference in New Issue
Block a user