Author: toad
Date: 2006-01-21 15:47:34 +0000 (Sat, 21 Jan 2006)
New Revision: 7893
Modified:
trunk/freenet/src/freenet/crypt/DSAPublicKey.java
trunk/freenet/src/freenet/keys/ClientSSK.java
trunk/freenet/src/freenet/keys/NodeSSK.java
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
366: Verify DSAPublicKey's from the datastore. Delete them if they are invalid.
Modified: trunk/freenet/src/freenet/crypt/DSAPublicKey.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAPublicKey.java 2006-01-20 21:00:36 UTC
(rev 7892)
+++ trunk/freenet/src/freenet/crypt/DSAPublicKey.java 2006-01-21 15:47:34 UTC
(rev 7893)
@@ -2,6 +2,8 @@
package freenet.crypt;
import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.io.*;
import freenet.support.HexUtil;
@@ -133,6 +135,15 @@
return bytes;
}
+ public byte[] asBytesHash() {
+ try {
+ MessageDigest md256 =
MessageDigest.getInstance("SHA-256");
+ return md256.digest(asBytes());
+ } catch (NoSuchAlgorithmException e) {
+ throw new Error(e);
+ }
+ }
+
public byte[] asPaddedBytes() {
byte[] asBytes = asBytes();
if(asBytes.length == PADDED_SIZE)
Modified: trunk/freenet/src/freenet/keys/ClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/ClientSSK.java 2006-01-20 21:00:36 UTC
(rev 7892)
+++ trunk/freenet/src/freenet/keys/ClientSSK.java 2006-01-21 15:47:34 UTC
(rev 7893)
@@ -9,6 +9,7 @@
import freenet.crypt.DSAPublicKey;
import freenet.crypt.UnsupportedCipherException;
import freenet.crypt.ciphers.Rijndael;
+import freenet.support.Logger;
public class ClientSSK extends ClientKey {
@@ -100,6 +101,7 @@
return new NodeSSK(pubKeyHash, ehDocname, pubKey);
} catch (SSKVerifyException e) {
IllegalStateException x = new
IllegalStateException("Have already verified and yet it fails!: "+e);
+ Logger.error(this, "Have already verified and yet it
fails!: "+e);
x.initCause(e);
throw x;
}
Modified: trunk/freenet/src/freenet/keys/NodeSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/NodeSSK.java 2006-01-20 21:00:36 UTC (rev
7892)
+++ trunk/freenet/src/freenet/keys/NodeSSK.java 2006-01-21 15:47:34 UTC (rev
7893)
@@ -131,7 +131,7 @@
if(pubKey == pubKey2) return;
if(pubKey2 == null) return;
if(pubKey == null || !pubKey2.equals(pubKey)) {
- if(pubKey != null) {
+ if(pubKey2 != null) {
MessageDigest md256;
try {
md256 =
MessageDigest.getInstance("SHA-256");
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-01-20 21:00:36 UTC (rev
7892)
+++ trunk/freenet/src/freenet/node/Version.java 2006-01-21 15:47:34 UTC (rev
7893)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 365;
+ public static final int buildNumber = 366;
/** Oldest build of Fred we will talk to */
public static final int lastGoodBuild = 359;
Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2006-01-20
21:00:36 UTC (rev 7892)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2006-01-21
15:47:34 UTC (rev 7893)
@@ -4,6 +4,7 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.util.Arrays;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.tuple.TupleInput;
@@ -331,6 +332,17 @@
return null;
}
+ if(!Arrays.equals(block.asBytesHash(), hash)) {
+ Logger.normal(this, "Does not verify, setting
accessTime to 0 for : "+HexUtil.bytesToHex(hash));
+ storeBlock.setRecentlyUsedToZero();
+ DatabaseEntry updateDBE = new DatabaseEntry();
+
storeBlockTupleBinding.objectToEntry(storeBlock, updateDBE);
+ c.putCurrent(updateDBE);
+ c.close();
+ t.commit();
+ return null;
+ }
+
if(!dontPromote)
{
storeBlock.updateRecentlyUsed();