Author: toad
Date: 2007-03-24 15:31:51 +0000 (Sat, 24 Mar 2007)
New Revision: 12310

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
Log:
Fix the hash recycling bug (I think). Also simplify some code using hashes.

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-03-24 
15:10:05 UTC (rev 12309)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-03-24 
15:31:51 UTC (rev 12310)
@@ -171,10 +171,10 @@
         PCFBMode pcfb = PCFBMode.create(authKey);
         int ivLength = pcfb.lengthIV();
         MessageDigest md = SHA256.getMessageDigest();
-        int digestLength = md.getDigestLength();
-        SHA256.returnMessageDigest(md);
+        int digestLength = HASH_LENGTH;
         if(length < digestLength + ivLength + 4) {
             if(logMINOR) Logger.minor(this, "Too short: "+length+" should be 
at least "+(digestLength + ivLength + 4));
+            SHA256.returnMessageDigest(md);
             return false;
         }
         // IV at the beginning
@@ -194,6 +194,7 @@
         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
@@ -203,6 +204,7 @@

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

         if(Arrays.equals(realHash, hash)) {
             // Got one
@@ -545,9 +547,7 @@
         System.arraycopy(payload, 3+ivLength+HASH_LENGTH, data, 0, dataLength);
         pcfb.blockDecipher(data, 0, dataLength);
         // Check the hash
-        MessageDigest md = SHA256.getMessageDigest();
-        byte[] realHash = md.digest(data);
-        SHA256.returnMessageDigest(md); md = null;
+        byte[] realHash = SHA256.digest(data);
         if(Arrays.equals(realHash, hash)) {
             // Success!
             long bootID = Fields.bytesToLong(data);


Reply via email to