Commit ff23b16c by Raif S. Naffah Committed by Tom Tromey

SHA1PRNG.java (ensureIsSeeded): new method used to ensure seeding has occurred…

SHA1PRNG.java (ensureIsSeeded): new method used to ensure seeding has occurred and that a specific seed can be...

2003-02-10  Raif S. Naffah  <raif@fl.net.au>

	* gnu/java/security/provider/SHA1PRNG.java (ensureIsSeeded): new
	method used to ensure seeding has occurred and that a specific
	seed can be set and used.

From-SVN: r62660
parent d6a2d36e
2003-02-10 Raif S. Naffah <raif@fl.net.au>
* gnu/java/security/provider/SHA1PRNG.java (ensureIsSeeded): new
method used to ensure seeding has occurred and that a specific
seed can be set and used.
2003-02-10 Ranjit Mathew <rmathew@hotmail.com> 2003-02-10 Ranjit Mathew <rmathew@hotmail.com>
* java/lang/Win32Process.java (destroy): Declare as native. * java/lang/Win32Process.java (destroy): Declare as native.
......
/* SHA1PRNG.java --- Secure Random SPI SHA1PRNG /* SHA1PRNG.java --- Secure Random SPI SHA1PRNG
Copyright (C) 1999, 2001 Free Software Foundation, Inc. Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath. This file is part of GNU Classpath.
...@@ -51,27 +51,22 @@ public class SHA1PRNG extends SecureRandomSpi implements Serializable ...@@ -51,27 +51,22 @@ public class SHA1PRNG extends SecureRandomSpi implements Serializable
byte data[]; byte data[];
int seedpos; int seedpos;
int datapos; int datapos;
private boolean seeded = false; // set to true when we seed this
public SHA1PRNG() public SHA1PRNG()
{ {
try { try {
digest = MessageDigest.getInstance("SHA"); digest = MessageDigest.getInstance("SHA");
} catch ( NoSuchAlgorithmException nsae) { } catch ( NoSuchAlgorithmException nsae) {
System.out.println("Failed to find SHA Message Digest: " + nsae); // System.out.println("Failed to find SHA Message Digest: " + nsae);
nsae.printStackTrace(); // nsae.printStackTrace();
throw new InternalError ("no SHA implementation found");
} }
seed = new byte[20]; seed = new byte[20];
seedpos = 0; seedpos = 0;
data = new byte[40]; data = new byte[40];
datapos = 0; datapos = 20; // try to force hashing a first block
new Random().nextBytes(seed);
byte digestdata[];
digestdata = digest.digest( data );
System.arraycopy( digestdata, 0, data, 0, 20);
} }
public void engineSetSeed(byte[] seed) public void engineSetSeed(byte[] seed)
...@@ -84,6 +79,7 @@ public class SHA1PRNG extends SecureRandomSpi implements Serializable ...@@ -84,6 +79,7 @@ public class SHA1PRNG extends SecureRandomSpi implements Serializable
public void engineNextBytes(byte[] bytes) public void engineNextBytes(byte[] bytes)
{ {
ensureIsSeeded ();
int loc = 0; int loc = 0;
while (loc < bytes.length) while (loc < bytes.length)
{ {
...@@ -113,4 +109,18 @@ public class SHA1PRNG extends SecureRandomSpi implements Serializable ...@@ -113,4 +109,18 @@ public class SHA1PRNG extends SecureRandomSpi implements Serializable
engineNextBytes( tmp ); engineNextBytes( tmp );
return tmp; return tmp;
} }
private void ensureIsSeeded()
{
if (!seeded)
{
new Random(0L).nextBytes(seed);
byte[] digestdata = digest.digest(data);
System.arraycopy(digestdata, 0, data, 0, 20);
seeded = true;
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment