home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / security / SecureRandom.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  3.9 KB  |  168 lines

  1. package java.security;
  2.  
  3. import java.util.Random;
  4. import sun.security.jca.GetInstance;
  5. import sun.security.jca.Providers;
  6. import sun.security.provider.Sun;
  7.  
  8. public class SecureRandom extends Random {
  9.    private Provider provider;
  10.    private SecureRandomSpi secureRandomSpi;
  11.    private String algorithm;
  12.    private static volatile SecureRandom seedGenerator = null;
  13.    static final long serialVersionUID = 4940670005562187L;
  14.    private byte[] state;
  15.    private MessageDigest digest;
  16.    private byte[] randomBytes;
  17.    private int randomBytesUsed;
  18.    private long counter;
  19.  
  20.    public SecureRandom() {
  21.       super(0L);
  22.       this.provider = null;
  23.       this.secureRandomSpi = null;
  24.       this.digest = null;
  25.       this.getDefaultPRNG(false, (byte[])null);
  26.    }
  27.  
  28.    public SecureRandom(byte[] var1) {
  29.       super(0L);
  30.       this.provider = null;
  31.       this.secureRandomSpi = null;
  32.       this.digest = null;
  33.       this.getDefaultPRNG(true, var1);
  34.    }
  35.  
  36.    private void getDefaultPRNG(boolean var1, byte[] var2) {
  37.       String var3 = getPrngAlgorithm();
  38.       if (var3 == null) {
  39.          var3 = "SHA1PRNG";
  40.          this.secureRandomSpi = new sun.security.provider.SecureRandom();
  41.          this.provider = new Sun();
  42.          if (var1) {
  43.             this.secureRandomSpi.engineSetSeed(var2);
  44.          }
  45.       } else {
  46.          try {
  47.             SecureRandom var4 = getInstance(var3);
  48.             this.secureRandomSpi = var4.getSecureRandomSpi();
  49.             this.provider = var4.getProvider();
  50.             if (var1) {
  51.                this.secureRandomSpi.engineSetSeed(var2);
  52.             }
  53.          } catch (NoSuchAlgorithmException var5) {
  54.             throw new RuntimeException(var5);
  55.          }
  56.       }
  57.  
  58.       if (this.getClass() == SecureRandom.class) {
  59.          this.algorithm = var3;
  60.       }
  61.  
  62.    }
  63.  
  64.    protected SecureRandom(SecureRandomSpi var1, Provider var2) {
  65.       this(var1, var2, (String)null);
  66.    }
  67.  
  68.    private SecureRandom(SecureRandomSpi var1, Provider var2, String var3) {
  69.       super(0L);
  70.       this.provider = null;
  71.       this.secureRandomSpi = null;
  72.       this.digest = null;
  73.       this.secureRandomSpi = var1;
  74.       this.provider = var2;
  75.       this.algorithm = var3;
  76.    }
  77.  
  78.    public static SecureRandom getInstance(String var0) throws NoSuchAlgorithmException {
  79.       GetInstance.Instance var1 = GetInstance.getInstance("SecureRandom", SecureRandomSpi.class, var0);
  80.       return new SecureRandom((SecureRandomSpi)var1.impl, var1.provider, var0);
  81.    }
  82.  
  83.    public static SecureRandom getInstance(String var0, String var1) throws NoSuchAlgorithmException, NoSuchProviderException {
  84.       GetInstance.Instance var2 = GetInstance.getInstance("SecureRandom", SecureRandomSpi.class, var0, var1);
  85.       return new SecureRandom((SecureRandomSpi)var2.impl, var2.provider, var0);
  86.    }
  87.  
  88.    public static SecureRandom getInstance(String var0, Provider var1) throws NoSuchAlgorithmException {
  89.       GetInstance.Instance var2 = GetInstance.getInstance("SecureRandom", SecureRandomSpi.class, var0, var1);
  90.       return new SecureRandom((SecureRandomSpi)var2.impl, var2.provider, var0);
  91.    }
  92.  
  93.    SecureRandomSpi getSecureRandomSpi() {
  94.       return this.secureRandomSpi;
  95.    }
  96.  
  97.    public final Provider getProvider() {
  98.       return this.provider;
  99.    }
  100.  
  101.    public String getAlgorithm() {
  102.       return this.algorithm != null ? this.algorithm : "unknown";
  103.    }
  104.  
  105.    public synchronized void setSeed(byte[] var1) {
  106.       this.secureRandomSpi.engineSetSeed(var1);
  107.    }
  108.  
  109.    public void setSeed(long var1) {
  110.       if (var1 != 0L) {
  111.          this.secureRandomSpi.engineSetSeed(longToByteArray(var1));
  112.       }
  113.  
  114.    }
  115.  
  116.    public synchronized void nextBytes(byte[] var1) {
  117.       this.secureRandomSpi.engineNextBytes(var1);
  118.    }
  119.  
  120.    protected final int next(int var1) {
  121.       int var2 = (var1 + 7) / 8;
  122.       byte[] var3 = new byte[var2];
  123.       int var4 = 0;
  124.       this.nextBytes(var3);
  125.  
  126.       for(int var5 = 0; var5 < var2; ++var5) {
  127.          var4 = (var4 << 8) + (var3[var5] & 255);
  128.       }
  129.  
  130.       return var4 >>> var2 * 8 - var1;
  131.    }
  132.  
  133.    public static byte[] getSeed(int var0) {
  134.       if (seedGenerator == null) {
  135.          seedGenerator = new SecureRandom();
  136.       }
  137.  
  138.       return seedGenerator.generateSeed(var0);
  139.    }
  140.  
  141.    public byte[] generateSeed(int var1) {
  142.       return this.secureRandomSpi.engineGenerateSeed(var1);
  143.    }
  144.  
  145.    private static byte[] longToByteArray(long var0) {
  146.       byte[] var2 = new byte[8];
  147.  
  148.       for(int var3 = 0; var3 < 8; ++var3) {
  149.          var2[var3] = (byte)((int)var0);
  150.          var0 >>= 8;
  151.       }
  152.  
  153.       return var2;
  154.    }
  155.  
  156.    private static String getPrngAlgorithm() {
  157.       for(Provider var2 : Providers.getProviderList().providers()) {
  158.          for(Provider.Service var4 : var2.getServices()) {
  159.             if (var4.getType().equals("SecureRandom")) {
  160.                return var4.getAlgorithm();
  161.             }
  162.          }
  163.       }
  164.  
  165.       return null;
  166.    }
  167. }
  168.