Author: kryptos
Date: 2007-09-10 04:56:29 +0000 (Mon, 10 Sep 2007)
New Revision: 15109
Modified:
branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java
Log:
JFK(1) and JFK(2) issues resolved
Modified: branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java
===================================================================
--- branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java 2007-09-10
04:42:04 UTC (rev 15108)
+++ branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java 2007-09-10
04:56:29 UTC (rev 15109)
@@ -75,7 +75,7 @@
*/
final Map message3Cache;
final Map message4Cache;
- private byte[] transitentKey = null;
+ private byte[] transientKey = null;
private final HashMap authenticatorCache;
final eKey encryptionKey;
final DSAGroup g;
@@ -83,7 +83,7 @@
final RandomSource r;
/** We renew it on each *successful* run of the protocol (the spec.
says "once a while") - access is synchronized! */
private DiffieHellmanLightContext currentDHContext = null;
- private static final int TRANSITENT_KEY_SIZE = 12;
+ private static final int TRANSIENT_KEY_SIZE = 12;
// TODO: is 64 bits enough ?
private static final int NONCE_SIZE = 6;
private static final int MAX_PACKETS_IN_FLIGHT = 256;
@@ -532,7 +532,13 @@
Logger.error(this,"Message1 timeout error:Sending
packet for"+pn.getPeer());
}
- // FIXME: IDr' ?
+ /*
+ * format:
+ * Ni,Nr,g^r,GrpInfo(r),IDr
+ * Signature[g^r,grpInfo(r)]
+ * Hashed JFKAuthenticator
+ * FIXME: IDr' not sent during JFK(1) ?
+ */
private void sendMessage2(byte[] nonceInitator, byte[] hisExponential,
PeerNode pn, Peer replyTo) {
if(logMINOR) Logger.minor(this, "Sending a JFK(2) message to
"+pn);
DiffieHellmanLightContext dhContext =
getLightDiffieHellmanContext();
@@ -601,7 +607,7 @@
// FIXME: SHA1 or SHA256 there ? does it matter ?
HMAC hash = new HMAC(SHA1.getInstance());
// TODO: is that 512 LSB ?
- return hash.mac(getTransitentKey(), authData, 9);
+ return hash.mac(getTransientKey(), authData, 9);
}
/*
* Hash the authenticator using SHA256
@@ -620,6 +626,7 @@
* in the clear.
* Send a signed copy of his own exponential
* Send an authenticator which is a hash of Ni,Nr,g^r calculated over
the transient key HKr
+ * Format of JFK(2) as specified above
* @param The packet phase number
* @param The peer to which we need to send the packet
* @param The peerNode we are talking to
@@ -707,11 +714,11 @@
if(logMINOR) Logger.minor(this, "Got a JFK(3) message,
processing it");
// 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];
+ byte[] authenticator;
try{
// Intrinsic lock provided by the object
authenticatorCache
synchronized(authenticatorCache){
- authenticator =
getBytes(authenticatorCache.get(PKR));
+ authenticator =
getBytes(authenticatorCache.get(nonceInitiator));
}
}
catch(IOException e){
@@ -2215,23 +2222,23 @@
return currentDHContext;
}
- private byte[] getTransitentKey() {
+ private byte[] getTransientKey() {
synchronized (authenticatorCache) {
- if(transitentKey == null){
- transitentKey = new byte[TRANSITENT_KEY_SIZE];
- node.random.nextBytes(transitentKey);
+ if(transientKey == null){
+ transientKey = new byte[TRANSIENT_KEY_SIZE];
+ node.random.nextBytes(transientKey);
// reset the authenticator cache
authenticatorCache.clear();
}
- return transitentKey;
+ return transientKey;
}
}
//TODO: when shall that be called ? what about DH exponentials ?
- private void resetTransitentKey() {
+ private void resetTransientKey() {
synchronized (authenticatorCache) {
- transitentKey = null;
+ transientKey = null;
}
}
}
\ No newline at end of file