Author: j16sdiz
Date: 2008-05-04 09:27:20 +0000 (Sun, 04 May 2008)
New Revision: 19720

Modified:
   trunk/freenet/src/freenet/keys/ClientKSK.java
   trunk/freenet/src/freenet/keys/ClientSSK.java
   trunk/freenet/src/freenet/keys/InsertableClientSSK.java
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/fcp/ClientPut.java
Log:
return SHA-256 instance after use


Modified: trunk/freenet/src/freenet/keys/ClientKSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/ClientKSK.java       2008-05-04 09:26:44 UTC 
(rev 19719)
+++ trunk/freenet/src/freenet/keys/ClientKSK.java       2008-05-04 09:27:20 UTC 
(rev 19720)
@@ -35,6 +35,7 @@

        public static ClientKSK create(String keyword) {
                MessageDigest md256 = SHA256.getMessageDigest();
+               try {
                byte[] keywordHash;
                try {
                        keywordHash = md256.digest(keyword.getBytes("UTF-8"));
@@ -46,11 +47,13 @@
                DSAPublicKey pubKey = new DSAPublicKey(Global.DSAgroupBigA, 
privKey);
                byte[] pubKeyHash = md256.digest(pubKey.asBytes());
                try {
-                       SHA256.returnMessageDigest(md256);
                        return new ClientKSK(keyword, pubKeyHash, pubKey, 
privKey, keywordHash);
                } catch (MalformedURLException e) {
                        throw new Error(e);
                }
+               } finally {
+                       SHA256.returnMessageDigest(md256);
+               }
        }

 }

Modified: trunk/freenet/src/freenet/keys/ClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/ClientSSK.java       2008-05-04 09:26:44 UTC 
(rev 19719)
+++ trunk/freenet/src/freenet/keys/ClientSSK.java       2008-05-04 09:27:20 UTC 
(rev 19720)
@@ -51,6 +51,7 @@
                if(cryptoKey.length != CRYPTO_KEY_LENGTH)
                        throw new MalformedURLException("Decryption key wrong 
length: "+cryptoKey.length+" should be "+CRYPTO_KEY_LENGTH);
                MessageDigest md = SHA256.getMessageDigest();
+               try {
                if(pubKey != null) {
                        byte[] pubKeyAsBytes = pubKey.asBytes();
                        md.update(pubKeyAsBytes);
@@ -73,7 +74,9 @@
                } catch (UnsupportedCipherException e) {
                        throw new Error(e);
                }
+               } finally {
                SHA256.returnMessageDigest(md);
+               }
        }

        public ClientSSK(FreenetURI origURI) throws MalformedURLException {

Modified: trunk/freenet/src/freenet/keys/InsertableClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/InsertableClientSSK.java     2008-05-04 
09:26:44 UTC (rev 19719)
+++ trunk/freenet/src/freenet/keys/InsertableClientSSK.java     2008-05-04 
09:27:20 UTC (rev 19720)
@@ -85,6 +85,7 @@
                }
                // Pad it
         MessageDigest md256 = SHA256.getMessageDigest();
+        try {
         byte[] data;
         // First pad it
         if(compressedData.length != SSKBlock.DATA_LENGTH) {
@@ -174,7 +175,6 @@
                if(x != SSKBlock.TOTAL_HEADERS_LENGTH)
                        throw new IllegalStateException("Too long");
                try {
-                       SHA256.returnMessageDigest(md256);
                        return new ClientSSKBlock(data, headers, this, false); 
// FIXME set last arg to true to not verify
                } catch (SSKVerifyException e) {
                        IllegalStateException exception=new 
IllegalStateException("Impossible encoding error: "+e.getMessage());
@@ -182,6 +182,9 @@

                        throw exception;
                }
+        } finally {
+                       SHA256.returnMessageDigest(md256);
+               }
        }

        private byte[] truncate(byte[] bs, int len) {

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-05-04 
09:26:44 UTC (rev 19719)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-05-04 
09:27:20 UTC (rev 19720)
@@ -462,11 +462,9 @@
                // Does the packet match IV E( H(data) data ) ?
                PCFBMode pcfb = PCFBMode.create(authKey);
                int ivLength = pcfb.lengthIV();
-               MessageDigest md = SHA256.getMessageDigest();
                int digestLength = HASH_LENGTH;
                if(length < digestLength + ivLength + 5) {
                        if(logMINOR) Logger.minor(this, "Too short: "+length+" 
should be at least "+(digestLength + ivLength + 5));
-                       SHA256.returnMessageDigest(md);
                        return false;
                }
                // IV at the beginning
@@ -486,7 +484,6 @@
                if(logMINOR) Logger.minor(this, "Data length: "+dataLength+" (1 
= "+byte1+" 2 = "+byte2+ ')');
                if(dataLength > length - (ivLength+hash.length+2)) {
                        if(logMINOR) Logger.minor(this, "Invalid data length 
"+dataLength+" ("+(length - (ivLength+hash.length+2))+") in tryProcessAuth");
-                       SHA256.returnMessageDigest(md);
                        return false;
                }
                // Decrypt the data
@@ -494,9 +491,7 @@
                System.arraycopy(buf, dataStart, payload, 0, dataLength);
                pcfb.blockDecipher(payload, 0, payload.length);

-               md.update(payload);
-               byte[] realHash = md.digest();
-               SHA256.returnMessageDigest(md); md = null;
+               byte[] realHash = SHA256.digest(payload);

                if(Arrays.equals(realHash, hash)) {
                        // Got one

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2008-05-04 09:26:44 UTC (rev 
19719)
+++ trunk/freenet/src/freenet/node/Node.java    2008-05-04 09:27:20 UTC (rev 
19720)
@@ -2608,6 +2608,7 @@
                        DSAPublicKey key2 = (DSAPublicKey) cachedPubKeys.get(w);
                        if((key2 != null) && !key2.equals(key)) {
                                MessageDigest md256 = SHA256.getMessageDigest();
+                               try {
                                byte[] hashCheck = md256.digest(key.asBytes());
                                if(Arrays.equals(hashCheck, hash)) {
                                        Logger.error(this, "Hash is 
correct!!!");
@@ -2623,6 +2624,9 @@
                                } else {
                                        Logger.error(this, "New hash is wrong");
                                }
+                               } finally {
+                                       SHA256.returnMessageDigest(md256);
+                               }
                                throw new IllegalArgumentException("Wrong 
hash?? Already have different key with same hash!");
                        }
                        cachedPubKeys.push(w, key);

Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java   2008-05-04 09:26:44 UTC 
(rev 19719)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java   2008-05-04 09:27:20 UTC 
(rev 19720)
@@ -228,6 +228,7 @@
                        MessageDigest md = SHA256.getMessageDigest();
                        md.reset();
                        try {
+                       try {
                                md.update(salt.getBytes("UTF-8"));
                        } catch (UnsupportedEncodingException e) {}
                        try {
@@ -239,8 +240,10 @@
                                Logger.error(this, "Got IOE: " +e.getMessage(), 
e);
                                throw new 
MessageInvalidException(ProtocolErrorMessage.COULD_NOT_READ_FILE, "Unable to 
access file: "+e, identifier, global);
                        }
-                       final byte[] foundHash = md.digest();
-                       SHA256.returnMessageDigest(md);
+                       foundHash = md.digest();
+                       } finally {
+                               SHA256.returnMessageDigest(md);
+                       }

                        if(logMINOR) Logger.minor(this, "FileHash result : we 
found " + Base64.encode(foundHash) + " and were given " + 
Base64.encode(saltedHash) + '.');



Reply via email to