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;


Reply via email to