Author: toad
Date: 2007-03-20 21:16:49 +0000 (Tue, 20 Mar 2007)
New Revision: 12240

Modified:
   trunk/freenet/src/freenet/crypt/SHA256.java
   trunk/freenet/src/freenet/keys/InsertableClientSSK.java
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/LocationManager.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/support/io/BucketTools.java
Log:
Don't reuse SHA256's in finally {} blocks, they may not be fit to be reused.
Use SHA256.digest more.

Modified: trunk/freenet/src/freenet/crypt/SHA256.java
===================================================================
--- trunk/freenet/src/freenet/crypt/SHA256.java 2007-03-20 21:15:35 UTC (rev 
12239)
+++ trunk/freenet/src/freenet/crypt/SHA256.java 2007-03-20 21:16:49 UTC (rev 
12240)
@@ -380,5 +380,9 @@
        System.out.println(HexUtil.bytesToHex(rv));
     }

+       public static int getDigestLength() {
+               return 32;
+       }
+

 }

Modified: trunk/freenet/src/freenet/keys/InsertableClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/InsertableClientSSK.java     2007-03-20 
21:15:35 UTC (rev 12239)
+++ trunk/freenet/src/freenet/keys/InsertableClientSSK.java     2007-03-20 
21:16:49 UTC (rev 12240)
@@ -211,10 +211,8 @@
                DSAGroup g = Global.DSAgroupBigA;
                DSAPrivateKey privKey = new DSAPrivateKey(g, r);
                DSAPublicKey pubKey = new DSAPublicKey(g, privKey);
-               MessageDigest md = SHA256.getMessageDigest();
                try {
-                       byte[] pkHash = md.digest(pubKey.asBytes());
-                       SHA256.returnMessageDigest(md);
+                       byte[] pkHash = SHA256.digest(pubKey.asBytes());
                        return new InsertableClientSSK(docName, pkHash, pubKey, 
privKey, ckey, 
                                        Key.ALGO_AES_PCFB_256_SHA256);
                } catch (MalformedURLException e) {

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-03-20 
21:15:35 UTC (rev 12239)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-03-20 
21:16:49 UTC (rev 12240)
@@ -475,8 +475,7 @@
         int paddingLength = node.random.nextInt(100);
         byte[] iv = new byte[pcfb.lengthIV()];
         node.random.nextBytes(iv);
-        MessageDigest md = SHA256.getMessageDigest();
-        byte[] hash = md.digest(output);
+        byte[] hash = SHA256.digest(output);
         if(logMINOR) Logger.minor(this, "Data hash: 
"+HexUtil.bytesToHex(hash));
         byte[] data = new byte[iv.length + hash.length + 2 /* length */ + 
output.length + paddingLength];
         pcfb.reset(iv);
@@ -498,7 +497,6 @@
                        Logger.error(this, "Tried to send auth packet to local 
address: "+replyTo+" for "+pn);
                }
                if(logMINOR) Logger.minor(this, "Sending auth packet (long) to 
"+replyTo+" - size "+data.length+" data length: "+output.length);
-               SHA256.returnMessageDigest(md);
      }

     private void sendPacket(byte[] data, Peer replyTo, PeerNode pn, int 
alreadyReportedBytes) throws LocalAddressException {
@@ -722,7 +720,7 @@
         // Verify
         tracker.pn.verified(tracker);

-        for(int i=0;i<md.getDigestLength();i++) {
+        for(int i=0;i<HASH_LENGTH;i++) {
             packetHash[i] ^= buf[offset+i];
         }
         if(logMINOR) Logger.minor(this, "Contributing entropy");

Modified: trunk/freenet/src/freenet/node/LocationManager.java
===================================================================
--- trunk/freenet/src/freenet/node/LocationManager.java 2007-03-20 21:15:35 UTC 
(rev 12239)
+++ trunk/freenet/src/freenet/node/LocationManager.java 2007-03-20 21:16:49 UTC 
(rev 12240)
@@ -340,12 +340,12 @@
                if(logMINOR) Logger.minor(this, "Didn't swap: "+myLoc+" <-> 
"+hisLoc+" - "+uid);
                 noSwaps++;
             }
+            SHA256.returnMessageDigest(md);
         } catch (Throwable t) {
             Logger.error(this, "Caught "+t, t);
         } finally {
             unlock();
             removeRecentlyForwardedItem(item);
-            SHA256.returnMessageDigest(md);
         }
         }
     }
@@ -363,7 +363,6 @@
         public void run() {
             long uid = r.nextLong();            
             if(!lock()) return;
-            MessageDigest md = SHA256.getMessageDigest();
             try {
                 startedSwaps++;
                 // We can't lock friends_locations, so lets just
@@ -378,7 +377,7 @@
                     myValueLong[i+2] = Double.doubleToLongBits(friendLocs[i]);
                 byte[] myValue = Fields.longsToBytes(myValueLong);

-                byte[] myHash = md.digest(myValue);
+                byte[] myHash = SHA256.digest(myValue);

                 Message m = DMT.createFNPSwapRequest(uid, myHash, 6);

@@ -468,7 +467,7 @@

                 // First does it verify?

-                byte[] rehash = md.digest(hisBuf);
+                byte[] rehash = SHA256.digest(hisBuf);

                 if(!java.util.Arrays.equals(rehash, hisHash)) {
                     Logger.error(this, "Bad hash in SwapComplete - malicious 
node? on "+uid);
@@ -520,7 +519,6 @@
                 unlock();
                 if(item != null)
                     removeRecentlyForwardedItem(item);
-                SHA256.returnMessageDigest(md);
             }
         }


Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2007-03-20 21:15:35 UTC (rev 
12239)
+++ trunk/freenet/src/freenet/node/Node.java    2007-03-20 21:16:49 UTC (rev 
12240)
@@ -573,10 +573,8 @@
                } catch (IllegalBase64Exception e2) {
                        throw new IOException();
                }
-               MessageDigest md = SHA256.getMessageDigest();
-               identityHash = md.digest(myIdentity);
-               identityHashHash = md.digest(identityHash);
-               SHA256.returnMessageDigest(md); md = null;
+               identityHash = SHA256.digest(myIdentity);
+               identityHashHash = SHA256.digest(identityHash);
                String loc = fs.get("location");
                Location l;
                try {

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2007-03-20 21:15:35 UTC 
(rev 12239)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2007-03-20 21:16:49 UTC 
(rev 12240)
@@ -347,10 +347,8 @@
             throw new FSParseException(e);
                }

-        MessageDigest md = SHA256.getMessageDigest();
-        
         if(identity == null) throw new FSParseException("No identity");
-        identityHash = md.digest(identity);
+        identityHash = SHA256.digest(identity);
         hashCode = Fields.hashCode(identityHash);
         version = fs.get("version");
         Version.seenVersion(version);
@@ -420,8 +418,8 @@
                                boolean failed = false;
                                if(signature == null || peerCryptoGroup == null 
|| peerPubKey == null || 
                                                (failed = !
-                                                               
(DSA.verify(peerPubKey, new DSASignature(signature), new BigInteger(1, 
md.digest(fs.toOrderedString().getBytes("UTF-8"))), false) ||
-                                                               
(DSA.verify(peerPubKey, new DSASignature(signature), new BigInteger(1, 
md.digest(fs.toOrderedString().getBytes("UTF-8"))), true))))) { // FIXME remove 
,true after pre-1013 are obsolete
+                                                               
(DSA.verify(peerPubKey, new DSASignature(signature), new BigInteger(1, 
SHA256.digest(fs.toOrderedString().getBytes("UTF-8"))), false) ||
+                                                               
(DSA.verify(peerPubKey, new DSASignature(signature), new BigInteger(1, 
SHA256.digest(fs.toOrderedString().getBytes("UTF-8"))), true))))) { // FIXME 
remove ,true after pre-1013 are obsolete
                                        String errCause = "";
                                        if(signature == null) errCause += " (No 
signature)";
                                        if(peerCryptoGroup == null) errCause += 
" (No peer crypto group)";
@@ -455,9 +453,9 @@
         // Setup incoming and outgoing setup ciphers
         byte[] nodeKey = node.identityHash;
         byte[] nodeKeyHash = node.identityHashHash;
-        byte[] setupKeyHash = md.digest(identityHash);
+        byte[] setupKeyHash = SHA256.digest(identityHash);

-        int digestLength = md.getDigestLength();
+        int digestLength = SHA256.getDigestLength();
         incomingSetupKey = new byte[digestLength];
         for(int i=0;i<incomingSetupKey.length;i++)
             incomingSetupKey[i] = (byte) (nodeKey[i] ^ setupKeyHash[i]);
@@ -632,8 +630,6 @@

                // Setup the queuedToSendN2NTMExtraPeerDataFileNumbers
                queuedToSendN2NTMExtraPeerDataFileNumbers = new LinkedHashSet();
-               
-               SHA256.returnMessageDigest(md);
     }

     private boolean parseARK(SimpleFieldSet fs, boolean onStartup) {

Modified: trunk/freenet/src/freenet/support/io/BucketTools.java
===================================================================
--- trunk/freenet/src/freenet/support/io/BucketTools.java       2007-03-20 
21:15:35 UTC (rev 12239)
+++ trunk/freenet/src/freenet/support/io/BucketTools.java       2007-03-20 
21:16:49 UTC (rev 12240)
@@ -245,7 +245,8 @@
                                int readBytes = is.read(buf);
                                if(readBytes < 0) break;
                                bytesRead += readBytes;
-                               md.update(buf, 0, readBytes);
+                               if(readBytes > 0)
+                                       md.update(buf, 0, readBytes);
                        }
                        if((bytesRead < bucketLength) && (bucketLength > 0))
                                throw new EOFException();


Reply via email to