diff options
| author | Aaron M. Renn <arenn@urbanophile.com> | 1999-07-18 21:36:51 +0000 |
|---|---|---|
| committer | Aaron M. Renn <arenn@urbanophile.com> | 1999-07-18 21:36:51 +0000 |
| commit | 11a56217114c8a391aa3d8bd274df8553d03633f (patch) | |
| tree | 3ca4754241e8759062da193168ff13c0b9c752c3 /gnu/java/security/provider/SHA1PRNG.java | |
| parent | e9364fcf79b57d3c4f373ba618eea9ae9c022e13 (diff) | |
| download | classpath-11a56217114c8a391aa3d8bd274df8553d03633f.tar.gz | |
Initial checkin of Mark Benvenuto's security code
Diffstat (limited to 'gnu/java/security/provider/SHA1PRNG.java')
| -rw-r--r-- | gnu/java/security/provider/SHA1PRNG.java | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/gnu/java/security/provider/SHA1PRNG.java b/gnu/java/security/provider/SHA1PRNG.java new file mode 100644 index 000000000..cef460c54 --- /dev/null +++ b/gnu/java/security/provider/SHA1PRNG.java @@ -0,0 +1,100 @@ +/* SHA1PRNG.java --- Secure Random SPI SHA1PRNG
+
+ Copyright (c) 1999 by Free Software Foundation, Inc.
+ Written by Mark Benvenuto <ivymccough@worldnet.att.net>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation, version 2. (see COPYING.LIB)
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. */
+
+import java.util.Random;
+import java.security.SecureRandomSpi;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+//import SecureRandomSpi;
+import java.io.Serializable;
+
+public class SHA1PRNG extends SecureRandomSpi implements Serializable
+{
+MessageDigest digest;
+byte seed[];
+byte data[];
+int seedpos;
+int datapos;
+
+public SHA1PRNG()
+{
+ try {
+ digest = MessageDigest.getInstance("SHA");
+ } catch ( NoSuchAlgorithmException nsae) {
+ System.out.println("Failed to find SHA Message Digest: " + nsae);
+ nsae.printStackTrace();
+ }
+
+ seed = new byte[20];
+ seedpos = 0;
+ data = new byte[40];
+ datapos = 0;
+
+ new Random().nextBytes(seed);
+
+ byte digestdata[];
+ digestdata = digest.digest( data );
+ System.arraycopy( digestdata, 0, data, 0, 20);
+
+}
+
+public void engineSetSeed(byte[] seed)
+{
+ for(int i = 0; i < seed.length; i++)
+ this.seed[seedpos++ % 20] ^= seed[i];
+ seedpos %= 20;
+
+}
+
+public void engineNextBytes(byte[] bytes)
+{
+
+ if( bytes.length < (20 - datapos) ) {
+ System.arraycopy( bytes, 0, data, datapos, bytes.length);
+ datapos += bytes.length;
+ return;
+ }
+
+ int i, blen = bytes.length, bpos = 0;
+ byte digestdata[];
+ while( bpos < blen ) {
+ i = 20 - datapos;
+ System.arraycopy( bytes, bpos, data, datapos, i);
+ bpos += i;
+ datapos += i;
+ if( datapos >= 20) {
+ //System.out.println( (0 + 20) + "\n" + (20 + 20) );
+ System.arraycopy( seed, 0, data, 20, 20);
+ digestdata = digest.digest( data );
+ System.arraycopy( digestdata, 0, data, 0, 20);
+ datapos = 0;
+ }
+ }
+
+}
+
+public byte[] engineGenerateSeed(int numBytes)
+{
+ byte tmp[] = new byte[numBytes];
+
+ engineNextBytes( tmp );
+ return tmp;
+}
+
+
+}
|
