Author: toad
Date: 2007-12-15 21:42:38 +0000 (Sat, 15 Dec 2007)
New Revision: 16580
Modified:
trunk/freenet/src/freenet/node/FNPPacketMangler.java
Log:
Fix sender code: Sign hisRef, but don't send it, if !bothNoderefs.
Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2007-12-15
16:57:55 UTC (rev 16579)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2007-12-15
21:42:38 UTC (rev 16580)
@@ -1478,11 +1478,10 @@
NativeBigInteger _initiatorExponential = new
NativeBigInteger(1,initiatorExponential);
byte[] myRef = crypto.myCompressedSetupRef();
- byte[] data = new byte[8 + myRef.length + (bothNoderefs ?
hisRef.length : 0)];
+ byte[] data = new byte[8 + myRef.length + hisRef.length];
System.arraycopy(Fields.longToBytes(node.bootID), 0, data, 0,
8);
System.arraycopy(myRef, 0, data, 8, myRef.length);
- if(bothNoderefs)
- System.arraycopy(hisRef, 0, data, 8 + myRef.length,
hisRef.length);
+ System.arraycopy(hisRef, 0, data, 8 + myRef.length,
hisRef.length);
byte[] messageHash =
SHA256.digest(assembleDHParams(nonceInitiator, nonceResponder,
_initiatorExponential, _responderExponential, pn.identity, data));
if(logMINOR)
@@ -1496,7 +1495,10 @@
byte[] iv=new byte[ivLength];
node.random.nextBytes(iv);
pk.reset(iv);
- byte[] cyphertext = new byte[JFK_PREFIX_RESPONDER.length +
ivLength + Node.SIGNATURE_PARAMETER_LENGTH * 2 + data.length];
+ // If !bothNoderefs, then don't include the last bit
+ int dataLength = data.length - (bothNoderefs ? 0 :
hisRef.length);
+ byte[] cyphertext = new byte[JFK_PREFIX_RESPONDER.length +
ivLength + Node.SIGNATURE_PARAMETER_LENGTH * 2 +
+ dataLength];
int cleartextOffset = 0;
System.arraycopy(JFK_PREFIX_RESPONDER, 0, cyphertext,
cleartextOffset, JFK_PREFIX_RESPONDER.length);
cleartextOffset += JFK_PREFIX_RESPONDER.length;
@@ -1506,8 +1508,8 @@
cleartextOffset += Node.SIGNATURE_PARAMETER_LENGTH;
System.arraycopy(s, 0, cyphertext, cleartextOffset,
Node.SIGNATURE_PARAMETER_LENGTH);
cleartextOffset += Node.SIGNATURE_PARAMETER_LENGTH;
- System.arraycopy(data, 0, cyphertext, cleartextOffset,
data.length);
- cleartextOffset += data.length;
+ System.arraycopy(data, 0, cyphertext, cleartextOffset,
dataLength);
+ cleartextOffset += dataLength;
// Now encrypt the cleartext[Signature]
int cleartextToEncypherOffset = JFK_PREFIX_RESPONDER.length +
ivLength;
pk.blockEncipher(cyphertext, cleartextToEncypherOffset,
cyphertext.length - cleartextToEncypherOffset);