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();


Reply via email to