Author: toad
Date: 2006-01-10 17:32:10 +0000 (Tue, 10 Jan 2006)
New Revision: 7835

Modified:
   trunk/freenet/src/freenet/keys/InsertableClientSSK.java
   trunk/freenet/src/freenet/keys/NodeSSK.java
   trunk/freenet/src/freenet/keys/SSKBlock.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
339: (mandatory)
More work on SSKs. 
Inserts don't quite work yet. 
I don't think we store the pubkey anywhere, and I doubt that requests will 
work. 
But getting there!

Modified: trunk/freenet/src/freenet/keys/InsertableClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/InsertableClientSSK.java     2006-01-10 
17:04:34 UTC (rev 7834)
+++ trunk/freenet/src/freenet/keys/InsertableClientSSK.java     2006-01-10 
17:32:10 UTC (rev 7835)
@@ -106,12 +106,9 @@
         headers[x++] = (byte) (Key.ALGO_AES_PCFB_256 >> 8);
         headers[x++] = (byte) (Key.ALGO_AES_PCFB_256);
         // Then E(H(docname))
-        byte[] hDocname = md256.digest(docName.getBytes("UTF-8"));
-               aes.initialize(cryptoKey);
-               aes.encipher(hDocname, hDocname);
                // Copy to headers
-               System.arraycopy(hDocname, 0, headers, x, hDocname.length);
-               x += hDocname.length;
+               System.arraycopy(ehDocname, 0, headers, x, ehDocname.length);
+               x += ehDocname.length;
                // Now the encrypted headers
                byte[] encryptedHeaders = new 
byte[SSKBlock.ENCRYPTED_HEADERS_LENGTH];
                System.arraycopy(origDataHash, 0, encryptedHeaders, 0, 
origDataHash.length);
@@ -125,7 +122,7 @@
                if(encryptedHeaders.length != y)
                        throw new IllegalStateException("Have more bytes to 
generate encoding SSK");
                aes.initialize(cryptoKey);
-               pcfb.reset(hDocname);
+               pcfb.reset(ehDocname);
                pcfb.blockEncipher(encryptedHeaders, 0, 
encryptedHeaders.length);
                System.arraycopy(encryptedHeaders, 0, headers, x, 
encryptedHeaders.length);
                x+=encryptedHeaders.length;

Modified: trunk/freenet/src/freenet/keys/NodeSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/NodeSSK.java 2006-01-10 17:04:34 UTC (rev 
7834)
+++ trunk/freenet/src/freenet/keys/NodeSSK.java 2006-01-10 17:32:10 UTC (rev 
7835)
@@ -35,6 +35,10 @@
                this.encryptedHashedDocname = ehDocname;
                this.pubKeyHash = pkHash;
                this.pubKey = pubKey;
+               if(ehDocname.length != E_H_DOCNAME_SIZE)
+                       throw new IllegalArgumentException("ehDocname must be 
"+E_H_DOCNAME_SIZE+" bytes");
+               if(pkHash.length != PUBKEY_HASH_SIZE)
+                       throw new IllegalArgumentException("pubKeyHash must be 
"+PUBKEY_HASH_SIZE+" bytes");
        }

        // routingKey = H( E(H(docname)) + H(pubkey) )
@@ -64,7 +68,7 @@
         raf.readFully(buf);
         byte[] buf2 = new byte[PUBKEY_HASH_SIZE];
         raf.readFully(buf2);
-        return new NodeSSK(buf, buf2, null);
+        return new NodeSSK(buf2, buf, null);
     }

        public short getType() {

Modified: trunk/freenet/src/freenet/keys/SSKBlock.java
===================================================================
--- trunk/freenet/src/freenet/keys/SSKBlock.java        2006-01-10 17:04:34 UTC 
(rev 7834)
+++ trunk/freenet/src/freenet/keys/SSKBlock.java        2006-01-10 17:32:10 UTC 
(rev 7835)
@@ -8,6 +8,7 @@
 import freenet.crypt.DSA;
 import freenet.crypt.DSAPublicKey;
 import freenet.crypt.DSASignature;
+import freenet.support.HexUtil;

 /**
  * SSKBlock. Contains a full fetched key. Can do a node-level verification. 
Can 
@@ -84,7 +85,7 @@
                // Then E(H(docname))
                byte[] ehDocname = new byte[E_H_DOCNAME_LENGTH];
                System.arraycopy(headers, x, ehDocname, 0, ehDocname.length);
-               x+=E_H_DOCNAME_LENGTH;
+               x += E_H_DOCNAME_LENGTH;
                headersOffset = x; // is index to start of encrypted headers
                x += ENCRYPTED_HEADERS_LENGTH;
                // Extract the signature
@@ -116,7 +117,7 @@
                        }
                }
                if(!Arrays.equals(ehDocname, nodeKey.encryptedHashedDocname))
-                       throw new SSKVerifyException("E(H(docname)) wrong - 
wrong key??");
+                       throw new SSKVerifyException("E(H(docname)) wrong - 
wrong key?? \nfrom headers: "+HexUtil.bytesToHex(ehDocname)+"\nfrom key:     
"+HexUtil.bytesToHex(nodeKey.encryptedHashedDocname));
        }

        public Key getKey() {

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-01-10 17:04:34 UTC (rev 
7834)
+++ trunk/freenet/src/freenet/node/Version.java 2006-01-10 17:32:10 UTC (rev 
7835)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

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

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

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

Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2006-01-10 
17:04:34 UTC (rev 7834)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2006-01-10 
17:32:10 UTC (rev 7835)
@@ -294,7 +294,7 @@
        if(closed)
                return;

-       byte[] routingkey = ((NodeCHK)block.getKey()).getRoutingKey();
+       byte[] routingkey = block.getKey().getRoutingKey();
         byte[] data = block.getRawData();
         byte[] header = block.getRawHeaders();



Reply via email to