Author: nextgens
Date: 2008-02-07 12:38:16 +0000 (Thu, 07 Feb 2008)
New Revision: 17652

Modified:
   trunk/freenet/src/freenet/crypt/HMAC.java
   trunk/freenet/src/freenet/crypt/SHA256.java
Log:
indent

Modified: trunk/freenet/src/freenet/crypt/HMAC.java
===================================================================
--- trunk/freenet/src/freenet/crypt/HMAC.java   2008-02-07 12:37:38 UTC (rev 
17651)
+++ trunk/freenet/src/freenet/crypt/HMAC.java   2008-02-07 12:38:16 UTC (rev 
17652)
@@ -15,109 +15,117 @@
  * in the draft FIPS standard.
  */
 public class HMAC {
-    protected static final int B=64;
-    protected static byte[] ipad=new byte[B];
-    protected static byte[] opad=new byte[B];

-    static {
-       for (int i=0; i<B; i++) {
-           ipad[i]=(byte)0x36;
-           opad[i]=(byte)0x5c;
+       protected static final int B = 64;
+       protected static byte[] ipad = new byte[B];
+       protected static byte[] opad = new byte[B];
+
+       static {
+               for(int i = 0; i < B; i++) {
+                       ipad[i] = (byte) 0x36;
+                       opad[i] = (byte) 0x5c;
+               }
        }
-    }
+       protected MessageDigest d;

-    protected MessageDigest d;
-    
-    public HMAC(MessageDigest md) {
-           this.d = md;
-    }
+       public HMAC(MessageDigest md) {
+               this.d = md;
+       }

-    public boolean verify(byte[] K, byte[] text, byte[] mac) {
-       byte[] mac2=mac(K, text, mac.length);
-       return Arrays.equals(mac, mac2);
-    }
+       public boolean verify(byte[] K, byte[] text, byte[] mac) {
+               byte[] mac2 = mac(K, text, mac.length);
+               return Arrays.equals(mac, mac2);
+       }

-    public byte[] mac(byte[] K, byte[] text, int macbytes) {
-       byte[] K0=null;
+       public byte[] mac(byte[] K, byte[] text, int macbytes) {
+               byte[] K0 = null;

-       if (K.length==B) // Step 1
-           K0=K;
-       else {
-           // Step 2
-           if (K.length > B) { 
-               K=Util.hashBytes(d, K);
-           }
-           
-           if (K.length < B) { // Step 3
-               K0=new byte[B];
-               System.arraycopy(K, 0, K0, 0, K.length);
-           }  
-       }
+               if(K.length == B) // Step 1
+                       K0 = K;
+               else {
+                       // Step 2
+                       if(K.length > B)
+                               K = Util.hashBytes(d, K);

-       // Step 4
-       byte[] IS1=Util.xor(K0, ipad);
-       
-       // Step 5/6
-       d.update(IS1);
-       d.update(text);
-       IS1=d.digest();
-       
-       // Step 7
-       byte[] IS2=Util.xor(K0, opad);
+                       if(K.length < B) { // Step 3
+                               K0 = new byte[B];
+                               System.arraycopy(K, 0, K0, 0, K.length);
+                       }
+               }

-       // Step 8/9
-       d.update(IS2);
-       d.update(IS1);
-       IS1=d.digest();
-       
-       // Step 10
-       if (macbytes == IS1.length) 
-           return IS1;
-       else {
-           byte[] rv=new byte[macbytes];
-           System.arraycopy(IS1, 0, rv, 0, Math.min(rv.length, IS1.length));
-           return rv;
+               // Step 4
+               byte[] IS1 = Util.xor(K0, ipad);
+
+               // Step 5/6
+               d.update(IS1);
+               d.update(text);
+               IS1 = d.digest();
+
+               // Step 7
+               byte[] IS2 = Util.xor(K0, opad);
+
+               // Step 8/9
+               d.update(IS2);
+               d.update(IS1);
+               IS1 = d.digest();
+
+               // Step 10
+               if(macbytes == IS1.length)
+                       return IS1;
+               else {
+                       byte[] rv = new byte[macbytes];
+                       System.arraycopy(IS1, 0, rv, 0, Math.min(rv.length, 
IS1.length));
+                       return rv;
+               }
        }
-    }

-    public static void main(String[] args) throws UnsupportedEncodingException 
{
-       HMAC s = null;
-       try { s = new HMAC(MessageDigest.getInstance("SHA1")); } catch 
(NoSuchAlgorithmException e) {}
-       byte[] key=new byte[20];
-       System.err.println("20x0b, 'Hi There':");
-       byte[] text;
-       text = "Hi There".getBytes("UTF-8");
-       
-       for (int i=0; i<key.length; i++) key[i]=(byte)0x0b;
+       public static void main(String[] args) throws 
UnsupportedEncodingException {
+               HMAC s = null;
+               try {
+                       s = new HMAC(MessageDigest.getInstance("SHA1"));
+               } catch(NoSuchAlgorithmException e) {
+               }
+               byte[] key = new byte[20];
+               System.err.println("20x0b, 'Hi There':");
+               byte[] text;
+               text = "Hi There".getBytes("UTF-8");

-       byte[] mv=s.mac(key, text, 20);
-       System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));
+               for(int i = 0; i < key.length; i++)
+                       key[i] = (byte) 0x0b;

-       System.err.println("20xaa, 50xdd:");
-       for (int i=0; i<key.length; i++) key[i]=(byte)0xaa;
-       text=new byte[50];
-       for (int i=0; i<text.length; i++) text[i]=(byte)0xdd;
-       mv=s.mac(key, text, 20);
-       System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));
+               byte[] mv = s.mac(key, text, 20);
+               System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));

-       key=new byte[25];
-       System.err.println("25x[i+1], 50xcd:");
-       for (int i=0; i<key.length; i++) key[i]=(byte)(i+1);
-       for (int i=0; i<text.length; i++) text[i]=(byte)0xcd;
-       mv=s.mac(key, text, 20);
-       System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));
+               System.err.println("20xaa, 50xdd:");
+               for(int i = 0; i < key.length; i++)
+                       key[i] = (byte) 0xaa;
+               text = new byte[50];
+               for(int i = 0; i < text.length; i++)
+                       text[i] = (byte) 0xdd;
+               mv = s.mac(key, text, 20);
+               System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));

-       key=new byte[20];
-       System.err.println("20x0c, 'Test With Truncation':");
-       for (int i=0; i<key.length; i++) key[i]=(byte)0x0c;
-       text="Test With Truncation".getBytes("UTF-8");
-       mv=s.mac(key, text, 20);
-       System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));
-       mv=s.mac(key, text, 12);
-       System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));
+               key = new byte[25];
+               System.err.println("25x[i+1], 50xcd:");
+               for(int i = 0; i < key.length; i++)
+                       key[i] = (byte) (i + 1);
+               for(int i = 0; i < text.length; i++)
+                       text[i] = (byte) 0xcd;
+               mv = s.mac(key, text, 20);
+               System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));

-    }
+               key = new byte[20];
+               System.err.println("20x0c, 'Test With Truncation':");
+               for(int i = 0; i < key.length; i++)
+                       key[i] = (byte) 0x0c;
+               text = "Test With Truncation".getBytes("UTF-8");
+               mv = s.mac(key, text, 20);
+               System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));
+               mv = s.mac(key, text, 12);
+               System.out.println(HexUtil.bytesToHex(mv, 0, mv.length));

+       }
+
        public static byte[] macWithSHA256(byte[] K, byte[] text, int macbytes) 
{
                MessageDigest sha256 = null;
                try {

Modified: trunk/freenet/src/freenet/crypt/SHA256.java
===================================================================
--- trunk/freenet/src/freenet/crypt/SHA256.java 2008-02-07 12:37:38 UTC (rev 
17651)
+++ trunk/freenet/src/freenet/crypt/SHA256.java 2008-02-07 12:38:16 UTC (rev 
17652)
@@ -1,20 +1,16 @@
 /**
-  Cryptix General Licence
- 
-  Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 
-  The Cryptix Foundation Limited. All rights reserved.
-
+Cryptix General Licence
+Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 
+The Cryptix Foundation Limited. All rights reserved.
 Redistribution and use in source and binary forms, with or without 
 modification, are permitted provided that the following conditions 
 are met:
-
 1. Redistributions of source code must retain the copyright notice, 
-   this list of conditions and the following disclaimer.
+this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above copyright 
-   notice, this list of conditions and the following disclaimer in 
-   the documentation and/or other materials provided with the 
-   distribution.
-
+notice, this list of conditions and the following disclaimer in 
+the documentation and/or other materials provided with the 
+distribution.
 THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION LIMITED ``AS IS'' 
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
@@ -27,7 +23,6 @@
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 THE POSSIBILITY OF SUCH DAMAGE.
-
  *
  * Copyright (C) 2000 The Cryptix Foundation Limited. All rights reserved.
  *
@@ -36,7 +31,6 @@
  * received a copy of the Cryptix General Licence along with this library;
  * if not, you can download a copy from http://www.cryptix.org/ .
  */
-
 package freenet.crypt;

 import java.io.IOException;
@@ -60,320 +54,322 @@

 // Constants
 //...........................................................................
-
-    /** 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
-    };
-
-
+       /** 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;

-    /** 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();
+       }

-    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 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 coreReset() {
-        this.bufOff    = 0;
-        this.byteCount = 0;
+       protected void coreUpdate(byte[] block, int offset) {

-        // 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;
-    }
+               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);

-    protected void coreUpdate(byte[] block, int offset) {
+               // 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[] W = buffer;
+               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];

-        // 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);
+               // 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;
+               }

-        // expand
-        for( int i=16; i<64; i++ )
-            W[i] = sig1(W[i-2]) + W[i-7] + sig0(W[i-15]) + W[i-16];
+               // 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;
+       }

-        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];
+       private final int Ch(int x, int y, int z) {
+               return (x & y) ^ (~x & z);
+       }

-        // 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;
-        }
+       private final int Maj(int x, int y, int z) {
+               return (x & y) ^ (x & z) ^ (y & z);
+       }

-        // 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 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 Ch(int x, int y, int z) { return (x&y)^(~x&z); }
+       private final int sig0(int x) {
+               return S(7, x) ^ S(18, x) ^ R(3, x);
+       }

-    private final int Maj(int x, int y, int z) { return (x&y)^(x&z)^(y&z); }
+       private final int sig1(int x) {
+               return S(17, x) ^ S(19, x) ^ R(10, x);
+       }

-    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 R(int off, int x) { return (x >>> off); }
-    private final int S(int off, int x) { return (x>>>off) | (x<<(32-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);
+       private int privateDigest(byte[] buf, int offset, int len, boolean 
reset) {
+               //#ASSERT(this.bufOff < BLOCK_SIZE);

-        this.buf[this.bufOff++] = (byte)0x80;
+               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;
+               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;
-        }
+                       coreUpdate(this.buf, 0);
+                       this.bufOff = 0;
+               }

-        while(this.bufOff < C)
-            this.buf[this.bufOff++] = (byte)0x00;
+               while(this.bufOff < C) {
+                       this.buf[this.bufOff++] = (byte) 0x00;
+               }

-        long bitCount = byteCount * 8;
+               long bitCount = byteCount * 8;

-       for(int i=56; i>=0; i-=8)
-           this.buf[this.bufOff++] = (byte)(bitCount >>> (i) );
+               for(int i = 56; i >= 0; i -= 8)
+                       this.buf[this.bufOff++] = (byte) (bitCount >>> (i));

-        coreUpdate(this.buf, 0);
-        coreDigest(buf, offset);
+               coreUpdate(this.buf, 0);
+               coreDigest(buf, offset);

-        if (reset) coreReset();
-        return HASH_SIZE;
-    }
+               if(reset)
+                       coreReset();
+               return HASH_SIZE;
+       }


-    // Freenet Digest interface methods
+       // 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);
+       }

-    /**
-     * 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) {

-     /**
-     * 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;
-        }
+               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;
+       /**
+        * 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;
-        }
+               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;
-    }
+               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
-     * @return
-     * @throws IOException
-     */
+       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
+        * @return
+        * @throws IOException
+        */
        public static void hash(InputStream is, MessageDigest md) throws 
IOException {
                try {
                        byte[] buf = new byte[4096];
                        int readBytes = is.read(buf);
                        while(readBytes > -1) {
-                                       md.update(buf, 0, readBytes);
-                                       readBytes = is.read(buf);
+                               md.update(buf, 0, readBytes);
+                               readBytes = is.read(buf);
                        }
                        is.close();
                } finally {
                        Closer.close(is);
                }
        }
-       
+
        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);
+       }

-    /**
-     * 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;
+       }

-    /**
-     * 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();

-    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();
-    
-    /**
+       /**
         * Create a new SHA-256 MessageDigest
         * Either succeed or stop the node.
         */
        public synchronized static MessageDigest getMessageDigest() {
-           try {
-               if(!digests.isEmpty()) return (MessageDigest) 
digests.remove(digests.size()-1);
-               return MessageDigest.getInstance("SHA-256");
-           } catch (NoSuchAlgorithmException e2) {
-               //TODO: maybe we should point to a HOWTO for freejvms
-               Logger.error(Node.class, "Check your JVM settings especially 
the JCE!"+e2);
-               System.err.println("Check your JVM settings especially the 
JCE!"+e2);
-               e2.printStackTrace();
+               try {
+                       if(!digests.isEmpty())
+                               return (MessageDigest) 
digests.remove(digests.size() - 1);
+                       return MessageDigest.getInstance("SHA-256");
+               } catch(NoSuchAlgorithmException e2) {
+                       //TODO: maybe we should point to a HOWTO for freejvms
+                       Logger.error(Node.class, "Check your JVM settings 
especially the JCE!" + e2);
+                       System.err.println("Check your JVM settings especially 
the JCE!" + e2);
+                       e2.printStackTrace();
                }
                WrapperManager.stop(NodeInitException.EXIT_CRAPPY_JVM);
                throw new RuntimeException();
@@ -384,10 +380,11 @@
         * Must be SHA-256 !
         */
        public synchronized static void returnMessageDigest(MessageDigest 
md256) {
-               if(md256 == null) return;
+               if(md256 == null)
+                       return;
                String algo = md256.getAlgorithm();
                if(!(algo.equals("SHA-256") || algo.equals("SHA256")))
-                       throw new IllegalArgumentException("Should be SHA-256 
but is "+algo);
+                       throw new IllegalArgumentException("Should be SHA-256 
but is " + algo);
                md256.reset();
                digests.add(md256);
        }
@@ -400,19 +397,21 @@
        }

        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));
-    }
+               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;


Reply via email to