Author: nextgens
Date: 2006-09-07 21:07:05 +0000 (Thu, 07 Sep 2006)
New Revision: 10422
Modified:
trunk/freenet/src/freenet/clients/http/FProxyToadlet.java
trunk/freenet/src/freenet/crypt/DSAGroupGenerator.java
trunk/freenet/src/freenet/crypt/DSAPublicKey.java
trunk/freenet/src/freenet/crypt/DiffieHellmanContext.java
trunk/freenet/src/freenet/crypt/SHA256.java
trunk/freenet/src/freenet/crypt/StationToStationContext.java
trunk/freenet/src/freenet/keys/CHKBlock.java
trunk/freenet/src/freenet/keys/ClientCHKBlock.java
trunk/freenet/src/freenet/keys/ClientKSK.java
trunk/freenet/src/freenet/keys/ClientSSK.java
trunk/freenet/src/freenet/keys/InsertableClientSSK.java
trunk/freenet/src/freenet/keys/InsertableUSK.java
trunk/freenet/src/freenet/keys/Key.java
trunk/freenet/src/freenet/keys/NodeSSK.java
trunk/freenet/src/freenet/keys/SSKBlock.java
trunk/freenet/src/freenet/node/FNPPacketMangler.java
trunk/freenet/src/freenet/node/LocationManager.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/NodeARKInserter.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/SSKInsertSender.java
trunk/freenet/src/freenet/support/io/BucketTools.java
Log:
Various stuffs I've done in the train:
* Refactor PeerNode.getMessageDigest to SHA256.getMessageDigest() (may b
e debatable ; pro : generic handling of errors ; con : add a non-standard depend
ency to most of our classes)
* Fix some bugs in StationToStationContext : I hadn't the book on my kne
es when I did it ; it needs reviewing!
* Fix the "grab peerCryptoGroup" from ARK code and extend it to DH excha
nge
* Add a mutex when computing the signature on Node.exportPublicFieldSet(
)
* Remove signature from ARKs
* Remove some dead-code/unused inserts/catch blocks
* Make "final static" variables from Node public
* More untested work on FNPPacketMangler
Modified: trunk/freenet/src/freenet/clients/http/FProxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FProxyToadlet.java 2006-09-07
11:32:14 UTC (rev 10421)
+++ trunk/freenet/src/freenet/clients/http/FProxyToadlet.java 2006-09-07
21:07:05 UTC (rev 10422)
@@ -1,5 +1,6 @@
package freenet.clients.http;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
@@ -9,7 +10,6 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import freenet.client.DefaultMIMETypes;
import freenet.client.FetchException;
@@ -21,6 +21,7 @@
import freenet.config.Config;
import freenet.config.InvalidConfigValueException;
import freenet.config.SubConfig;
+import freenet.crypt.SHA256;
import freenet.keys.FreenetURI;
import freenet.node.Node;
import freenet.node.NodeClientCore;
@@ -337,15 +338,18 @@
}
private static String getForceValue(FreenetURI key, long time) {
- try {
- MessageDigest md5 =
MessageDigest.getInstance("SHA-256");
- md5.update(random);
- md5.update(key.toString(false).getBytes());
- md5.update(Long.toString(time /
FORCE_GRAIN_INTERVAL).getBytes());
- return HexUtil.bytesToHex(md5.digest());
- } catch (NoSuchAlgorithmException e) {
+ MessageDigest md = SHA256.getMessageDigest();
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+
+ try{
+ bos.write(random);
+ bos.write(key.toString(false).getBytes());
+ bos.write(Long.toString(time /
FORCE_GRAIN_INTERVAL).getBytes());
+ } catch (IOException e) {
throw new Error(e);
}
+
+ return HexUtil.bytesToHex(md.digest(bos.toByteArray()));
}
public static void maybeCreateFProxyEtc(NodeClientCore core, Node node,
Config config, SubConfig fproxyConfig) throws IOException,
InvalidConfigValueException {
Modified: trunk/freenet/src/freenet/crypt/DSAGroupGenerator.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAGroupGenerator.java 2006-09-07
11:32:14 UTC (rev 10421)
+++ trunk/freenet/src/freenet/crypt/DSAGroupGenerator.java 2006-09-07
21:07:05 UTC (rev 10422)
@@ -31,7 +31,7 @@
throw new IllegalArgumentException("hashLength must not
be greater than keyLength");
MessageDigest md;
if(hashLength == 256) {
- md = MessageDigest.getInstance("SHA-256");
+ md = SHA256.getMessageDigest();
} else if(hashLength == 160) {
md = MessageDigest.getInstance("SHA-160");
} else {
Modified: trunk/freenet/src/freenet/crypt/DSAPublicKey.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAPublicKey.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/crypt/DSAPublicKey.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -3,7 +3,6 @@
import java.math.BigInteger;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.io.*;
import freenet.support.Base64;
@@ -140,12 +139,8 @@
}
public byte[] asBytesHash() {
- try {
- MessageDigest md256 =
MessageDigest.getInstance("SHA-256");
- return md256.digest(asBytes());
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
+ return md256.digest(asBytes());
}
public byte[] asPaddedBytes() {
Modified: trunk/freenet/src/freenet/crypt/DiffieHellmanContext.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DiffieHellmanContext.java 2006-09-07
11:32:14 UTC (rev 10421)
+++ trunk/freenet/src/freenet/crypt/DiffieHellmanContext.java 2006-09-07
21:07:05 UTC (rev 10422)
@@ -1,7 +1,6 @@
package freenet.crypt;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import net.i2p.util.NativeBigInteger;
import freenet.support.HexUtil;
@@ -57,11 +56,8 @@
NativeBigInteger sharedSecret =
(NativeBigInteger) peerExponential.modPow(myExponent,
group.getP());
MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+
+ md = SHA256.getMessageDigest();
key = md.digest(sharedSecret.toByteArray());
if(logMINOR)
Logger.minor(this, "Key="+HexUtil.bytesToHex(key));
Modified: trunk/freenet/src/freenet/crypt/SHA256.java
===================================================================
--- trunk/freenet/src/freenet/crypt/SHA256.java 2006-09-07 11:32:14 UTC (rev
10421)
+++ trunk/freenet/src/freenet/crypt/SHA256.java 2006-09-07 21:07:05 UTC (rev
10422)
@@ -39,7 +39,14 @@
package freenet.crypt;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.tanukisoftware.wrapper.WrapperManager;
+
+import freenet.node.Node;
import freenet.support.HexUtil;
+import freenet.support.Logger;
/**
* @author Jeroen C. van Gelderen (gelderen at cryptix.org)
@@ -316,7 +323,24 @@
return HexUtil.bytesToHex(d);
}
- public static void main(String[] args) {
+ /**
+ * Create a new SHA-256 MessageDigest
+ * Either succeed or stop the node.
+ */
+ public static MessageDigest getMessageDigest() {
+ try {
+ return MessageDigest.getInstance("SHA-256");
+ } catch (NoSuchAlgorithmException e2) {
+ //TODO: maybe we should point to a HOWTO for freejvms
+ Logger.error(Node.class, "Check your JVM settings
especially the JCE!"+e2);
+ System.err.println("Check your JVM settings especially
the JCE!"+e2);
+ e2.printStackTrace();
+ WrapperManager.stop(Node.EXIT_CRAPPY_JVM);
+ }
+ return null;
+ }
+
+ public static void main(String[] args) {
byte[] buffer=new byte[1024];
SHA256 s=new SHA256();
try {
Modified: trunk/freenet/src/freenet/crypt/StationToStationContext.java
===================================================================
--- trunk/freenet/src/freenet/crypt/StationToStationContext.java
2006-09-07 11:32:14 UTC (rev 10421)
+++ trunk/freenet/src/freenet/crypt/StationToStationContext.java
2006-09-07 21:07:05 UTC (rev 10422)
@@ -4,6 +4,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigInteger;
+import java.security.MessageDigest;
import java.util.Random;
import net.i2p.util.NativeBigInteger;
@@ -15,7 +16,7 @@
// Set on startup
/** Random number */
- final int myRandom;
+ final NativeBigInteger myRandom;
/** My exponential */
final NativeBigInteger myExponential;
@@ -44,8 +45,9 @@
this.group = group;
this.hisPubKey = hisKey;
// How big is the random ? FIXME!
- this.myRandom = random.nextInt();
- this.myExponential = (NativeBigInteger) group.getG().pow(myRandom);
+ this.myRandom = new NativeBigInteger(2048, rand);
+ // Not sure of what I'm doing below.
+ this.myExponential = (NativeBigInteger) group.getG().modPow(myRandom,
group.getQ());
lastUsedTime = System.currentTimeMillis();
logMINOR = Logger.shouldLog(Logger.MINOR, this);
}
@@ -74,7 +76,8 @@
// Calculate key
if(logMINOR)
Logger.minor(this, "My exponent: "+myExponential.toHexString()+",
my random: "+myRandom+", peer's exponential: "+hisExponential.toHexString());
- key = (NativeBigInteger) hisExponential.pow(myRandom);
+ // Not sure of what I'm doing below
+ key = (NativeBigInteger) hisExponential.modPow(myRandom, group.getQ());
if(logMINOR)
Logger.minor(this, "Key="+HexUtil.bytesToHex(key.toByteArray()));
@@ -84,10 +87,12 @@
public synchronized byte[] concatAndSignAndCrypt(){
lastUsedTime = System.currentTimeMillis();
if(hisExponential == null) throw new IllegalStateException("Can't call
concatAndSignAndCrypt() until setOtherSideExponential() has been called!");
- if(key == null) throw new IllegalStateException("Can't call
concatAndSignAndCrypt() until getKey() has been called!");
+ if(key == null) getKey();
+ MessageDigest md = SHA256.getMessageDigest();
+
String message = new String("("+myExponential+","+hisExponential+")");
- DSASignature signature = DSA.sign(group, myPrivateKey, new
BigInteger(message.getBytes()), random);
+ DSASignature signature = DSA.sign(group, myPrivateKey, new
BigInteger(md.digest(message.getBytes())), random);
if(logMINOR)
Logger.minor(this, "The concat result : "+message+". Its signature
: "+signature);
@@ -113,19 +118,20 @@
lastUsedTime = System.currentTimeMillis();
if(data == null) return false;
if(hisExponential == null) throw new IllegalStateException("Can't call
concatAndSignAndCrypt() until setOtherSideExponential() has been called!");
- if(key == null) throw new IllegalStateException("Can't call
concatAndSignAndCrypt() until getKey() has been called!");
+ if(key == null) getKey();
ByteArrayInputStream is = new ByteArrayInputStream(data);
EncipherInputStream ei = new EncipherInputStream(is, getCipher());
final String message = new
String("("+hisExponential+","+myExponential+")");
- try{
+ MessageDigest md = SHA256.getMessageDigest();
+ try{
String signatureToCheck = ei.toString();
ei.close();
is.close();
- if(signatureToCheck != null && signatureToCheck.equals(message))
- if(DSA.verify(hisPubKey, new
DSASignature(signatureToCheck), new BigInteger(message.getBytes())))
+ if(signatureToCheck != null)
+ if(DSA.verify(hisPubKey, new
DSASignature(signatureToCheck), new BigInteger(md.digest(message.getBytes()))))
return true;
} catch(IOException e){
Modified: trunk/freenet/src/freenet/keys/CHKBlock.java
===================================================================
--- trunk/freenet/src/freenet/keys/CHKBlock.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/keys/CHKBlock.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -1,8 +1,9 @@
package freenet.keys;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
+import freenet.crypt.SHA256;
+
/**
* @author amphibian
*
@@ -57,12 +58,7 @@
// Check the hash
if(hashIdentifier != HASH_SHA256)
throw new CHKVerifyException("Hash not SHA-256");
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
md.update(headers);
md.update(data);
Modified: trunk/freenet/src/freenet/keys/ClientCHKBlock.java
===================================================================
--- trunk/freenet/src/freenet/keys/ClientCHKBlock.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/keys/ClientCHKBlock.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -2,13 +2,13 @@
import java.io.IOException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import org.spaceroots.mantissa.random.MersenneTwister;
import freenet.crypt.BlockCipher;
import freenet.crypt.PCFBMode;
+import freenet.crypt.SHA256;
import freenet.crypt.UnsupportedCipherException;
import freenet.crypt.ciphers.Rijndael;
import freenet.keys.Key.Compressed;
@@ -95,13 +95,7 @@
pcfb.blockDecipher(hbuf, 0, hbuf.length);
pcfb.blockDecipher(dbuf, 0, dbuf.length);
// Check: Decryption key == hash of data (not including header)
- MessageDigest md256;
- try {
- md256 = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e1) {
- // FIXME: log this properly?
- throw new Error(e1);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
byte[] dkey = md256.digest(dbuf);
if(!java.util.Arrays.equals(dkey, key.cryptoKey)) {
throw new CHKDecodeException("Check failed: decrypt key ==
H(data)");
@@ -149,13 +143,7 @@
// Now do the actual encode
- MessageDigest md256;
- try {
- md256 = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e1) {
- // FIXME: log this properly?
- throw new Error(e1);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
// First pad it
if(finalData.length != 32768) {
// Hash the data
Modified: trunk/freenet/src/freenet/keys/ClientKSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/ClientKSK.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/keys/ClientKSK.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -3,13 +3,13 @@
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import org.spaceroots.mantissa.random.MersenneTwister;
import freenet.crypt.DSAPrivateKey;
import freenet.crypt.DSAPublicKey;
import freenet.crypt.Global;
+import freenet.crypt.SHA256;
public class ClientKSK extends InsertableClientSSK {
@@ -31,12 +31,7 @@
}
public static ClientKSK create(String keyword) {
- MessageDigest md256;
- try {
- md256 = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
byte[] keywordHash;
try {
keywordHash = md256.digest(keyword.getBytes("UTF-8"));
Modified: trunk/freenet/src/freenet/keys/ClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/ClientSSK.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/keys/ClientSSK.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -3,10 +3,10 @@
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import freenet.crypt.DSAPublicKey;
+import freenet.crypt.SHA256;
import freenet.crypt.UnsupportedCipherException;
import freenet.crypt.ciphers.Rijndael;
import freenet.support.Logger;
@@ -37,12 +37,7 @@
throw new MalformedURLException("Pubkey hash wrong
length: "+pubKeyHash.length+" should be "+NodeSSK.PUBKEY_HASH_SIZE);
if(cryptoKey.length != CRYPTO_KEY_LENGTH)
throw new MalformedURLException("Decryption key wrong
length: "+cryptoKey.length+" should be "+CRYPTO_KEY_LENGTH);
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
if(pubKey != null) {
byte[] pubKeyAsBytes = pubKey.asBytes();
md.update(pubKeyAsBytes);
Modified: trunk/freenet/src/freenet/keys/InsertableClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/InsertableClientSSK.java 2006-09-07
11:32:14 UTC (rev 10421)
+++ trunk/freenet/src/freenet/keys/InsertableClientSSK.java 2006-09-07
21:07:05 UTC (rev 10422)
@@ -3,7 +3,6 @@
import java.io.IOException;
import java.net.MalformedURLException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import net.i2p.util.NativeBigInteger;
@@ -17,6 +16,7 @@
import freenet.crypt.Global;
import freenet.crypt.PCFBMode;
import freenet.crypt.RandomSource;
+import freenet.crypt.SHA256;
import freenet.crypt.UnsupportedCipherException;
import freenet.crypt.ciphers.Rijndael;
import freenet.keys.Key.Compressed;
@@ -44,12 +44,7 @@
DSAGroup g = Global.DSAgroupBigA;
DSAPrivateKey privKey = new DSAPrivateKey(new
NativeBigInteger(1, uri.getKeyVal()));
DSAPublicKey pubKey = new DSAPublicKey(g, privKey);
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
md.update(pubKey.asBytes());
return new InsertableClientSSK(uri.getDocName(), md.digest(),
pubKey, privKey, uri.getCryptoKey());
}
@@ -65,13 +60,7 @@
throw new SSKEncodeException(e.getMessage(), e);
}
// Pad it
- MessageDigest md256;
- try {
- md256 = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e1) {
- // FIXME: log this properly?
- throw new Error(e1);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
byte[] data;
// First pad it
if(compressedData.length != SSKBlock.DATA_LENGTH) {
@@ -191,13 +180,8 @@
DSAGroup g = Global.DSAgroupBigA;
DSAPrivateKey privKey = new DSAPrivateKey(g, r);
DSAPublicKey pubKey = new DSAPublicKey(g, privKey);
- MessageDigest md;
+ MessageDigest md = SHA256.getMessageDigest();
try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
- try {
return new InsertableClientSSK(docName,
md.digest(pubKey.asBytes()), pubKey, privKey, ckey);
} catch (MalformedURLException e) {
throw new Error(e);
Modified: trunk/freenet/src/freenet/keys/InsertableUSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/InsertableUSK.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/keys/InsertableUSK.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -2,7 +2,6 @@
import java.net.MalformedURLException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import net.i2p.util.NativeBigInteger;
@@ -10,6 +9,7 @@
import freenet.crypt.DSAPrivateKey;
import freenet.crypt.DSAPublicKey;
import freenet.crypt.Global;
+import freenet.crypt.SHA256;
import freenet.support.Logger;
/**
@@ -36,12 +36,7 @@
DSAGroup g = Global.DSAgroupBigA;
DSAPrivateKey privKey = new DSAPrivateKey(new
NativeBigInteger(1, uri.getKeyVal()));
DSAPublicKey pubKey = new DSAPublicKey(g, privKey);
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
md.update(pubKey.asBytes());
return new InsertableUSK(uri.getDocName(), md.digest(),
uri.getCryptoKey(), privKey, g, uri.getSuggestedEdition());
}
Modified: trunk/freenet/src/freenet/keys/Key.java
===================================================================
--- trunk/freenet/src/freenet/keys/Key.java 2006-09-07 11:32:14 UTC (rev
10421)
+++ trunk/freenet/src/freenet/keys/Key.java 2006-09-07 21:07:05 UTC (rev
10422)
@@ -4,8 +4,8 @@
import java.io.DataOutput;
import java.io.IOException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
+import freenet.crypt.SHA256;
import freenet.io.WritableToDataOutputStream;
import freenet.support.Fields;
import freenet.support.Logger;
@@ -69,12 +69,7 @@
*/
public synchronized double toNormalizedDouble() {
if(cachedNormalizedDouble > 0) return cachedNormalizedDouble;
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
md.update(routingKey);
int TYPE = getType();
md.update((byte)(TYPE >> 8));
Modified: trunk/freenet/src/freenet/keys/NodeSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/NodeSSK.java 2006-09-07 11:32:14 UTC (rev
10421)
+++ trunk/freenet/src/freenet/keys/NodeSSK.java 2006-09-07 21:07:05 UTC (rev
10422)
@@ -5,10 +5,10 @@
import java.io.DataOutputStream;
import java.io.IOException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import freenet.crypt.DSAPublicKey;
+import freenet.crypt.SHA256;
import freenet.support.Fields;
import freenet.support.HexUtil;
import freenet.support.Logger;
@@ -47,12 +47,7 @@
this.pubKeyHash = pkHash;
this.pubKey = pubKey;
if(pubKey != null) {
- MessageDigest md256;
- try {
- md256 = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
byte[] hash = md256.digest(pubKey.asBytes());
if(!Arrays.equals(hash, pkHash))
throw new SSKVerifyException("Invalid pubKey:
wrong hash");
@@ -66,12 +61,7 @@
// routingKey = H( E(H(docname)) + H(pubkey) )
private static byte[] makeRoutingKey(byte[] pkHash, byte[] ehDocname) {
- MessageDigest md256;
- try {
- md256 = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
md256.update(ehDocname);
md256.update(pkHash);
return md256.digest();
@@ -132,12 +122,7 @@
if(pubKey2 == null) return;
if((pubKey == null) || !pubKey2.equals(pubKey)) {
if(pubKey2 != null) {
- MessageDigest md256;
- try {
- md256 =
MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
byte[] newPubKeyHash =
md256.digest(pubKey2.asBytes());
if(Arrays.equals(pubKeyHash, newPubKeyHash)) {
if(pubKey != null) {
Modified: trunk/freenet/src/freenet/keys/SSKBlock.java
===================================================================
--- trunk/freenet/src/freenet/keys/SSKBlock.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/keys/SSKBlock.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -1,13 +1,13 @@
package freenet.keys;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import net.i2p.util.NativeBigInteger;
import freenet.crypt.DSA;
import freenet.crypt.DSAPublicKey;
import freenet.crypt.DSASignature;
+import freenet.crypt.SHA256;
import freenet.support.HexUtil;
/**
@@ -94,12 +94,7 @@
this.pubKey = nodeKey.getPubKey();
if(pubKey == null)
throw new SSKVerifyException("PubKey was null from
"+nodeKey);
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
// Now verify it
hashIdentifier = (short)(((headers[0] & 0xff) << 8) + (headers[1] &
0xff));
if(hashIdentifier != HASH_SHA256)
Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2006-09-07
11:32:14 UTC (rev 10421)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2006-09-07
21:07:05 UTC (rev 10422)
@@ -1,7 +1,6 @@
package freenet.node;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import net.i2p.util.NativeBigInteger;
@@ -11,6 +10,7 @@
import freenet.crypt.DiffieHellmanContext;
import freenet.crypt.EntropySource;
import freenet.crypt.PCFBMode;
+import freenet.crypt.SHA256;
import freenet.crypt.StationToStationContext;
import freenet.io.comm.*;
import freenet.io.comm.Peer.LocalAddressException;
@@ -150,7 +150,7 @@
// Does the packet match IV E( H(data) data ) ?
PCFBMode pcfb = new PCFBMode(authKey);
int ivLength = pcfb.lengthIV();
- MessageDigest md = getDigest();
+ MessageDigest md = SHA256.getMessageDigest();
int digestLength = md.getDigestLength();
if(length < digestLength + ivLength + 4) {
if(logMINOR) Logger.minor(this, "Too short: "+length+" should be
at least "+(digestLength + ivLength + 4));
@@ -281,7 +281,7 @@
}else if (negType == 1){
// We are gonna do simple StS
- if((packetType < 0) || (packetType > 2)) {
+ if((packetType < 0) || (packetType > 3)) {
Logger.error(this, "Decrypted auth packet but unknown
packet type "+packetType+" from "+replyTo+" possibly from "+pn);
return;
}
@@ -307,23 +307,45 @@
*
* Alice and Bob are now mutually authenticated and have a
shared secret.
* This secret, K, can then be used to encrypt further
communication.
+ *
+ * I suggest we add one more phase to simplify the code : 2d
is splited up
+ * into two packets so that both alice and bob send the same
kind of packets.
*/
- if(packetType == 0) {
- StationToStationContext ctx = new
StationToStationContext(node.getMyPrivKey(), pn.peerCryptoGroup, pn.peerPubKey,
node.random);
+ // be carefull with StationToStationContext constructors ; it
will be expensive in terms of cpu and can be DoSed, on the other hand, when
shall we reset the context ? maybe creating a new packetType ... with a time
based restriction
+ if(packetType == 0) { // 0 won't be received, but we need to
initialize the exchange
+ StationToStationContext ctx =
pn.getKeyAgreementSchemeContext()== null ? new
StationToStationContext(node.getMyPrivKey(), pn.peerCryptoGroup, pn.peerPubKey,
node.random) : (StationToStationContext)pn.getKeyAgreementSchemeContext();
if(ctx == null) return;
- // Send g^x%p
+ pn.setKeyAgreementSchemeContext(ctx);
+ // We send g^x
sendFirstStSPacket(1, ctx.getOurExponential(), pn,
replyTo);
+ } else if(packetType == 2) {
+ StationToStationContext ctx =
pn.getKeyAgreementSchemeContext()== null ? new
StationToStationContext(node.getMyPrivKey(), pn.peerCryptoGroup, pn.peerPubKey,
node.random) : (StationToStationContext)pn.getKeyAgreementSchemeContext();
+ if(ctx == null) return;
+ pn.setKeyAgreementSchemeContext(ctx);
+ // We got g^y
+ ctx.setOtherSideExponential(new
NativeBigInteger(payload));
+ // We send E(S(H( our exponential, his exponential)))
+ sendSecondStSPacket(3, ctx, pn, replyTo, payload);
} else if(packetType == 1) {
- StationToStationContext ctx = new
StationToStationContext(node.getMyPrivKey(), pn.peerCryptoGroup, pn.peerPubKey,
node.random);
+ StationToStationContext ctx = (StationToStationContext)
pn.getKeyAgreementSchemeContext();
if(ctx == null) return;
- sendSecondStSPacket(2, ctx, pn, replyTo, payload);
- } else if(packetType == 2) {
-
+ // We got g^x
+ ctx.setOtherSideExponential(new
NativeBigInteger(payload));
+ // We send g^y
+ sendFirstStSPacket(2, ctx.getOurExponential(), pn,
replyTo);
+ // We send E(S(H( our exponential, his exponential)))
+ sendSecondStSPacket(3, ctx, pn, replyTo, payload);
+ } else if(packetType == 3) {
+ StationToStationContext ctx = (StationToStationContext)
pn.getKeyAgreementSchemeContext();
+ if(ctx == null) return;
+ if(!ctx.isAuthentificationSuccessfull(payload)) return;
+ // we are done if the above test is sucessfull!
}
-
- // Not implemented yet... fail
- return;
+
+ /*
+ * We need some kind of locking above... and maybe some DoS
protection
+ */
}
}
@@ -352,7 +374,7 @@
System.arraycopy(Fields.longToBytes(node.bootID), 0, data, 0, 8);
System.arraycopy(myRef, 0, data, 8, myRef.length);
- MessageDigest md = getDigest();
+ MessageDigest md = SHA256.getMessageDigest();
byte[] hash = md.digest(data);
@@ -433,7 +455,7 @@
PCFBMode pcfb = new PCFBMode(cipher);
byte[] iv = new byte[pcfb.lengthIV()];
node.random.nextBytes(iv);
- MessageDigest md = getDigest();
+ MessageDigest md = SHA256.getMessageDigest();
byte[] hash = md.digest(output);
if(logMINOR) Logger.minor(this, "Data hash:
"+HexUtil.bytesToHex(hash));
byte[] data = new byte[iv.length + hash.length + 2 /* length */ +
output.length];
@@ -496,7 +518,7 @@
System.arraycopy(payload, 3+ivLength+HASH_LENGTH, data, 0, dataLength);
pcfb.blockDecipher(data, 0, dataLength);
// Check the hash
- MessageDigest md = getDigest();
+ MessageDigest md = SHA256.getMessageDigest();
byte[] realHash = md.digest(data);
if(Arrays.equals(realHash, hash)) {
// Success!
@@ -571,17 +593,6 @@
}
/**
- * Create a new SHA-256 MessageDigest
- */
- private MessageDigest getDigest() {
- try {
- return MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
- }
-
- /**
* Try to process an incoming packet with a given PeerNode.
* We need to know where the packet has come from in order to
* decrypt and authenticate it.
@@ -659,7 +670,7 @@
//Logger.minor(this, "Plaintext:\n"+HexUtil.bytesToHex(plaintext));
- MessageDigest md = getDigest();
+ MessageDigest md = SHA256.getMessageDigest();
md.update(seqBuf);
md.update(plaintext);
byte[] realHash = md.digest();
@@ -1383,12 +1394,7 @@
throw new IllegalStateException("Block size must be half key size:
blockSize="+
sessionCipher.getBlockSize()+",
keySize="+sessionCipher.getKeySize());
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
int digestLength = md.getDigestLength();
Modified: trunk/freenet/src/freenet/node/LocationManager.java
===================================================================
--- trunk/freenet/src/freenet/node/LocationManager.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/node/LocationManager.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -1,7 +1,6 @@
package freenet.node;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
@@ -9,6 +8,7 @@
import java.util.Date;
import freenet.crypt.RandomSource;
+import freenet.crypt.SHA256;
import freenet.io.comm.DMT;
import freenet.io.comm.DisconnectedException;
import freenet.io.comm.Message;
@@ -199,12 +199,7 @@
byte[] hisHash =
((ShortBuffer)origMessage.getObject(DMT.HASH)).getData();
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
if(hisHash.length != md.getDigestLength()) {
Logger.error(this, "Invalid SwapRequest from peer: wrong
length hash "+hisHash.length+" on "+uid);
@@ -347,12 +342,7 @@
myValueLong[i+2] = Double.doubleToLongBits(friendLocs[i]);
byte[] myValue = Fields.longsToBytes(myValueLong);
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
byte[] myHash = md.digest(myValue);
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-09-07 11:32:14 UTC (rev
10421)
+++ trunk/freenet/src/freenet/node/Node.java 2006-09-07 21:07:05 UTC (rev
10422)
@@ -22,7 +22,6 @@
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
@@ -47,6 +46,7 @@
import freenet.crypt.DSASignature;
import freenet.crypt.Global;
import freenet.crypt.RandomSource;
+import freenet.crypt.SHA256;
import freenet.io.comm.DMT;
import freenet.io.comm.DisconnectedException;
import freenet.io.comm.FreenetInetAddress;
@@ -338,6 +338,8 @@
byte[] identityHashHash;
/** The signature of the above fieldset */
private DSASignature myReferenceSignature = null;
+ /** A synchronization object used while signing the reference fiedlset
*/
+ private volatile Object referenceSync = new Object();
/** An ordered version of the FieldSet, without the signature */
private String mySignedReference = null;
private String myName;
@@ -363,31 +365,31 @@
final TokenBucket requestOutputThrottle;
final TokenBucket requestInputThrottle;
private boolean inputLimitDefault;
- static short MAX_HTL = 10;
- static final int EXIT_STORE_FILE_NOT_FOUND = 1;
- static final int EXIT_STORE_IOEXCEPTION = 2;
- static final int EXIT_STORE_OTHER = 3;
- static final int EXIT_USM_DIED = 4;
+ public static short MAX_HTL = 10;
+ public static final int EXIT_STORE_FILE_NOT_FOUND = 1;
+ public static final int EXIT_STORE_IOEXCEPTION = 2;
+ public static final int EXIT_STORE_OTHER = 3;
+ public static final int EXIT_USM_DIED = 4;
public static final int EXIT_YARROW_INIT_FAILED = 5;
- static final int EXIT_TEMP_INIT_ERROR = 6;
- static final int EXIT_TESTNET_FAILED = 7;
+ public static final int EXIT_TEMP_INIT_ERROR = 6;
+ public static final int EXIT_TESTNET_FAILED = 7;
public static final int EXIT_MAIN_LOOP_LOST = 8;
public static final int EXIT_COULD_NOT_BIND_USM = 9;
- static final int EXIT_IMPOSSIBLE_USM_PORT = 10;
- static final int EXIT_NO_AVAILABLE_UDP_PORTS = 11;
+ public static final int EXIT_IMPOSSIBLE_USM_PORT = 10;
+ public static final int EXIT_NO_AVAILABLE_UDP_PORTS = 11;
public static final int EXIT_TESTNET_DISABLED_NOT_SUPPORTED = 12;
- static final int EXIT_INVALID_STORE_SIZE = 13;
- static final int EXIT_BAD_DOWNLOADS_DIR = 14;
- static final int EXIT_BAD_NODE_DIR = 15;
- static final int EXIT_BAD_TEMP_DIR = 16;
- static final int EXIT_COULD_NOT_START_FCP = 17;
- static final int EXIT_COULD_NOT_START_FPROXY = 18;
- static final int EXIT_COULD_NOT_START_TMCI = 19;
- static final int EXIT_CRAPPY_JVM = 255;
+ public static final int EXIT_INVALID_STORE_SIZE = 13;
+ public static final int EXIT_BAD_DOWNLOADS_DIR = 14;
+ public static final int EXIT_BAD_NODE_DIR = 15;
+ public static final int EXIT_BAD_TEMP_DIR = 16;
+ public static final int EXIT_COULD_NOT_START_FCP = 17;
+ public static final int EXIT_COULD_NOT_START_FPROXY = 18;
+ public static final int EXIT_COULD_NOT_START_TMCI = 19;
+ public static final int EXIT_CRAPPY_JVM = 255;
public static final int EXIT_DATABASE_REQUIRES_RESTART = 20;
public static final int EXIT_COULD_NOT_START_UPDATER = 21;
- static final int EXIT_EXTRA_PEER_DATA_DIR = 22;
- static final int EXIT_THROTTLE_FILE_ERROR = 23;
+ public static final int EXIT_EXTRA_PEER_DATA_DIR = 22;
+ public static final int EXIT_THROTTLE_FILE_ERROR = 23;
public static final int PEER_NODE_STATUS_CONNECTED = 1;
public static final int PEER_NODE_STATUS_ROUTING_BACKED_OFF = 2;
public static final int PEER_NODE_STATUS_TOO_NEW = 3;
@@ -513,12 +515,7 @@
} catch (IllegalBase64Exception e2) {
throw new IOException();
}
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
identityHash = md.digest(myIdentity);
identityHashHash = md.digest(identityHash);
String loc = fs.get("location");
@@ -633,12 +630,7 @@
// FIXME use a real IP!
myIdentity = new byte[32];
r.nextBytes(myIdentity);
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md = SHA256.getMessageDigest();
identityHash = md.digest(myIdentity);
identityHashHash = md.digest(identityHash);
myName = newName();
@@ -1658,26 +1650,23 @@
fs.put("ark.number", Long.toString(this.myARKNumber));
fs.put("ark.pubURI", this.myARK.getURI().toString(false));
- // TODO: maybe synchronize ?
- if(myReferenceSignature == null || mySignedReference == null ||
!mySignedReference.equals(fs.toOrderedString())){
- mySignedReference = fs.toOrderedString();
- try{
- MessageDigest md = MessageDigest.getInstance("SHA-256");
- myReferenceSignature = DSA.sign(myCryptoGroup,
myPrivKey, new BigInteger(md.digest(mySignedReference.getBytes("UTF-8"))),
random);
- } catch(UnsupportedEncodingException e){
- //duh ?
- Logger.error(this, "Error while signing the
node identity!"+e);
- System.err.println("Error while signing the
node identity!"+e);
- e.printStackTrace();
- exit(EXIT_CRAPPY_JVM);
- } catch (NoSuchAlgorithmException e2) {
- Logger.error(this, "Error while signing the
node identity!"+e2);
- System.err.println("Error while signing the
node identity!"+e2);
- e2.printStackTrace();
- exit(EXIT_CRAPPY_JVM);
- }
+ synchronized (referenceSync) {
+ if(myReferenceSignature == null || mySignedReference ==
null || !mySignedReference.equals(fs.toOrderedString())){
+ mySignedReference = fs.toOrderedString();
+
+ try{
+ MessageDigest md =
SHA256.getMessageDigest();
+ myReferenceSignature =
DSA.sign(myCryptoGroup, myPrivKey, new
BigInteger(md.digest(mySignedReference.getBytes("UTF-8"))), random);
+ } catch(UnsupportedEncodingException e){
+ //duh ?
+ Logger.error(this, "Error while signing
the node identity!"+e);
+ System.err.println("Error while signing
the node identity!"+e);
+ e.printStackTrace();
+ exit(EXIT_CRAPPY_JVM);
+ }
+ }
+ fs.put("sig", myReferenceSignature.toString());
}
- fs.put("sig", myReferenceSignature.toString());
if(logMINOR) Logger.minor(this, "My reference: "+fs);
return fs;
@@ -2300,13 +2289,7 @@
synchronized(cachedPubKeys) {
DSAPublicKey key2 = (DSAPublicKey) cachedPubKeys.get(w);
if((key2 != null) && !key2.equals(key)) {
- MessageDigest md256;
- // Check the hash.
- try {
- md256 =
MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- throw new Error(e);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
byte[] hashCheck = md256.digest(key.asBytes());
if(Arrays.equals(hashCheck, hash)) {
Logger.error(this, "Hash is
correct!!!");
Modified: trunk/freenet/src/freenet/node/NodeARKInserter.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeARKInserter.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/node/NodeARKInserter.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -112,6 +112,7 @@
// Delete entire ark.* field for now. Changing this and
automatically moving to the new may be supported in future.
fs.removeSubset("ark");
fs.removeValue("location");
+ fs.removeValue("sig");
//fs.remove("version"); - keep version because of its
significance in reconnection
String s = fs.toString();
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -16,7 +16,6 @@
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Iterator;
@@ -34,6 +33,7 @@
import freenet.crypt.DSAPublicKey;
import freenet.crypt.DSASignature;
import freenet.crypt.KeyAgreementSchemeContext;
+import freenet.crypt.SHA256;
import freenet.crypt.UnsupportedCipherException;
import freenet.crypt.ciphers.Rijndael;
import freenet.io.comm.DMT;
@@ -336,12 +336,7 @@
throw new FSParseException(e);
}
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e2) {
- throw new Error(e2);
- }
+ MessageDigest md = SHA256.getMessageDigest();
if(identity == null) throw new FSParseException("No identity");
identityHash = md.digest(identity);
@@ -618,35 +613,12 @@
FreenetURI uri = new FreenetURI(arkPubKey);
ClientSSK ssk = new ClientSSK(uri);
ark = new USK(ssk, arkNo);
-
- // Maybe synchronize ?
- if(peerCryptoGroup == null){
- SimpleFieldSet sfs = fs.subset("dsaGroup");
- Logger.normal(this, "Picking up peerCrypto
group from ark for "+this.privateDarknetComment);
- if(sfs == null)
- this.peerCryptoGroup = null;
- else
- this.peerCryptoGroup =
DSAGroup.create(sfs);
- }
-
- if(peerPubKey == null){
- SimpleFieldSet sfs = fs.subset("dsaGroup");
- Logger.normal(this, "Picking up dsaGroup from
ark for "+this.privateDarknetComment);
-
- sfs = fs.subset("dsaPubKey");
- if(sfs == null)
- this.peerPubKey = null;
- else
- this.peerPubKey =
DSAPublicKey.create(sfs, peerCryptoGroup);
- }
- }
+ }
} catch (MalformedURLException e) {
Logger.error(this, "Couldn't parse ARK info for "+this+": "+e,
e);
} catch (NumberFormatException e) {
Logger.error(this, "Couldn't parse ARK info for "+this+": "+e,
e);
- } catch (IllegalBase64Exception e) {
- Logger.error(this, "Couldn't parse ARK info for "+this+": "+e,
e);
- }
+ }
synchronized(this) {
if(ark != null) {
@@ -1480,7 +1452,7 @@
return true;
}
- private final Object arkFetcherSync = new Object();
+ private volatile Object arkFetcherSync = new Object();
void startARKFetcher() {
// FIXME any way to reduce locking here?
@@ -1664,6 +1636,27 @@
byte[] newIdentity = Base64.decode(identityString);
if(!Arrays.equals(newIdentity, identity))
throw new FSParseException("Identity changed!!");
+
+ // FIXME: throw an exception if not present once everyone has
updated but do NOT replace things
+ if(peerCryptoGroup == null){
+ SimpleFieldSet sfs = fs.subset("dsaGroup");
+ Logger.normal(this, "Picking up peerCrypto group from "+
(forARK ? "ark" : "DH") +" for "+Base64.encode(this.identity));
+ if(sfs == null)
+ this.peerCryptoGroup = null;
+ else
+ this.peerCryptoGroup = DSAGroup.create(fs);
+ }
+
+ if(peerPubKey == null){
+ SimpleFieldSet sfs = fs.subset("dsaGroup");
+ Logger.normal(this, "Picking up dsaGroup from "+ (forARK ?
"ark" : "DH") +" for "+Base64.encode(this.identity));
+
+ sfs = fs.subset("dsaPubKey");
+ if(sfs == null)
+ this.peerPubKey = null;
+ else
+ this.peerPubKey = DSAPublicKey.create(fs,
peerCryptoGroup);
+ }
} catch (NumberFormatException e) {
throw new FSParseException(e);
} catch (IllegalBase64Exception e) {
@@ -1730,7 +1723,7 @@
// DO NOT change detectedPeer !!!
// The given physical.udp may be WRONG!!!
-
+
String name = fs.get("myName");
if(name == null) throw new FSParseException("No name");
// In future, ARKs may support automatic transition when the ARK key
is changed.
Modified: trunk/freenet/src/freenet/node/SSKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/SSKInsertSender.java 2006-09-07 11:32:14 UTC
(rev 10421)
+++ trunk/freenet/src/freenet/node/SSKInsertSender.java 2006-09-07 21:07:05 UTC
(rev 10422)
@@ -1,11 +1,11 @@
package freenet.node;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashSet;
import freenet.crypt.DSAPublicKey;
+import freenet.crypt.SHA256;
import freenet.io.comm.DMT;
import freenet.io.comm.DisconnectedException;
import freenet.io.comm.Message;
@@ -87,12 +87,8 @@
throw new IllegalArgumentException("Must have pubkey to insert
data!!");
// pubKey.fingerprint() is not the same as hash(pubKey.asBytes())).
FIXME it should be!
byte[] pubKeyAsBytes = pubKey.asBytes();
- try {
- MessageDigest md256 =
MessageDigest.getInstance("SHA-256");
- pubKeyHash = md256.digest(pubKeyAsBytes);
- } catch (NoSuchAlgorithmException e) {
- throw new Error("SHA-256 not supported by system!: "+e);
- }
+ MessageDigest md256 = SHA256.getMessageDigest();
+ pubKeyHash = md256.digest(pubKeyAsBytes);
this.block = block;
startTime = System.currentTimeMillis();
}
Modified: trunk/freenet/src/freenet/support/io/BucketTools.java
===================================================================
--- trunk/freenet/src/freenet/support/io/BucketTools.java 2006-09-07
11:32:14 UTC (rev 10421)
+++ trunk/freenet/src/freenet/support/io/BucketTools.java 2006-09-07
21:07:05 UTC (rev 10422)
@@ -11,11 +11,10 @@
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
-import freenet.support.Logger;
+import freenet.crypt.SHA256;
/**
* Helper functions for working with Buckets.
@@ -349,7 +348,7 @@
public static byte[] hash(Bucket data) throws IOException {
InputStream is = null;
try {
- MessageDigest md = MessageDigest.getInstance("SHA-256");
+ MessageDigest md = SHA256.getMessageDigest();
is = data.getInputStream();
long bucketLength = data.size();
long bytesRead = 0;
@@ -365,9 +364,6 @@
if((bytesRead != bucketLength) && (bucketLength > 0))
throw new IOException("Read "+bytesRead+" but
bucket length "+bucketLength+"!");
return md.digest();
- } catch (NoSuchAlgorithmException e) {
- Logger.error(BucketTools.class, "No such digest:
SHA-256 !!");
- throw new Error("No such digest: SHA-256 !!");
} finally {
if(is != null) is.close();
}