Author: toad
Date: 2007-12-14 13:57:24 +0000 (Fri, 14 Dec 2007)
New Revision: 16525
Modified:
trunk/freenet/src/freenet/node/DarknetPeerNode.java
trunk/freenet/src/freenet/node/FNPPacketMangler.java
trunk/freenet/src/freenet/node/NodeARKInserter.java
trunk/freenet/src/freenet/node/NodeCrypto.java
trunk/freenet/src/freenet/node/OpennetPeerNode.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/SeedClientPeerNode.java
trunk/freenet/src/freenet/node/SeedServerPeerNode.java
Log:
Signature is optional in noderef for anon-initiator setup in JFK(3).
exportPublicFieldSet(forSetup, heavySetup) - heavySetup used for anon-initiator
JFK(3), leaves out some stuff but preserves the crypto details.
Modified: trunk/freenet/src/freenet/node/DarknetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/DarknetPeerNode.java 2007-12-14 13:45:21 UTC
(rev 16524)
+++ trunk/freenet/src/freenet/node/DarknetPeerNode.java 2007-12-14 13:57:24 UTC
(rev 16525)
@@ -87,7 +87,7 @@
* @param node2 The running Node we are part of.
*/
public DarknetPeerNode(SimpleFieldSet fs, Node node2, NodeCrypto crypto,
PeerManager peers, boolean fromLocal, OutgoingPacketMangler mangler) throws
FSParseException, PeerParseException, ReferenceSignatureVerificationException {
- super(fs, node2, crypto, peers, fromLocal, mangler, false);
+ super(fs, node2, crypto, peers, fromLocal, false, mangler, false);
logMINOR = Logger.shouldLog(Logger.MINOR, this);
Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2007-12-14
13:45:21 UTC (rev 16524)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2007-12-14
13:57:24 UTC (rev 16525)
@@ -1168,7 +1168,7 @@
}
PeerNode seed;
try {
- seed = new SeedClientPeerNode(ref, node,
crypto, node.peers, false, crypto.packetMangler);
+ seed = new SeedClientPeerNode(ref, node,
crypto, node.peers, false, true, crypto.packetMangler);
} catch (FSParseException e) {
Logger.error(this, "Invalid seednode noderef:
"+e, e);
return null;
@@ -1347,7 +1347,7 @@
DiffieHellmanLightContext ctx = (DiffieHellmanLightContext)
pn.getKeyAgreementSchemeContext();
if(ctx == null) return;
byte[] ourExponential =
stripBigIntegerToNetworkFormat(ctx.myExponential);
- pn.jfkMyRef = unknownInitiator ? crypto.myCompressedFullRef() :
crypto.myCompressedSetupRef();
+ pn.jfkMyRef = unknownInitiator ? crypto.myCompressedFullRef() :
crypto.myCompressedHeavySetupRef();
byte[] data = new byte[8 + pn.jfkMyRef.length];
System.arraycopy(Fields.longToBytes(node.bootID), 0, data, 0,
8);
System.arraycopy(pn.jfkMyRef, 0, data, 8, pn.jfkMyRef.length);
Modified: trunk/freenet/src/freenet/node/NodeARKInserter.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeARKInserter.java 2007-12-14 13:45:21 UTC
(rev 16524)
+++ trunk/freenet/src/freenet/node/NodeARKInserter.java 2007-12-14 13:57:24 UTC
(rev 16525)
@@ -109,7 +109,7 @@
if(logMINOR) Logger.minor(this, "starting inserter");
- SimpleFieldSet fs = crypto.exportPublicFieldSet(true); // More
or less
+ SimpleFieldSet fs = crypto.exportPublicFieldSet(true, false);
// More or less
// Remove some unnecessary fields that only cause collisions.
Modified: trunk/freenet/src/freenet/node/NodeCrypto.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeCrypto.java 2007-12-14 13:45:21 UTC
(rev 16524)
+++ trunk/freenet/src/freenet/node/NodeCrypto.java 2007-12-14 13:57:24 UTC
(rev 16525)
@@ -261,7 +261,7 @@
}
public SimpleFieldSet exportPrivateFieldSet() {
- SimpleFieldSet fs = exportPublicFieldSet(false);
+ SimpleFieldSet fs = exportPublicFieldSet(false, false);
addPrivateFields(fs);
return fs;
}
@@ -272,7 +272,7 @@
* @see exportPublicFieldSet(boolean forSetup).
*/
public SimpleFieldSet exportPublicFieldSet() {
- return exportPublicFieldSet(false);
+ return exportPublicFieldSet(false, false);
}
/**
@@ -280,8 +280,11 @@
* @param forSetup If true, strip out everything that isn't needed for
the references
* exchanged immediately after connection setup. I.e. strip out
everything that is invariant,
* or that can safely be exchanged later.
+ * @param heavySetup If true, we need a minimal ref but one which we
can still construct a
+ * PeerNode from. Usually set if we are adding a node from an
anonymous-initiator noderef exchange.
+ * Don't need a signature.
*/
- SimpleFieldSet exportPublicFieldSet(boolean forSetup) {
+ SimpleFieldSet exportPublicFieldSet(boolean forSetup, boolean
heavySetup) {
SimpleFieldSet fs = exportPublicCryptoFieldSet(forSetup);
// IP addresses
Peer[] ips = detector.detectPrimaryPeers();
@@ -300,17 +303,19 @@
fs.putSingle("myName", node.getMyName()); // FIXME see
#942
fs.put("opennet", isOpennet);
- synchronized (referenceSync) {
- if(myReferenceSignature == null || mySignedReference ==
null || !mySignedReference.equals(fs.toOrderedString())){
- mySignedReference = fs.toOrderedString();
- try {
- myReferenceSignature =
signRef(mySignedReference);
- } catch (NodeInitException e) {
- node.exit(e.exitCode);
+ //if(!heavySetup) { FIXME re-enable check once related changes
are mandatory
+ synchronized (referenceSync) {
+ if(myReferenceSignature == null ||
mySignedReference == null || !mySignedReference.equals(fs.toOrderedString())){
+ mySignedReference =
fs.toOrderedString();
+ try {
+ myReferenceSignature =
signRef(mySignedReference);
+ } catch (NodeInitException e) {
+ node.exit(e.exitCode);
+ }
}
+ fs.putSingle("sig",
myReferenceSignature.toLongString());
}
- fs.putSingle("sig",
myReferenceSignature.toLongString());
- }
+ //}
if(logMINOR) Logger.minor(this, "My reference:
"+fs.toOrderedString());
return fs;
@@ -352,8 +357,8 @@
}
}
- private byte[] myCompressedRef(boolean setup) {
- SimpleFieldSet fs = exportPublicFieldSet(setup);
+ private byte[] myCompressedRef(boolean setup, boolean heavySetup) {
+ SimpleFieldSet fs = exportPublicFieldSet(setup, heavySetup);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DeflaterOutputStream gis;
gis = new DeflaterOutputStream(baos);
@@ -378,15 +383,24 @@
* @see exportSetupFieldSet()
*/
public byte[] myCompressedSetupRef() {
- return myCompressedRef(true);
+ return myCompressedRef(true, false);
}
/**
+ * The part of our node reference which is exchanged in the connection
setup, if we don't
+ * already have the node, compressed.
+ * @see exportSetupFieldSet()
+ */
+ public byte[] myCompressedHeavySetupRef() {
+ return myCompressedRef(false, true);
+ }
+
+ /**
* Our full node reference, compressed.
* @see exportSetupFieldSet()
*/
public byte[] myCompressedFullRef() {
- return myCompressedRef(false);
+ return myCompressedRef(false, false);
}
void addPrivateFields(SimpleFieldSet fs) {
Modified: trunk/freenet/src/freenet/node/OpennetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetPeerNode.java 2007-12-14 13:45:21 UTC
(rev 16524)
+++ trunk/freenet/src/freenet/node/OpennetPeerNode.java 2007-12-14 13:57:24 UTC
(rev 16525)
@@ -10,7 +10,7 @@
private long timeLastSuccess;
public OpennetPeerNode(SimpleFieldSet fs, Node node2, NodeCrypto
crypto, OpennetManager opennet, PeerManager peers, boolean fromLocal,
OutgoingPacketMangler mangler) throws FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
- super(fs, node2, crypto, peers, fromLocal, mangler, true);
+ super(fs, node2, crypto, peers, fromLocal, false, mangler,
true);
this.opennet = opennet;
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2007-12-14 13:45:21 UTC
(rev 16524)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2007-12-14 13:57:24 UTC
(rev 16525)
@@ -313,7 +313,8 @@
* @param fs The SimpleFieldSet to parse
* @param node2 The running Node we are part of.
*/
- public PeerNode(SimpleFieldSet fs, Node node2, NodeCrypto crypto,
PeerManager peers, boolean fromLocal, OutgoingPacketMangler mangler, boolean
isOpennet) throws FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
+ public PeerNode(SimpleFieldSet fs, Node node2, NodeCrypto crypto,
PeerManager peers, boolean fromLocal, boolean noSig, OutgoingPacketMangler
mangler, boolean isOpennet) throws FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
+ if(fromLocal) noSig = true;
logMINOR = Logger.shouldLog(Logger.MINOR, PeerNode.class);
myRef = new WeakReference(this);
this.outgoingMangler = mangler;
@@ -414,7 +415,7 @@
String signature = fs.get("sig");
fs.removeValue("sig");
- if(!fromLocal) {
+ if(!noSig) {
try {
boolean failed = false;
if(signature == null || peerCryptoGroup
== null || peerPubKey == null ||
Modified: trunk/freenet/src/freenet/node/SeedClientPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/SeedClientPeerNode.java 2007-12-14
13:45:21 UTC (rev 16524)
+++ trunk/freenet/src/freenet/node/SeedClientPeerNode.java 2007-12-14
13:57:24 UTC (rev 16525)
@@ -13,8 +13,8 @@
*/
public class SeedClientPeerNode extends PeerNode {
- public SeedClientPeerNode(SimpleFieldSet fs, Node node2, NodeCrypto
crypto, PeerManager peers, boolean fromLocal, OutgoingPacketMangler mangler)
throws FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
- super(fs, node2, crypto, peers, fromLocal, mangler, true);
+ public SeedClientPeerNode(SimpleFieldSet fs, Node node2, NodeCrypto
crypto, PeerManager peers, boolean fromLocal, boolean noSig,
OutgoingPacketMangler mangler) throws FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
+ super(fs, node2, crypto, peers, fromLocal, noSig, mangler,
true);
}
public PeerNodeStatus getStatus() {
Modified: trunk/freenet/src/freenet/node/SeedServerPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/SeedServerPeerNode.java 2007-12-14
13:45:21 UTC (rev 16524)
+++ trunk/freenet/src/freenet/node/SeedServerPeerNode.java 2007-12-14
13:57:24 UTC (rev 16525)
@@ -19,7 +19,7 @@
public class SeedServerPeerNode extends PeerNode {
public SeedServerPeerNode(SimpleFieldSet fs, Node node2, NodeCrypto
crypto, PeerManager peers, boolean fromLocal, OutgoingPacketMangler mangler)
throws FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
- super(fs, node2, crypto, peers, fromLocal, mangler, true);
+ super(fs, node2, crypto, peers, fromLocal, false, mangler,
true);
}
public PeerNodeStatus getStatus() {