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)