Author: toad
Date: 2006-03-30 00:13:07 +0000 (Thu, 30 Mar 2006)
New Revision: 8361
Modified:
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/Node.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/Version.java
Log:
591: Encode all blocks of data in noderefs as base64. Mandatory build. Sorry,
trying to get all the pain out of the way.
Modified: trunk/freenet/src/freenet/crypt/DSAGroup.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAGroup.java 2006-03-29 23:12:25 UTC
(rev 8360)
+++ trunk/freenet/src/freenet/crypt/DSAGroup.java 2006-03-30 00:13:07 UTC
(rev 8361)
@@ -8,7 +8,9 @@
import java.util.StringTokenizer;
import java.util.Vector;
+import freenet.support.Base64;
import freenet.support.HexUtil;
+import freenet.support.IllegalBase64Exception;
import freenet.support.SimpleFieldSet;
import net.i2p.util.NativeBigInteger;
@@ -329,16 +331,23 @@
public SimpleFieldSet asFieldSet() {
SimpleFieldSet fs = new SimpleFieldSet(true);
- fs.put("p", getPAsHexString());
- fs.put("q", getQAsHexString());
- fs.put("g", getGAsHexString());
+ fs.put("p", Base64.encode(p.toByteArray()));
+ fs.put("q", Base64.encode(q.toByteArray()));
+ fs.put("g", Base64.encode(g.toByteArray()));
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);
+ public static DSAGroup create(SimpleFieldSet fs, boolean base64) throws
IllegalBase64Exception {
+ if(base64) {
+ BigInteger p = new NativeBigInteger(1,
Base64.decode(fs.get("p")));
+ BigInteger q = new NativeBigInteger(1,
Base64.decode(fs.get("q")));
+ BigInteger g = new NativeBigInteger(1,
Base64.decode(fs.get("g")));
+ return new DSAGroup(p, q, g);
+ } else {
+ 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 23:12:25 UTC
(rev 8360)
+++ trunk/freenet/src/freenet/crypt/DSAPrivateKey.java 2006-03-30 00:13:07 UTC
(rev 8361)
@@ -4,7 +4,9 @@
import java.io.*;
import java.util.Random;
+import freenet.support.Base64;
import freenet.support.HexUtil;
+import freenet.support.IllegalBase64Exception;
import freenet.support.SimpleFieldSet;
import net.i2p.util.NativeBigInteger;
@@ -63,12 +65,15 @@
public SimpleFieldSet asFieldSet() {
SimpleFieldSet fs = new SimpleFieldSet(true);
- fs.put("x", x.toString(16));
+ fs.put("x", Base64.encode(x.toByteArray()));
return fs;
}
- public static DSAPublicKey create(SimpleFieldSet set, DSAGroup group) {
- NativeBigInteger x = new NativeBigInteger(1,
HexUtil.hexToBytes(set.get("x")));
+ public static DSAPublicKey create(SimpleFieldSet set, DSAGroup group,
boolean base64) throws IllegalBase64Exception {
+ NativeBigInteger x =
+ new NativeBigInteger(1,
+ base64 ? Base64.decode(set.get("x")) :
+ HexUtil.hexToBytes(set.get("x")));
return new DSAPublicKey(group, x);
}
Modified: trunk/freenet/src/freenet/crypt/DSAPublicKey.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAPublicKey.java 2006-03-29 23:12:25 UTC
(rev 8360)
+++ trunk/freenet/src/freenet/crypt/DSAPublicKey.java 2006-03-30 00:13:07 UTC
(rev 8361)
@@ -6,7 +6,9 @@
import java.security.NoSuchAlgorithmException;
import java.io.*;
+import freenet.support.Base64;
import freenet.support.HexUtil;
+import freenet.support.IllegalBase64Exception;
import freenet.support.SimpleFieldSet;
import net.i2p.util.NativeBigInteger;
@@ -186,12 +188,14 @@
public SimpleFieldSet asFieldSet() {
SimpleFieldSet fs = new SimpleFieldSet(true);
- fs.put("y", getYAsHexString());
+ fs.put("y", Base64.encode(y.toByteArray()));
return fs;
}
- public static DSAPrivateKey create(SimpleFieldSet fs, DSAGroup group) {
- NativeBigInteger y = new NativeBigInteger(1,
HexUtil.hexToBytes(fs.get("y")));
+ public static DSAPrivateKey create(SimpleFieldSet fs, DSAGroup group,
boolean base64) throws IllegalBase64Exception {
+ NativeBigInteger y = new NativeBigInteger(1,
+ base64 ? Base64.decode(fs.get("y")) :
+ HexUtil.hexToBytes(fs.get("y")));
return new DSAPrivateKey(y);
}
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-03-29 23:12:25 UTC (rev
8360)
+++ trunk/freenet/src/freenet/node/Node.java 2006-03-30 00:13:07 UTC (rev
8361)
@@ -25,7 +25,6 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.zip.DeflaterOutputStream;
-import java.util.zip.GZIPOutputStream;
import freenet.client.ArchiveManager;
import freenet.client.HighLevelSimpleClient;
@@ -78,10 +77,12 @@
import freenet.snmplib.SNMPStarter;
import freenet.store.BerkeleyDBFreenetStore;
import freenet.store.FreenetStore;
+import freenet.support.Base64;
import freenet.support.BucketFactory;
import freenet.support.Fields;
import freenet.support.FileLoggerHook;
import freenet.support.HexUtil;
+import freenet.support.IllegalBase64Exception;
import freenet.support.ImmutableByteArrayWrapper;
import freenet.support.LRUHashtable;
import freenet.support.LRUQueue;
@@ -317,7 +318,12 @@
String identity = fs.get("identity");
if(identity == null)
throw new IOException();
- myIdentity = HexUtil.hexToBytes(identity);
+ boolean base64 = Fields.stringToBool(fs.get("base64"), false);
+ try {
+ myIdentity = base64 ? Base64.decode(identity) :
HexUtil.hexToBytes(identity);
+ } catch (IllegalBase64Exception e2) {
+ throw new IOException();
+ }
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-256");
@@ -340,16 +346,19 @@
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);
+ this.myCryptoGroup = DSAGroup.create(fs.subset("dsaGroup"),
base64);
+ this.myPrivKey = DSAPublicKey.create(fs.subset("dsaPubKey"),
myCryptoGroup, base64);
+ this.myPubKey = DSAPrivateKey.create(fs.subset("dsaPrivKey"),
myCryptoGroup, base64);
} catch (NullPointerException e) {
this.myCryptoGroup = Global.DSAgroupBigA;
this.myPrivKey = new DSAPrivateKey(myCryptoGroup, r);
this.myPubKey = new DSAPublicKey(myCryptoGroup, myPrivKey);
- }
+ } catch (IllegalBase64Exception e) {
+ throw new IOException();
+ }
wasTestnet = Fields.stringToBool(fs.get("testnet"), false);
}
@@ -1434,9 +1443,10 @@
public SimpleFieldSet exportPublicFieldSet() {
SimpleFieldSet fs = new SimpleFieldSet(true);
InetAddress ip = getPrimaryIPAddress();
+ fs.put("base64", "true");
if(ip != null)
fs.put("physical.udp", Peer.getHostName(ip)+":"+portNumber);
- fs.put("identity", HexUtil.bytesToHex(myIdentity));
+ fs.put("identity", Base64.encode(myIdentity));
fs.put("location", Double.toString(lm.getLocation().getValue()));
fs.put("version", Version.getVersionString());
fs.put("testnet", Boolean.toString(testnetEnabled));
@@ -1861,6 +1871,7 @@
sb.append(requestSenders.size());
sb.append("\nTransferring requests: ");
sb.append(this.transferringRequestSenders.size());
+ sb.append('\n');
return sb.toString();
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-03-29 23:12:25 UTC
(rev 8360)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-03-30 00:13:07 UTC
(rev 8361)
@@ -27,8 +27,10 @@
import freenet.io.comm.Peer;
import freenet.io.comm.PeerContext;
import freenet.io.comm.PeerParseException;
+import freenet.support.Base64;
import freenet.support.Fields;
import freenet.support.HexUtil;
+import freenet.support.IllegalBase64Exception;
import freenet.support.LRUHashtable;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
@@ -183,14 +185,20 @@
*/
public PeerNode(SimpleFieldSet fs, Node node2) throws FSParseException,
PeerParseException {
this.node = node2;
+ boolean base64 = Fields.stringToBool(fs.get("base64"), false);
String identityString = fs.get("identity");
if(identityString == null)
throw new PeerParseException("No identity!");
try {
- identity = HexUtil.hexToBytes(identityString);
+ if(base64)
+ identity = Base64.decode(identityString);
+ else
+ identity = HexUtil.hexToBytes(identityString);
} catch (NumberFormatException e) {
throw new FSParseException(e);
- }
+ } catch (IllegalBase64Exception e) {
+ throw new FSParseException(e);
+ }
MessageDigest md;
try {
@@ -858,12 +866,16 @@
boolean changedAnything = false;
String identityString = fs.get("identity");
try {
- byte[] newIdentity = HexUtil.hexToBytes(identityString);
+ boolean base64 = Fields.stringToBool(fs.get("base64"), false);
+ byte[] newIdentity = base64 ? Base64.decode(identityString) :
+ HexUtil.hexToBytes(identityString);
if(!Arrays.equals(newIdentity, identity))
throw new FSParseException("Identity changed!!");
} catch (NumberFormatException e) {
throw new FSParseException(e);
- }
+ } catch (IllegalBase64Exception e) {
+ throw new FSParseException(e);
+ }
String newVersion = fs.get("version");
if(newVersion == null) throw new FSParseException("No version");
if(!newVersion.equals(version))
@@ -992,7 +1004,8 @@
fs.put("lastGoodVersion", lastGoodVersion);
for(int i=0;i<nominalPeer.size();i++)
fs.put("physical.udp", nominalPeer.get(i).toString());
- fs.put("identity", HexUtil.bytesToHex(identity));
+ fs.put("base64", "true");
+ fs.put("identity", Base64.encode(identity));
fs.put("location", Double.toString(currentLocation.getValue()));
fs.put("testnet", Boolean.toString(testnetEnabled));
fs.put("version", version);
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-03-29 23:12:25 UTC (rev
8360)
+++ trunk/freenet/src/freenet/node/Version.java 2006-03-30 00:13:07 UTC (rev
8361)
@@ -20,10 +20,10 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 590;
+ private static final int buildNumber = 591;
/** Oldest build of Fred we will talk to */
- private static final int lastGoodBuild = 588;
+ private static final int lastGoodBuild = 591;
public static final int buildNumber() {
return buildNumber;