Author: nextgens
Date: 2006-02-03 22:35:15 +0000 (Fri, 03 Feb 2006)
New Revision: 7998

Added:
   branches/freenet-freejvms/src/freenet/store/BerkeleyDBFreenetStore.java
Modified:
   branches/freenet-freejvms/src/freenet/crypt/DSA.java
   branches/freenet-freejvms/src/freenet/crypt/DSAGroupGenerator.java
   branches/freenet-freejvms/src/freenet/crypt/Global.java
   branches/freenet-freejvms/src/freenet/keys/NodeCHK.java
   branches/freenet-freejvms/src/freenet/node/Node.java
   branches/freenet-freejvms/src/freenet/node/TestnetHandler.java
   branches/freenet-freejvms/src/freenet/node/Version.java
Log:
Build 309 : merged changes from trunk since 7758

Modified: branches/freenet-freejvms/src/freenet/crypt/DSA.java
===================================================================
--- branches/freenet-freejvms/src/freenet/crypt/DSA.java        2006-02-03 
22:29:13 UTC (rev 7997)
+++ branches/freenet-freejvms/src/freenet/crypt/DSA.java        2006-02-03 
22:35:15 UTC (rev 7998)
@@ -90,7 +90,7 @@

     public static void main(String[] args) throws Exception {
        //DSAGroup g=DSAGroup.readFromField(args[0]);
-       DSAGroup g = Global.DSAgroupB;
+       DSAGroup g = Global.DSAgroupBigA;
         //Yarrow y=new Yarrow();
        DummyRandomSource y = new DummyRandomSource();
         DSAPrivateKey pk=new DSAPrivateKey(g, y);
@@ -132,13 +132,15 @@
                long t3 = System.currentTimeMillis();
                totalTimeSigning += (t2 - t1);
                totalTimeVerifying += (t3 - t2);
-               int rSize = sig.getR().toByteArray().length;
+               int rSize = sig.getR().bitLength();
+               rSize = (rSize / 8) + (rSize % 8 == 0 ? 0 : 1);
                totalRSize += rSize;
                if(rSize > maxRSize) maxRSize = rSize;
                int rUnsignedBitSize = sig.getR().bitLength();
                totalRUnsignedBitSize += rUnsignedBitSize;
                maxRUnsignedBitSize = Math.max(maxRUnsignedBitSize, 
rUnsignedBitSize);
-               int sSize = sig.getS().toByteArray().length;
+               int sSize = sig.getS().bitLength();
+               sSize = sSize / 8 +  (sSize % 8 == 0 ? 0 : 1);
                totalSSize += sSize;
                if(sSize > maxSSize) maxSSize = sSize;
         }

Modified: branches/freenet-freejvms/src/freenet/crypt/DSAGroupGenerator.java
===================================================================
--- branches/freenet-freejvms/src/freenet/crypt/DSAGroupGenerator.java  
2006-02-03 22:29:13 UTC (rev 7997)
+++ branches/freenet-freejvms/src/freenet/crypt/DSAGroupGenerator.java  
2006-02-03 22:35:15 UTC (rev 7998)
@@ -4,6 +4,8 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;

+import net.i2p.util.NativeBigInteger;
+
 import freenet.support.HexUtil;

 /**
@@ -70,7 +72,7 @@
                // 4: Check that q is prime, and 2q+1 is prime
                // 5: If not, restart from step 1

-               System.out.println("Maybe got prime: "+q.toString(16));
+               System.out.println("Maybe got prime: "+q.toString(16)+ " 
("+q.bitLength()+")");

                if(!isPrime(q))
                        return false;
@@ -108,7 +110,7 @@
                        }
                        Wbuf[0] = (byte) (Wbuf[0] | 128);

-                       BigInteger X = new BigInteger(1, Wbuf);
+                       BigInteger X = new NativeBigInteger(1, Wbuf);

                        // 9: Let c = X mod 2q. Set p = X - ( c - 1 ). 
Therefore p mod 2q = 1.

@@ -117,7 +119,7 @@

                        if(p.bitLength() >= keyLength-1) {
                                if(isPrime(p)) {
-                                       finish(p, q, seed, counter);
+                                       finish(r, hashLength, new 
NativeBigInteger(p), new NativeBigInteger(q), seed, counter);
                                        return true;
                                }
                        }
@@ -128,11 +130,46 @@
                }               
        }

-    private static void finish(BigInteger p, BigInteger q, byte[] seed, int 
counter) {
+    private static void finish(RandomSource r, int hashLength, 
NativeBigInteger p, NativeBigInteger q, byte[] seed, int counter) {
        System.out.println("SEED: "+HexUtil.bytesToHex(seed));
        System.out.println("COUNTER: "+counter);
-       System.out.println("p: "+p.toString(16));
-       System.out.println("q: "+q.toString(16));
+       System.out.println("p: "+p.toString(16)+" ("+p.bitLength()+")");
+       System.out.println("q: "+q.toString(16)+" ("+q.bitLength()+")");
+               // Now generate g (algorithm from appendix 4 of FIPS 186-2)
+       NativeBigInteger g;
+       do {
+               BigInteger e = p.subtract(BigInteger.ONE).divide(q);
+               NativeBigInteger h;
+               do {
+                       h = new NativeBigInteger(hashLength, r);
+               } while(h.compareTo(p.subtract(BigInteger.ONE)) >= 0);
+               g = (NativeBigInteger) h.modPow(e, p);
+       } while (g.equals(BigInteger.ONE));
+       DSAGroup group = new DSAGroup(p, q, g);
+       System.out.println("g: "+g.toHexString()+" ("+g.bitLength()+")");
+       System.out.println("Group: "+group.verboseToString());
+       long totalSigTime = 0;
+       long totalVerifyTime = 0;
+       for(int i=0;i<10000;i++) {
+       byte[] testHash = new byte[hashLength/8];
+       r.nextBytes(testHash);
+       NativeBigInteger m = new NativeBigInteger(1, testHash);
+       DSAPrivateKey privKey = new DSAPrivateKey(group, r);
+       DSAPublicKey pubKey = new DSAPublicKey(group, privKey);
+       long now = System.currentTimeMillis();
+       DSASignature sig = DSA.sign(group, privKey, m, r);
+       long middle = System.currentTimeMillis();
+       boolean success = DSA.verify(pubKey, sig, m);
+       long end = System.currentTimeMillis();
+       if(success) {
+               totalSigTime += (middle - now);
+               totalVerifyTime += (end - middle);
+       } else {
+               System.out.println("SIGNATURE VERIFICATION FAILED!!!");
+               System.exit(1);
+       }
+       }
+       System.out.println("Successfully signed and verified 10,000 times, 
average sig time "+(double)totalSigTime / 10000.0 +", average verify time 
"+(double)totalVerifyTime/10000.0);
        }

        private static byte[] increment(byte[] seed) {

Modified: branches/freenet-freejvms/src/freenet/crypt/Global.java
===================================================================
--- branches/freenet-freejvms/src/freenet/crypt/Global.java     2006-02-03 
22:29:13 UTC (rev 7997)
+++ branches/freenet-freejvms/src/freenet/crypt/Global.java     2006-02-03 
22:35:15 UTC (rev 7998)
@@ -10,7 +10,22 @@
  * @author Scott 
  */
 public final class Global {
-    
+
+       /**
+        * 2048-bit DSA group.
+        * SEED: 
315a9f1fa8000fbc5aba458476c83564b5927099ddb5a3df58544e37b996fdfa9e644f5d35f7d7c8266fc485b351ace2b06a11e24a17cc205e2a58f0a4147ed4
+        * COUNTER: 1653
+        * Primality of q, 2q+1, and p is assured 2^200:1.
+        */
+       public static final DSAGroup DSAgroupBigA = 
+               new DSAGroup(
+                       new NativeBigInteger( /* p */
+                               
"008608ac4f55361337f2a3e38ab1864ff3c98d66411d8d2afc9c526320c541f65078e86bc78494a5d73e4a9a67583f941f2993ed6c97dbc795dd88f0915c9cfbffc7e5373cde13e3c7ca9073b9106eb31bf82272ed0057f984a870a19f8a83bfa707d16440c382e62d3890473ea79e9d50c4ac6b1f1d30b10c32a02f685833c6278fc29eb3439c5333885614a115219b3808c92a37a0f365cd5e61b5861761dad9eff0ce23250f558848f8db932b87a3bd8d7a2f7cf99c75822bdc2fb7c1a1d78d0bcf81488ae0de5269ff853ab8b8f1f2bf3e6c0564573f612808f68dbfef49d5c9b4a705794cf7a424cd4eb1e0260552e67bfc1fa37b4a1f78b757ef185e86e9",
 16),
+                       new NativeBigInteger( /* q */
+                               
"00b143368abcd51f58d6440d5417399339a4d15bef096a2c5d8e6df44f52d6d379", 16),
+                       new NativeBigInteger( /* g */
+                               
"51a45ab670c1c9fd10bd395a6805d33339f5675e4b0d35defc9fa03aa5c2bf4ce9cfcdc256781291bfff6d546e67d47ae4e160f804ca72ec3c5492709f5f80f69e6346dd8d3e3d8433b6eeef63bce7f98574185c6aff161c9b536d76f873137365a4246cf414bfe8049ee11e31373cd0a6558e2950ef095320ce86218f992551cc292224114f3b60146d22dd51f8125c9da0c028126ffa85efd4f4bfea2c104453329cc1268a97e9a835c14e4a9a43c6a1886580e35ad8f1de230e1af32208ef9337f1924702a4514e95dc16f30f0c11e714a112ee84a9d8d6c9bc9e74e336560bb5cd4e91eabf6dad26bf0ca04807f8c31a2fc18ea7d45baab7cc997b53c356",
 16));
+       
     public static final DSAGroup 
     /* -- DSA Group A (v2)-----------------------------------
      * For use in KSKs 

Modified: branches/freenet-freejvms/src/freenet/keys/NodeCHK.java
===================================================================
--- branches/freenet-freejvms/src/freenet/keys/NodeCHK.java     2006-02-03 
22:29:13 UTC (rev 7997)
+++ branches/freenet-freejvms/src/freenet/keys/NodeCHK.java     2006-02-03 
22:35:15 UTC (rev 7998)
@@ -93,4 +93,8 @@
        public short getType() {
                return TYPE;
        }
+    
+    public byte[] getRoutingKey(){
+       return routingKey;
+    }
 }

Modified: branches/freenet-freejvms/src/freenet/node/Node.java
===================================================================
--- branches/freenet-freejvms/src/freenet/node/Node.java        2006-02-03 
22:29:13 UTC (rev 7997)
+++ branches/freenet-freejvms/src/freenet/node/Node.java        2006-02-03 
22:35:15 UTC (rev 7998)
@@ -49,6 +49,7 @@
 import freenet.keys.KeyBlock;
 import freenet.keys.NodeCHK;
 import freenet.store.BaseFreenetStore;
+import freenet.store.BerkeleyDBFreenetStore;
 import freenet.store.FreenetStore;
 import freenet.support.BucketFactory;
 import freenet.support.FileLoggerHook;
@@ -360,17 +361,20 @@
         downloadDir = new File("downloads");
         downloadDir.mkdir();
         try {
-            datastore = new 
BaseFreenetStore(prefix+"freenet-"+portNumber,16384); // 512MB
+            datastore = new BerkeleyDBFreenetStore(prefix+"store-"+portNumber, 
32768); // 1GB
         } catch (FileNotFoundException e1) {
             Logger.error(this, "Could not open datastore: "+e1, e1);
+            System.err.println("Could not open datastore: "+e1);
             System.exit(EXIT_STORE_FILE_NOT_FOUND);
             throw new Error();
         } catch (IOException e1) {
             Logger.error(this, "Could not open datastore: "+e1, e1);
+            System.err.println("Could not open datastore: "+e1);
             System.exit(EXIT_STORE_IOEXCEPTION);
             throw new Error();
         } catch (Exception e1) {
             Logger.error(this, "Could not open datastore: "+e1, e1);
+            System.err.println("Could not open datastore: "+e1);
             System.exit(EXIT_STORE_OTHER);
             throw new Error();
         }
@@ -441,6 +445,7 @@
                // FIXME reenable the above
                insertThrottle = new RequestThrottle(10000, 2.0F);
                insertStarter = new RequestStarter(insertThrottle, "Insert 
starter ("+portNumber+")");
+               System.err.println("Created Node on port "+port);
     }

     void start(SwapRequestInterval interval) {

Modified: branches/freenet-freejvms/src/freenet/node/TestnetHandler.java
===================================================================
--- branches/freenet-freejvms/src/freenet/node/TestnetHandler.java      
2006-02-03 22:29:13 UTC (rev 7997)
+++ branches/freenet-freejvms/src/freenet/node/TestnetHandler.java      
2006-02-03 22:35:15 UTC (rev 7998)
@@ -47,6 +47,7 @@
                serverThread = new Thread(this, "Testnet handler thread");
                serverThread.setDaemon(true);
                serverThread.start();
+               System.err.println("Started testnet handler on port 
"+testnetPort);
        }

        private final Node node;

Modified: branches/freenet-freejvms/src/freenet/node/Version.java
===================================================================
--- branches/freenet-freejvms/src/freenet/node/Version.java     2006-02-03 
22:29:13 UTC (rev 7997)
+++ branches/freenet-freejvms/src/freenet/node/Version.java     2006-02-03 
22:35:15 UTC (rev 7998)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 309;
+       public static final int buildNumber = 312;

        /** Oldest build of Fred we will talk to */
-       public static final int lastGoodBuild = 305;
+       public static final int lastGoodBuild = 310;

        /** The highest reported build of fred */
        public static int highestSeenBuild = buildNumber;

Copied: branches/freenet-freejvms/src/freenet/store/BerkeleyDBFreenetStore.java 
(from rev 7758, trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java)


Reply via email to