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;