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