home *** CD-ROM | disk | FTP | other *** search
- package java.security;
-
- import java.util.Enumeration;
- import java.util.Random;
- import sun.security.provider.Sun;
-
- public class SecureRandom extends Random {
- private Provider provider = null;
- private SecureRandomSpi secureRandomSpi = null;
- private static SecureRandom seedGenerator = null;
- static final long serialVersionUID = 4940670005562187L;
- private byte[] state;
- private MessageDigest digest = null;
- private byte[] randomBytes;
- private int randomBytesUsed;
- private long counter;
-
- public SecureRandom() {
- super(0L);
- String var1 = getPrngAlgorithm();
- if (var1 == null) {
- this.secureRandomSpi = new sun.security.provider.SecureRandom();
- this.provider = new Sun();
- } else {
- try {
- SecureRandom var2 = getInstance(var1);
- this.secureRandomSpi = var2.getSecureRandomSpi();
- this.provider = var2.getProvider();
- } catch (NoSuchAlgorithmException var3) {
- }
- }
-
- }
-
- public SecureRandom(byte[] var1) {
- super(0L);
- String var2 = getPrngAlgorithm();
- if (var2 == null) {
- this.secureRandomSpi = new sun.security.provider.SecureRandom();
- this.provider = new Sun();
- this.secureRandomSpi.engineSetSeed(var1);
- } else {
- try {
- SecureRandom var3 = getInstance(var2);
- this.secureRandomSpi = var3.getSecureRandomSpi();
- this.provider = var3.getProvider();
- this.secureRandomSpi.engineSetSeed(var1);
- } catch (NoSuchAlgorithmException var4) {
- }
- }
-
- }
-
- protected SecureRandom(SecureRandomSpi var1, Provider var2) {
- super(0L);
- this.secureRandomSpi = var1;
- this.provider = var2;
- }
-
- public static SecureRandom getInstance(String var0) throws NoSuchAlgorithmException {
- try {
- Object[] var1 = Security.getImpl(var0, "SecureRandom", (String)null);
- return new SecureRandom((SecureRandomSpi)var1[0], (Provider)var1[1]);
- } catch (NoSuchProviderException var2) {
- throw new NoSuchAlgorithmException(var0 + " not found");
- }
- }
-
- public static SecureRandom getInstance(String var0, String var1) throws NoSuchAlgorithmException, NoSuchProviderException {
- if (var1 != null && var1.length() != 0) {
- Object[] var2 = Security.getImpl(var0, "SecureRandom", var1);
- return new SecureRandom((SecureRandomSpi)var2[0], (Provider)var2[1]);
- } else {
- throw new IllegalArgumentException("missing provider");
- }
- }
-
- SecureRandomSpi getSecureRandomSpi() {
- return this.secureRandomSpi;
- }
-
- public final Provider getProvider() {
- return this.provider;
- }
-
- public synchronized void setSeed(byte[] var1) {
- this.secureRandomSpi.engineSetSeed(var1);
- }
-
- public void setSeed(long var1) {
- if (var1 != 0L) {
- this.secureRandomSpi.engineSetSeed(longToByteArray(var1));
- }
-
- }
-
- public synchronized void nextBytes(byte[] var1) {
- this.secureRandomSpi.engineNextBytes(var1);
- }
-
- protected final int next(int var1) {
- int var2 = (var1 + 7) / 8;
- byte[] var3 = new byte[var2];
- int var4 = 0;
- this.nextBytes(var3);
-
- for(int var5 = 0; var5 < var2; ++var5) {
- var4 = (var4 << 8) + (var3[var5] & 255);
- }
-
- return var4 >>> var2 * 8 - var1;
- }
-
- public static byte[] getSeed(int var0) {
- if (seedGenerator == null) {
- seedGenerator = new SecureRandom();
- }
-
- return seedGenerator.generateSeed(var0);
- }
-
- public byte[] generateSeed(int var1) {
- return this.secureRandomSpi.engineGenerateSeed(var1);
- }
-
- private static byte[] longToByteArray(long var0) {
- byte[] var2 = new byte[8];
-
- for(int var3 = 0; var3 < 8; ++var3) {
- var2[var3] = (byte)((int)var0);
- var0 >>= 8;
- }
-
- return var2;
- }
-
- private static String getPrngAlgorithm() {
- Provider[] var0 = Security.getProviders();
-
- for(int var1 = 0; var1 < var0.length; ++var1) {
- Enumeration var2 = var0[var1].propertyNames();
-
- while(var2.hasMoreElements()) {
- String var3 = (String)var2.nextElement();
- if (var3.startsWith("SecureRandom.")) {
- int var4 = var3.indexOf(".", 0);
- return var3.substring(var4 + 1);
- }
- }
- }
-
- return null;
- }
- }
-