Author: j16sdiz
Date: 2008-05-02 09:44:53 +0000 (Fri, 02 May 2008)
New Revision: 19673
Modified:
trunk/freenet/src/freenet/crypt/SHA256.java
Log:
remove unused method (all our method now use JVM provided SHA-256)
Modified: trunk/freenet/src/freenet/crypt/SHA256.java
===================================================================
--- trunk/freenet/src/freenet/crypt/SHA256.java 2008-05-02 03:50:03 UTC (rev
19672)
+++ trunk/freenet/src/freenet/crypt/SHA256.java 2008-05-02 09:44:53 UTC (rev
19673)
@@ -43,264 +43,17 @@
import freenet.node.Node;
import freenet.node.NodeInitException;
-import freenet.support.HexUtil;
import freenet.support.Logger;
import freenet.support.io.Closer;
/**
* @author Jeroen C. van Gelderen (gelderen at cryptix.org)
*/
-public class SHA256 implements Digest {
-
-// Constants
-//...........................................................................
+public class SHA256 {
/** Size (in bytes) of this hash */
private static final int HASH_SIZE = 32;
- private static final int BLOCK_SIZE = 64;
- /** 64 byte buffer */
- private final byte[] buf;
- /** Buffer offset */
- private int bufOff;
- /** Number of bytes hashed 'till now. */
- private long byteCount;
- /** Round constants */
- private static final int K[] = {
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
- 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
- 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
- 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
- 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
- 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
- 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
- 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
- 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
- };
-// Instance variables
-//...........................................................................
- /** 8 32-bit words (interim result) */
- private final int[] context;
- /** Expanded message block buffer */
- private final int[] buffer;
-// Constructors
-//...........................................................................
- public SHA256() {
- this.context = new int[8];
- this.buffer = new int[64];
- this.buf = new byte[64];
- coreReset();
- }
-
-// Concreteness
-//...........................................................................
- protected void coreDigest(byte[] buf, int off) {
- for(int i = 0; i < context.length; i++)
- for(int j = 0; j < 4; j++)
- buf[off + (i * 4 + (3 - j))] = (byte)
(context[i] >>> (8 * j));
- }
-
- protected void coreReset() {
- this.bufOff = 0;
- this.byteCount = 0;
-
- // initial values
- context[0] = 0x6a09e667;
- context[1] = 0xbb67ae85;
- context[2] = 0x3c6ef372;
- context[3] = 0xa54ff53a;
- context[4] = 0x510e527f;
- context[5] = 0x9b05688c;
- context[6] = 0x1f83d9ab;
- context[7] = 0x5be0cd19;
- }
-
- protected void coreUpdate(byte[] block, int offset) {
-
- int[] W = buffer;
-
- // extract the bytes into our working buffer
- for(int i = 0; i < 16; i++)
- W[i] = (block[offset++]) << 24 |
- (block[offset++] & 0xFF) << 16 |
- (block[offset++] & 0xFF) << 8 |
- (block[offset++] & 0xFF);
-
- // expand
- for(int i = 16; i < 64; i++)
- W[i] = sig1(W[i - 2]) + W[i - 7] + sig0(W[i - 15]) +
W[i - 16];
-
- int a = context[0];
- int b = context[1];
- int c = context[2];
- int d = context[3];
- int e = context[4];
- int f = context[5];
- int g = context[6];
- int h = context[7];
-
- // run 64 rounds
- for(int i = 0; i < 64; i++) {
- int T1 = h + Sig1(e) + Ch(e, f, g) + K[i] + W[i];
- int T2 = Sig0(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
- }
-
- // merge
- context[0] += a;
- context[1] += b;
- context[2] += c;
- context[3] += d;
- context[4] += e;
- context[5] += f;
- context[6] += g;
- context[7] += h;
- }
-
- private final int Ch(int x, int y, int z) {
- return (x & y) ^ (~x & z);
- }
-
- private final int Maj(int x, int y, int z) {
- return (x & y) ^ (x & z) ^ (y & z);
- }
-
- private final int Sig0(int x) {
- return S(2, x) ^ S(13, x) ^ S(22, x);
- }
-
- private final int Sig1(int x) {
- return S(6, x) ^ S(11, x) ^ S(25, x);
- }
-
- private final int sig0(int x) {
- return S(7, x) ^ S(18, x) ^ R(3, x);
- }
-
- private final int sig1(int x) {
- return S(17, x) ^ S(19, x) ^ R(10, x);
- }
-
- private final int R(int off, int x) {
- return (x >>> off);
- }
-
- private final int S(int off, int x) {
- return (x >>> off) | (x << (32 - off));
- }
-
- private int privateDigest(byte[] buf, int offset, int len, boolean
reset) {
- //#ASSERT(this.bufOff < BLOCK_SIZE);
-
- this.buf[this.bufOff++] = (byte) 0x80;
-
- int lenOfBitLen = 8;
- int C = BLOCK_SIZE - lenOfBitLen;
- if(this.bufOff > C) {
- while(this.bufOff < BLOCK_SIZE) {
- this.buf[this.bufOff++] = (byte) 0x00;
- }
-
- coreUpdate(this.buf, 0);
- this.bufOff = 0;
- }
-
- while(this.bufOff < C) {
- this.buf[this.bufOff++] = (byte) 0x00;
- }
-
- long bitCount = byteCount * 8;
-
- for(int i = 56; i >= 0; i -= 8)
- this.buf[this.bufOff++] = (byte) (bitCount >>> (i));
-
- coreUpdate(this.buf, 0);
- coreDigest(buf, offset);
-
- if(reset)
- coreReset();
- return HASH_SIZE;
- }
-
-
- // Freenet Digest interface methods
/**
- * retrieve the value of a hash, by filling the provided int[] with
- * n elements of the hash (where n is the bitlength of the hash/32)
- * @param digest int[] into which to place n elements
- * @param offset index of first of the n elements
- **/
- public void extract(int[] digest, int offset) {
- System.arraycopy(context, 0, digest, offset, context.length);
- }
-
- /**
- * Add one byte to the digest. When this is implemented
- * all of the abstract class methods end up calling
- * this method for types other than bytes.
- * @param b byte to add
- */
- public void update(byte b) {
-
- byteCount += 1;
- buf[bufOff++] = b;
- if(bufOff == BLOCK_SIZE) {
- coreUpdate(buf, 0);
- bufOff = 0;
- }
-
- }
-
- /**
- * Add many bytes to the digest.
- * @param input byte data to add
- * @param offset start byte
- * @param length number of bytes to hash
- */
- public void update(byte[] input, int offset, int length) {
- byteCount += length;
-
- int todo;
- while(length >= (todo = BLOCK_SIZE - this.bufOff)) {
- System.arraycopy(input, offset, this.buf, this.bufOff,
todo);
- coreUpdate(this.buf, 0);
- length -= todo;
- offset += todo;
- this.bufOff = 0;
- }
-
- System.arraycopy(input, offset, this.buf, this.bufOff, length);
- bufOff += length;
- }
-
- public void update(byte[] data) {
- update(data, 0, data.length);
- }
-
- /**
- * Returns the completed digest, reinitializing the hash function;
- * @return the byte array result
- */
- public byte[] digest() {
- byte[] tmp = new byte[HASH_SIZE];
- privateDigest(tmp, 0, HASH_SIZE, true);
- return tmp;
- }
-
- /**
* It won't reset the Message Digest for you!
* @param InputStream
* @param MessageDigest
@@ -321,39 +74,6 @@
}
}
- public static byte[] hash(InputStream is) throws IOException {
- MessageDigest md = SHA256.getMessageDigest();
- md.reset();
- hash(is, md);
- byte[] result = md.digest();
- SHA256.returnMessageDigest(md);
-
- return result;
- }
-
- /**
- * Write the completed digest into the given buffer.
- * @param reset If true, the hash function is reinitialized
- */
- public void digest(boolean reset, byte[] buffer, int offset) {
- privateDigest(buf, offset, buffer.length, true);
- }
-
- /**
- * Return the hash size of this digest in bits
- */
- public final int digestSize() {
- return HASH_SIZE << 3;
- }
-
- public String doHash(String s) {
- coreReset();
- for(int i = 0; i < s.length(); i++) {
- this.update((byte) s.charAt(i));
- }
- byte[] d = digest();
- return HexUtil.bytesToHex(d);
- }
static private final Vector digests = new Vector();
/**
@@ -396,28 +116,7 @@
return hash;
}
- public static void main(String[] args) {
- byte[] buffer = new byte[1024];
- SHA256 s = new SHA256();
- try {
- while(true) {
- int rc = System.in.read(buffer);
- if(rc > 0)
- s.update(buffer, 0, rc);
- else
- break;
- }
- } catch(java.io.IOException e) {
- }
- byte[] rv = s.digest();
- System.out.println(HexUtil.bytesToHex(rv));
- }
-
public static int getDigestLength() {
return HASH_SIZE;
}
-
- public static Digest getInstance() {
- return new SHA256();
- }
}