Skip to content

SecureRandom instance initialization gets failed with NullPointerException After changing the security provider as BouncyCastle #300

@ghost

Description

Issue: SecureRandom instance initialization gets failed with NullPointerException

Environment:
Configured the java security provider as BouncyCastle [org.bouncycastle.jce.provider.BouncyCastleProvider] after that i tried to run my below java code (OpenJDK Java 7) and got the following exception
Note: Removed all other security provides from '/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.161.x86_64/jre/lib/security/java.security'

Java Code:

import javax.crypto.SecretKeyFactory;
import sun.security.jca.GetInstance;
import sun.security.jca.GetInstance.Instance;
import sun.security.jca.ProviderList;
import sun.security.jca.Providers;
import java.security.Provider;
import java.util.List;
import java.security.Provider.Service;
import java.security.*;
public class Test {
    public static void main(String[] args) {
       try {
                SecureRandom random = new SecureRandom();
        } catch(Exception e){
                e.printStackTrace();
        }
    }
}

Thread Trace :

      (Suspended (entry into method <init> in DRBG$Default))	
   DRBG$Default.<init>() line: 185	
   NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]	
   NativeConstructorAccessorImpl.newInstance(Object[]) line: 57	
   DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45	
   Constructor.newInstance(Object...) line: 526	
   Provider$Service.newInstance(Object) line: 1237	
   GetInstance.getInstance(Service, Class<?>) line: 236	
   GetInstance.getInstance(String, Class<?>, String) line: 164	
   SecureRandom.getInstance(String) line: 287	
   SecureRandom.getDefaultPRNG(boolean, byte[]) line: 204	
   SecureRandom.<init>() line: 161	
   DRBG.createCoreSecureRandom() line: 125	
   DRBG.createInitialEntropySource() line: 113	
   DRBG.access$400() line: 25	
   DRBG$HybridSecureRandom.<init>() line: 260	
   DRBG.createBaseRandom(boolean) line: 168	
   DRBG.access$200(boolean) line: 25	
   DRBG$Default.<clinit>() line: 182	
   NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]	
   NativeConstructorAccessorImpl.newInstance(Object[]) line: 57	
   DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45	
   Constructor.newInstance(Object...) line: 526	
   Provider$Service.newInstance(Object) line: 1237	
   GetInstance.getInstance(Service, Class<?>) line: 236	
   GetInstance.getInstance(String, Class<?>, String) line: 164	
   SecureRandom.getInstance(String) line: 287	
   SecureRandom.getDefaultPRNG(boolean, byte[]) line: 204	
   SecureRandom.<init>() line: 161	
   Test.main(Test.java:13)

Stack Trace:

Exception in thread "main" java.lang.ExceptionInInitializerError
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at java.security.Provider$Service.newInstance(Provider.java:1237)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
	at java.security.SecureRandom.getInstance(SecureRandom.java:287)
	at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:204)
	at java.security.SecureRandom.<init>(SecureRandom.java:161)
	at Test.main(Test.java:13)
Caused by: java.lang.NullPointerException
	at org.bouncycastle.jcajce.provider.drbg.DRBG$Default.engineGenerateSeed(DRBG.java:200)
	at java.security.SecureRandom.generateSeed(SecureRandom.java:528)
	at org.bouncycastle.jcajce.provider.drbg.DRBG$HybridSecureRandom.<init>(DRBG.java:267)
	at org.bouncycastle.jcajce.provider.drbg.DRBG.createBaseRandom(DRBG.java:168)
	at org.bouncycastle.jcajce.provider.drbg.DRBG.access$200(DRBG.java:25)
	at org.bouncycastle.jcajce.provider.drbg.DRBG$Default.<clinit>(DRBG.java:182)
	... 11 more

After Configuring the entropy system property as 'org.bouncycastle.crypto.prng.BasicEntropySourceProvider' :
export org.bouncycastle.drbg.entropysource=org.bouncycastle.crypto.prng.BasicEntropySourceProvider
Got the below error,


	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_161]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_161]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_161]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [rt.jar:1.7.0_161]
	at java.security.Provider$Service.newInstance(Provider.java:1237) [rt.jar:1.7.0_161]
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:236) [rt.jar:1.7.0_161]
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:164) [rt.jar:1.7.0_161]
	at java.security.SecureRandom.getInstance(SecureRandom.java:287) [rt.jar:1.7.0_161]
	at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:204) [rt.jar:1.7.0_161]
	at java.security.SecureRandom.<init>(SecureRandom.java:161) [rt.jar:1.7.0_161]
	at Test.main(Test.java:13)
Caused by: java.lang.IllegalStateException: entropy source org.bouncycastle.crypto.prng.BasicEntropySourceProvider not created: org.bouncycastle.crypto.prng.BasicEntropySourceProvider
	at org.bouncycastle.jcajce.provider.drbg.DRBG$3.run(DRBG.java:145)
	at org.bouncycastle.jcajce.provider.drbg.DRBG$3.run(DRBG.java:134)
	at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_161]
	at org.bouncycastle.jcajce.provider.drbg.DRBG.createEntropySource(DRBG.java:133)
	at org.bouncycastle.jcajce.provider.drbg.DRBG.createBaseRandom(DRBG.java:155)
	at org.bouncycastle.jcajce.provider.drbg.DRBG.access$200(DRBG.java:25)
	at org.bouncycastle.jcajce.provider.drbg.DRBG$Default.<clinit>(DRBG.java:182)
	... 16 more
Caused by: java.lang.InstantiationException: org.bouncycastle.crypto.prng.BasicEntropySourceProvider
	at java.lang.Class.newInstance(Class.java:368) [rt.jar:1.7.0_161]
	at org.bouncycastle.jcajce.provider.drbg.DRBG$3.run(DRBG.java:141)
	... 22 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions