Author: toad
Date: 2008-02-02 16:40:52 +0000 (Sat, 02 Feb 2008)
New Revision: 17474

Modified:
   trunk/freenet/src/freenet/io/comm/DMT.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Include an HMAC authenticator on FNPOfferKey so we don't have to remember what 
we've offered.

Modified: trunk/freenet/src/freenet/io/comm/DMT.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/DMT.java  2008-02-02 16:25:41 UTC (rev 
17473)
+++ trunk/freenet/src/freenet/io/comm/DMT.java  2008-02-02 16:40:52 UTC (rev 
17474)
@@ -126,6 +126,7 @@
        public static final String HASHES = "hashes";
        public static final String REJECT_CODE = "rejectCode";
        public static final String ROUTING_ENABLED = "routingEnabled";
+       public static final String OFFER_AUTHENTICATOR = "offerAuthenticator";

        /** Very urgent */
        public static final short PRIORITY_NOW=-2;
@@ -849,9 +850,10 @@
                addField(KEY, Key.class);
        }};

-       public static Message createFNPOfferKey(Key key) {
+       public static Message createFNPOfferKey(Key key, byte[] authenticator) {
                Message msg = new Message(FNPOfferKey);
                msg.set(KEY, key);
+               msg.set(OFFER_AUTHENTICATOR, authenticator);
                return msg;
        }


Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2008-02-02 16:25:41 UTC 
(rev 17473)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2008-02-02 16:40:52 UTC 
(rev 17474)
@@ -10,6 +10,7 @@
 import java.math.BigInteger;
 import java.net.MalformedURLException;
 import java.net.UnknownHostException;
+import java.security.MessageDigest;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -30,6 +31,7 @@
 import freenet.crypt.DSAGroup;
 import freenet.crypt.DSAPublicKey;
 import freenet.crypt.DSASignature;
+import freenet.crypt.HMAC;
 import freenet.crypt.KeyAgreementSchemeContext;
 import freenet.crypt.SHA256;
 import freenet.crypt.UnsupportedCipherException;
@@ -3078,7 +3080,10 @@

        /** Offer a key to this node */
        public void offer(Key key) {
-               Message msg = DMT.createFNPOfferKey(key);
+               byte[] keyBytes = key.getFullKey();
+               HMAC hash = new HMAC(SHA256.getInstance());
+               byte[] authenticator = 
hash.mac(node.failureTable.offerAuthenticatorKey, keyBytes, 32);
+               Message msg = DMT.createFNPOfferKey(key, authenticator);
                try {
                        sendAsync(msg, null, 0, null);
                } catch(NotConnectedException e) {


Reply via email to