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) {