[freenet-cvs] r14926 - branches/freenet-jfk/src/freenet/node

kryptos at freenetproject.org kryptos at freenetproject.org
Thu Aug 30 18:09:45 UTC 2007


Author: kryptos
Date: 2007-08-30 18:09:45 +0000 (Thu, 30 Aug 2007)
New Revision: 14926

Modified:
   branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java
Log:
Cached authenticator

Modified: branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java
===================================================================
--- branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java	2007-08-30 14:57:43 UTC (rev 14925)
+++ branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java	2007-08-30 18:09:45 UTC (rev 14926)
@@ -41,8 +41,10 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
+import java.util.ArrayList;
 import java.util.Map;
 import java.util.HashMap;
+import java.util.List;
 
 /**
  * @author amphibian
@@ -64,6 +66,7 @@
     final EntropySource myPacketDataSource;
     final Map message3Cache;
     final Map message4Cache;
+    final List authenticatorCache;
     final eKey encryptionKey;
     final DSAGroup g;
     final RandomSource r;
@@ -92,7 +95,7 @@
 	
 	final int fullHeadersLengthMinimum;
 	final int fullHeadersLengthOneMessage;
-        private static byte[] AUTHENTICATOR;
+        
 	
     public FNPPacketMangler(Node node, NodeCrypto crypt, PacketSocketHandler sock) {
         this.node = node;
@@ -103,6 +106,7 @@
         myPacketDataSource = new EntropySource();
         message3Cache = new HashMap();
         message4Cache = new HashMap();
+        authenticatorCache = new ArrayList();
         encryptionKey = new eKey();
         g = Global.DSAgroupBigA;
         r=node.random;
@@ -538,12 +542,13 @@
 		HKrGenerator trKey=new HKrGenerator(node);
                 byte[] hkr=trKey.getNewHKr();
 		HMAC hash=new HMAC(SHA1.getInstance());
-                AUTHENTICATOR=hash.mac(hkr,processMessageAuth(pn),hkr.length);
-		byte[] Message2=new byte[AUTHENTICATOR.length+unVerifiedData.length+s.length+r.length+1];
+                byte[] authenticator = hash.mac(hkr,processMessageAuth(pn),hkr.length);
+                authenticatorCache.add(authenticator);
+		byte[] Message2=new byte[authenticator.length+unVerifiedData.length+s.length+r.length+1];
 		byte[] signedData=new byte[s.length+r.length];
 		System.arraycopy(signedData,0,Message2,0,signedData.length);
 		System.arraycopy(unVerifiedData,0,Message2,signData.length+1,unVerifiedData.length);
-		System.arraycopy(AUTHENTICATOR,0,Message2,signedData.length+unVerifiedData.length+1,AUTHENTICATOR.length);
+		System.arraycopy(authenticator,0,Message2,signedData.length+unVerifiedData.length+1,authenticator.length);
                 //Send params:Version,negType,phase,data,peernode,peer
 		sendMessage1or2Packet(1,2,1,Message2,pn,replyTo);
 		long t2=System.currentTimeMillis();
@@ -567,6 +572,15 @@
     private byte[] ProcessMessage3(PeerNode pn,Peer replyTo,int phase)			
     {
 
+        // Get the authenticator,which is the latest entry into the cache
+        // It is basically a keyed hash(HMAC); size of output is that of the underlying hash function 
+        byte[] authenticator = new byte[16];
+        try{
+            authenticator = getBytes(authenticatorCache.get(authenticatorCache.size()));
+        }
+        catch(IOException e){
+            Logger.error(this,"Error getting bytes");
+        }
         byte[] unVerifiedData=new byte[iNonce().length+rNonce().length+Gr(pn).length+Gi(pn).length+1];
         System.arraycopy(iNonce(),0,unVerifiedData,0,iNonce().length);
         System.arraycopy(rNonce(),0,unVerifiedData,iNonce().length+1,rNonce().length);
@@ -604,10 +618,10 @@
         System.arraycopy(s, 0, encryptedData, count, s.length);
         count += s.length;
         pk.blockEncipher(encryptedData, 0, encryptedData.length);
-        byte[] message3=new byte[encryptedData.length+AUTHENTICATOR.length+unVerifiedData.length+1];
+        byte[] message3=new byte[encryptedData.length+authenticator.length+unVerifiedData.length+1];
         System.arraycopy(encryptedData,0,message3,0,encryptedData.length);
-        System.arraycopy(AUTHENTICATOR,0,message3,encryptedData.length+1,AUTHENTICATOR.length);
-	System.arraycopy(unVerifiedData,0,message3,encryptedData.length+AUTHENTICATOR.length+1,unVerifiedData.length);
+        System.arraycopy(authenticator,0,message3,encryptedData.length+1,authenticator.length);
+	System.arraycopy(unVerifiedData,0,message3,encryptedData.length+authenticator.length+1,unVerifiedData.length);
         return message3;
         
     }




More information about the cvs mailing list