Author: toad
Date: 2006-03-29 19:29:02 +0000 (Wed, 29 Mar 2006)
New Revision: 8354

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/crypt/DSAGroup.java
   trunk/freenet/src/freenet/crypt/DSAPrivateKey.java
   trunk/freenet/src/freenet/crypt/DSAPublicKey.java
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/RealNodePingTest.java
   trunk/freenet/src/freenet/node/RealNodeRequestInsertTest.java
   trunk/freenet/src/freenet/node/RealNodeRoutingTest.java
   trunk/freenet/src/freenet/node/TestnetHandler.java
   trunk/freenet/src/freenet/node/TestnetStatusUploader.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/Version.java
Log:
585: Non-darknet support, and nodes have pub-/priv-keys (they don't use them 
yet though).

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-03-29 19:05:33 UTC (rev 8353)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-03-29 19:29:02 UTC (rev 8354)
@@ -62,7 +62,7 @@
                buf.append("<div class=\"infobox\">\n");
                buf.append("<h2>My Reference</h2>\n");
                buf.append("<pre>\n");
-               buf.append(this.node.exportFieldSet());
+               buf.append(this.node.exportPublicFieldSet());
                buf.append("</pre>\n");
                buf.append("</div>\n");


Modified: trunk/freenet/src/freenet/crypt/DSAGroup.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAGroup.java       2006-03-29 19:05:33 UTC 
(rev 8353)
+++ trunk/freenet/src/freenet/crypt/DSAGroup.java       2006-03-29 19:29:02 UTC 
(rev 8354)
@@ -9,6 +9,7 @@
 import java.util.Vector;

 import freenet.support.HexUtil;
+import freenet.support.SimpleFieldSet;

 import net.i2p.util.NativeBigInteger;

@@ -325,4 +326,19 @@
     public void destroy() {
         p = q = g = null;
     }
+
+       public SimpleFieldSet asFieldSet() {
+               SimpleFieldSet fs = new SimpleFieldSet(true);
+               fs.put("p", getPAsHexString());
+               fs.put("q", getQAsHexString());
+               fs.put("g", getGAsHexString());
+               return fs;
+       }
+
+       public static DSAGroup create(SimpleFieldSet fs) {
+               BigInteger p = new NativeBigInteger(1, 
HexUtil.hexToBytes(fs.get("p")));
+               BigInteger q = new NativeBigInteger(1, 
HexUtil.hexToBytes(fs.get("q")));
+               BigInteger g = new NativeBigInteger(1, 
HexUtil.hexToBytes(fs.get("g")));
+               return new DSAGroup(p, q, g);
+       }
 }
\ No newline at end of file

Modified: trunk/freenet/src/freenet/crypt/DSAPrivateKey.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAPrivateKey.java  2006-03-29 19:05:33 UTC 
(rev 8353)
+++ trunk/freenet/src/freenet/crypt/DSAPrivateKey.java  2006-03-29 19:29:02 UTC 
(rev 8354)
@@ -5,6 +5,7 @@
 import java.util.Random;

 import freenet.support.HexUtil;
+import freenet.support.SimpleFieldSet;

 import net.i2p.util.NativeBigInteger;

@@ -59,6 +60,17 @@
     public byte[] fingerprint() {
         return fingerprint(new BigInteger[] {x});
     }
+
+       public SimpleFieldSet asFieldSet() {
+               SimpleFieldSet fs = new SimpleFieldSet(true);
+               fs.put("x", x.toString(16));
+               return fs;
+       }
+
+       public static DSAPublicKey create(SimpleFieldSet set, DSAGroup group) {
+               NativeBigInteger x = new NativeBigInteger(1, 
HexUtil.hexToBytes(set.get("x")));
+               return new DSAPublicKey(group, x);
+       }

 //    public static void main(String[] args) throws Exception {
 //        Yarrow y=new Yarrow();

Modified: trunk/freenet/src/freenet/crypt/DSAPublicKey.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAPublicKey.java   2006-03-29 19:05:33 UTC 
(rev 8353)
+++ trunk/freenet/src/freenet/crypt/DSAPublicKey.java   2006-03-29 19:29:02 UTC 
(rev 8354)
@@ -7,6 +7,7 @@
 import java.io.*;

 import freenet.support.HexUtil;
+import freenet.support.SimpleFieldSet;

 import net.i2p.util.NativeBigInteger;

@@ -182,4 +183,15 @@
                return getY().compareTo(((DSAPublicKey)other).getY());
                } else return -1;
     }
+
+       public SimpleFieldSet asFieldSet() {
+               SimpleFieldSet fs = new SimpleFieldSet(true);
+               fs.put("y", getYAsHexString());
+               return fs;
+       }
+
+       public static DSAPrivateKey create(SimpleFieldSet fs, DSAGroup group) {
+               NativeBigInteger y = new NativeBigInteger(1, 
HexUtil.hexToBytes(fs.get("y")));
+               return new DSAPrivateKey(y);
+       }
 }

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2006-03-29 
19:05:33 UTC (rev 8353)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2006-03-29 
19:29:02 UTC (rev 8354)
@@ -283,7 +283,7 @@
         PCFBMode pcfb = new PCFBMode(cipher);
         byte[] iv = new byte[pcfb.lengthIV()];

-        byte[] myRef = node.myRefCompressed();
+        byte[] myRef = node.myPublicRefCompressed();
         byte[] data = new byte[myRef.length + 8];
         System.arraycopy(Fields.longToBytes(node.bootID), 0, data, 0, 8);
         System.arraycopy(myRef, 0, data, 8, myRef.length);

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-03-29 19:05:33 UTC (rev 
8353)
+++ trunk/freenet/src/freenet/node/Node.java    2006-03-29 19:29:02 UTC (rev 
8354)
@@ -26,11 +26,9 @@
 import java.util.Iterator;

 import freenet.client.ArchiveManager;
-import freenet.client.FetcherContext;
 import freenet.client.HighLevelSimpleClient;
 import freenet.client.HighLevelSimpleClientImpl;
 import freenet.client.async.ClientRequestScheduler;
-import freenet.client.async.RequestScheduler;
 import freenet.client.async.USKManager;
 import freenet.clients.http.FproxyToadlet;
 import freenet.clients.http.SimpleToadletServer;
@@ -41,8 +39,11 @@
 import freenet.config.LongCallback;
 import freenet.config.StringCallback;
 import freenet.config.SubConfig;
+import freenet.crypt.DSAGroup;
+import freenet.crypt.DSAPrivateKey;
 import freenet.crypt.DSAPublicKey;
 import freenet.crypt.DiffieHellman;
+import freenet.crypt.Global;
 import freenet.crypt.RandomSource;
 import freenet.crypt.Yarrow;
 import freenet.io.comm.DMT;
@@ -183,6 +184,12 @@
     private final HashMap insertSenders;
     /** IP address detector */
     private final IPAddressDetector ipDetector;
+    /** My crypto group */
+    private DSAGroup myCryptoGroup;
+    /** My private key */
+    private DSAPrivateKey myPrivKey;
+    /** My public key */
+    private DSAPublicKey myPubKey;

     private final HashSet runningUIDs;

@@ -278,12 +285,12 @@
      * Read all storable settings (identity etc) from the node file.
      * @param filename The name of the file to read from.
      */
-    private void readNodeFile(String filename) throws IOException {
+    private void readNodeFile(String filename, RandomSource r) throws 
IOException {
        // REDFLAG: Any way to share this code with NodePeer?
         FileInputStream fis = new FileInputStream(filename);
         InputStreamReader isr = new InputStreamReader(fis);
         BufferedReader br = new BufferedReader(isr);
-        SimpleFieldSet fs = new SimpleFieldSet(br, false);
+        SimpleFieldSet fs = new SimpleFieldSet(br, true);
         br.close();
         // Read contents
         String physical = fs.get("physical.udp");
@@ -327,6 +334,16 @@
         if(myName == null) {
             myName = newName();
         }
+        // FIXME: Back compatibility; REMOVE !!
+        try {
+               this.myCryptoGroup = DSAGroup.create(fs.subset("dsaGroup"));
+               this.myPrivKey = DSAPublicKey.create(fs.subset("dsaPubKey"), 
myCryptoGroup);
+               this.myPubKey = DSAPrivateKey.create(fs.subset("dsaPrivKey"), 
myCryptoGroup);
+        } catch (NullPointerException e) {
+            this.myCryptoGroup = Global.DSAgroupBigA;
+            this.myPrivKey = new DSAPrivateKey(myCryptoGroup, r);
+            this.myPubKey = new DSAPublicKey(myCryptoGroup, myPrivKey);
+        }
     }

     private String newName() {
@@ -342,7 +359,7 @@
     }

     private void writeNodeFile(File orig, File backup) throws IOException {
-        SimpleFieldSet fs = exportFieldSet();
+        SimpleFieldSet fs = exportPrivateFieldSet();
         orig.renameTo(backup);
         FileOutputStream fos = new FileOutputStream(orig);
         OutputStreamWriter osr = new OutputStreamWriter(fos);
@@ -365,6 +382,9 @@
         identityHash = md.digest(myIdentity);
         identityHashHash = md.digest(identityHash);
         myName = newName();
+        this.myCryptoGroup = Global.DSAgroupBigA;
+        this.myPrivKey = new DSAPrivateKey(myCryptoGroup, r);
+        this.myPubKey = new DSAPublicKey(myCryptoGroup, myPrivKey);
     }

     /**
@@ -641,7 +661,11 @@
                                }
                }
         } else {
-               Logger.normal(this, "Testnet mode DISABLED. You may have some 
level of anonymity. :)");
+               String s = "Testnet mode DISABLED. You may have some level of 
anonymity. :)\n"+
+                       "Note that while we no longer have explicit back-doors 
enabled, this version of Freenet is still a very early alpha, and may well have 
numerous bugs and design flaws.\n"+
+                       "In particular: YOU ARE WIDE OPEN TO YOUR IMMEDIATE 
DARKNET PEERS! They can eavesdrop on your requests with very little difficulty 
at present.";
+               Logger.normal(this, s);
+               System.err.println(s);
                testnetEnabled = false;
         }

@@ -668,10 +692,10 @@
         // After we have set up testnet and IP address, load the node file
         try {
                // FIXME should take file directly?
-               readNodeFile(new File(nodeDir, "node-"+portNumber).getPath());
+               readNodeFile(new File(nodeDir, "node-"+portNumber).getPath(), 
random);
         } catch (IOException e) {
             try {
-                readNodeFile(new File("node-"+portNumber+".bak").getPath());
+                readNodeFile(new File("node-"+portNumber+".bak").getPath(), 
random);
             } catch (IOException e1) {
                 initNodeFileSettings(random);
             }
@@ -1379,12 +1403,18 @@
        return false;
     }

+    public SimpleFieldSet exportPrivateFieldSet() {
+       SimpleFieldSet fs = exportPublicFieldSet();
+       fs.put("dsaPrivKey", myPrivKey.asFieldSet());
+       return fs;
+    }
+    
     /**
      * Export my reference so that another node can connect to me.
      * @return
      */
-    public SimpleFieldSet exportFieldSet() {
-        SimpleFieldSet fs = new SimpleFieldSet(false);
+    public SimpleFieldSet exportPublicFieldSet() {
+        SimpleFieldSet fs = new SimpleFieldSet(true);
         InetAddress ip = getPrimaryIPAddress();
         if(ip != null)
                fs.put("physical.udp", Peer.getHostName(ip)+":"+portNumber);
@@ -1396,6 +1426,8 @@
         if(testnetEnabled)
                fs.put("testnetPort", 
Integer.toString(testnetHandler.testnetPort));
         fs.put("myName", myName);
+        fs.put("dsaGroup", myCryptoGroup.asFieldSet());
+        fs.put("dsaPubKey", myPubKey.asFieldSet());
         Logger.minor(this, "My reference: "+fs);
         return fs;
     }
@@ -1851,8 +1883,8 @@
     /**
      * @return Our reference, compressed
      */
-    public byte[] myRefCompressed() {
-        SimpleFieldSet fs = exportFieldSet();
+    public byte[] myPublicRefCompressed() {
+        SimpleFieldSet fs = exportPublicFieldSet();
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         OutputStreamWriter osw = new OutputStreamWriter(baos);
         try {

Modified: trunk/freenet/src/freenet/node/RealNodePingTest.java
===================================================================
--- trunk/freenet/src/freenet/node/RealNodePingTest.java        2006-03-29 
19:05:33 UTC (rev 8353)
+++ trunk/freenet/src/freenet/node/RealNodePingTest.java        2006-03-29 
19:29:02 UTC (rev 8354)
@@ -27,8 +27,8 @@
         // Create 2 nodes
         Node node1 = new Node(5001, yarrow, null, "pingtest-", 0, false, fh, 
0);
         Node node2 = new Node(5002, yarrow, null, "pingtest-", 0, false, fh, 
0);
-        SimpleFieldSet node1ref = node1.exportFieldSet();
-        SimpleFieldSet node2ref = node2.exportFieldSet();
+        SimpleFieldSet node1ref = node1.exportPublicFieldSet();
+        SimpleFieldSet node2ref = node2.exportPublicFieldSet();
         // Connect
         node1.peers.connect(node2ref);
         node2.peers.connect(node1ref);

Modified: trunk/freenet/src/freenet/node/RealNodeRequestInsertTest.java
===================================================================
--- trunk/freenet/src/freenet/node/RealNodeRequestInsertTest.java       
2006-03-29 19:05:33 UTC (rev 8353)
+++ trunk/freenet/src/freenet/node/RealNodeRequestInsertTest.java       
2006-03-29 19:29:02 UTC (rev 8354)
@@ -48,7 +48,7 @@
         }
         SimpleFieldSet refs[] = new SimpleFieldSet[NUMBER_OF_NODES];
         for(int i=0;i<NUMBER_OF_NODES;i++)
-            refs[i] = nodes[i].exportFieldSet();
+            refs[i] = nodes[i].exportPublicFieldSet();
         Logger.normal(RealNodeRoutingTest.class, "Created "+NUMBER_OF_NODES+" 
nodes");
         // Now link them up
         // Connect the set
@@ -69,8 +69,8 @@
             //System.out.println(""+nodeA+" -> "+nodeB);
             Node a = nodes[nodeA];
             Node b = nodes[nodeB];
-            a.peers.connect(b.exportFieldSet());
-            b.peers.connect(a.exportFieldSet());
+            a.peers.connect(b.exportPublicFieldSet());
+            b.peers.connect(a.exportPublicFieldSet());
         }

         Logger.normal(RealNodeRoutingTest.class, "Added random links");

Modified: trunk/freenet/src/freenet/node/RealNodeRoutingTest.java
===================================================================
--- trunk/freenet/src/freenet/node/RealNodeRoutingTest.java     2006-03-29 
19:05:33 UTC (rev 8353)
+++ trunk/freenet/src/freenet/node/RealNodeRoutingTest.java     2006-03-29 
19:29:02 UTC (rev 8354)
@@ -41,7 +41,7 @@
         }
         SimpleFieldSet refs[] = new SimpleFieldSet[NUMBER_OF_NODES];
         for(int i=0;i<NUMBER_OF_NODES;i++)
-            refs[i] = nodes[i].exportFieldSet();
+            refs[i] = nodes[i].exportPublicFieldSet();
         Logger.normal(RealNodeRoutingTest.class, "Created "+NUMBER_OF_NODES+" 
nodes");
         // Now link them up
         // Connect the set
@@ -62,8 +62,8 @@
             //System.out.println(""+nodeA+" -> "+nodeB);
             Node a = nodes[nodeA];
             Node b = nodes[nodeB];
-            a.peers.connect(b.exportFieldSet());
-            b.peers.connect(a.exportFieldSet());
+            a.peers.connect(b.exportPublicFieldSet());
+            b.peers.connect(a.exportPublicFieldSet());
         }

         Logger.normal(RealNodeRoutingTest.class, "Added random links");

Modified: trunk/freenet/src/freenet/node/TestnetHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/TestnetHandler.java  2006-03-29 19:05:33 UTC 
(rev 8353)
+++ trunk/freenet/src/freenet/node/TestnetHandler.java  2006-03-29 19:29:02 UTC 
(rev 8354)
@@ -149,7 +149,7 @@
                                        Logger.minor(this, "Sending 
references");
                                        OutputStreamWriter osw = new 
OutputStreamWriter(os, "ISO-8859-1");
                                        osw.write("My ref:\n\n");
-                                       SimpleFieldSet fs = 
node.exportFieldSet();
+                                       SimpleFieldSet fs = 
node.exportPublicFieldSet();
                                        fs.writeTo(osw);
                                        osw.write("\n\nMy peers:\n");
                                        node.peers.writePeers(osw);
@@ -230,29 +230,21 @@
                        new TestnetEnabledCallback(node));

         boolean enabled = testnetConfig.getBoolean("enabled");
-        
-        if(!enabled) {
-               // FIXME
-               String msg = "Sorry, testnet must be enabled while Freenet 0.7 
is in pre-alpha testing phase.";
-               Logger.error(TestnetHandler.class, msg);
-               System.err.println(msg);
-               throw new 
Node.NodeInitException(Node.EXIT_TESTNET_DISABLED_NOT_SUPPORTED, msg);
-        }
-        
-        // Testnet is enabled.
-        
-        // Get the testnet port
-        
-        // Default to node port plus 1000
-        
-        int defaultPort = 1024 + (node.portNumber-1024+1000) % (65536 - 1024);
-        
-        testnetConfig.register("port", defaultPort, 2, true, "Testnet port", 
"Testnet port number",
-                       new TestnetPortNumberCallback(node));
-        
-        testnetConfig.finishedInitialization();
-        
-        return new TestnetHandler(node, testnetConfig.getInt("port"));
+
+        if(enabled) {
+               // Get the testnet port
+               
+               // Default to node port plus 1000
+               
+               int defaultPort = 1024 + (node.portNumber-1024+1000) % (65536 - 
1024);
+               
+               testnetConfig.register("port", defaultPort, 2, true, "Testnet 
port", "Testnet port number",
+                               new TestnetPortNumberCallback(node));
+               
+               testnetConfig.finishedInitialization();
+               
+               return new TestnetHandler(node, testnetConfig.getInt("port"));
+        } else return null;
        }

 }

Modified: trunk/freenet/src/freenet/node/TestnetStatusUploader.java
===================================================================
--- trunk/freenet/src/freenet/node/TestnetStatusUploader.java   2006-03-29 
19:05:33 UTC (rev 8353)
+++ trunk/freenet/src/freenet/node/TestnetStatusUploader.java   2006-03-29 
19:29:02 UTC (rev 8354)
@@ -52,7 +52,7 @@
                                        client = new 
Socket("emu.freenetproject.org", 23415);
                                        PrintStream output = new 
PrintStream(client.getOutputStream());

-                                       
output.println(node.exportFieldSet().toString());
+                                       
output.println(node.exportPublicFieldSet().toString());
                                        output.println();
                                        output.println(node.getFreevizOutput());
                                        output.close();

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-03-29 
19:05:33 UTC (rev 8353)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-03-29 
19:29:02 UTC (rev 8354)
@@ -500,7 +500,7 @@
                        }

         } else if(uline.startsWith("STATUS")) {
-            SimpleFieldSet fs = n.exportFieldSet();
+            SimpleFieldSet fs = n.exportPublicFieldSet();
             outsb.append(fs.toString());
             outsb.append(n.getStatus());
            if(Version.buildNumber()<Version.highestSeenBuild){

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-03-29 19:05:33 UTC (rev 
8353)
+++ trunk/freenet/src/freenet/node/Version.java 2006-03-29 19:29:02 UTC (rev 
8354)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 584;
+       private static final int buildNumber = 585;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 555;


Reply via email to