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


Reply via email to