Author: j16sdiz
Date: 2008-05-04 09:27:20 +0000 (Sun, 04 May 2008)
New Revision: 19720
Modified:
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/node/FNPPacketMangler.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/fcp/ClientPut.java
Log:
return SHA-256 instance after use
Modified: trunk/freenet/src/freenet/keys/ClientKSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/ClientKSK.java 2008-05-04 09:26:44 UTC
(rev 19719)
+++ trunk/freenet/src/freenet/keys/ClientKSK.java 2008-05-04 09:27:20 UTC
(rev 19720)
@@ -35,6 +35,7 @@
public static ClientKSK create(String keyword) {
MessageDigest md256 = SHA256.getMessageDigest();
+ try {
byte[] keywordHash;
try {
keywordHash = md256.digest(keyword.getBytes("UTF-8"));
@@ -46,11 +47,13 @@
DSAPublicKey pubKey = new DSAPublicKey(Global.DSAgroupBigA,
privKey);
byte[] pubKeyHash = md256.digest(pubKey.asBytes());
try {
- SHA256.returnMessageDigest(md256);
return new ClientKSK(keyword, pubKeyHash, pubKey,
privKey, keywordHash);
} catch (MalformedURLException e) {
throw new Error(e);
}
+ } finally {
+ SHA256.returnMessageDigest(md256);
+ }
}
}
Modified: trunk/freenet/src/freenet/keys/ClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/ClientSSK.java 2008-05-04 09:26:44 UTC
(rev 19719)
+++ trunk/freenet/src/freenet/keys/ClientSSK.java 2008-05-04 09:27:20 UTC
(rev 19720)
@@ -51,6 +51,7 @@
if(cryptoKey.length != CRYPTO_KEY_LENGTH)
throw new MalformedURLException("Decryption key wrong
length: "+cryptoKey.length+" should be "+CRYPTO_KEY_LENGTH);
MessageDigest md = SHA256.getMessageDigest();
+ try {
if(pubKey != null) {
byte[] pubKeyAsBytes = pubKey.asBytes();
md.update(pubKeyAsBytes);
@@ -73,7 +74,9 @@
} catch (UnsupportedCipherException e) {
throw new Error(e);
}
+ } finally {
SHA256.returnMessageDigest(md);
+ }
}
public ClientSSK(FreenetURI origURI) throws MalformedURLException {
Modified: trunk/freenet/src/freenet/keys/InsertableClientSSK.java
===================================================================
--- trunk/freenet/src/freenet/keys/InsertableClientSSK.java 2008-05-04
09:26:44 UTC (rev 19719)
+++ trunk/freenet/src/freenet/keys/InsertableClientSSK.java 2008-05-04
09:27:20 UTC (rev 19720)
@@ -85,6 +85,7 @@
}
// Pad it
MessageDigest md256 = SHA256.getMessageDigest();
+ try {
byte[] data;
// First pad it
if(compressedData.length != SSKBlock.DATA_LENGTH) {
@@ -174,7 +175,6 @@
if(x != SSKBlock.TOTAL_HEADERS_LENGTH)
throw new IllegalStateException("Too long");
try {
- SHA256.returnMessageDigest(md256);
return new ClientSSKBlock(data, headers, this, false);
// FIXME set last arg to true to not verify
} catch (SSKVerifyException e) {
IllegalStateException exception=new
IllegalStateException("Impossible encoding error: "+e.getMessage());
@@ -182,6 +182,9 @@
throw exception;
}
+ } finally {
+ SHA256.returnMessageDigest(md256);
+ }
}
private byte[] truncate(byte[] bs, int len) {
Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-05-04
09:26:44 UTC (rev 19719)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-05-04
09:27:20 UTC (rev 19720)
@@ -462,11 +462,9 @@
// Does the packet match IV E( H(data) data ) ?
PCFBMode pcfb = PCFBMode.create(authKey);
int ivLength = pcfb.lengthIV();
- MessageDigest md = SHA256.getMessageDigest();
int digestLength = HASH_LENGTH;
if(length < digestLength + ivLength + 5) {
if(logMINOR) Logger.minor(this, "Too short: "+length+"
should be at least "+(digestLength + ivLength + 5));
- SHA256.returnMessageDigest(md);
return false;
}
// IV at the beginning
@@ -486,7 +484,6 @@
if(logMINOR) Logger.minor(this, "Data length: "+dataLength+" (1
= "+byte1+" 2 = "+byte2+ ')');
if(dataLength > length - (ivLength+hash.length+2)) {
if(logMINOR) Logger.minor(this, "Invalid data length
"+dataLength+" ("+(length - (ivLength+hash.length+2))+") in tryProcessAuth");
- SHA256.returnMessageDigest(md);
return false;
}
// Decrypt the data
@@ -494,9 +491,7 @@
System.arraycopy(buf, dataStart, payload, 0, dataLength);
pcfb.blockDecipher(payload, 0, payload.length);
- md.update(payload);
- byte[] realHash = md.digest();
- SHA256.returnMessageDigest(md); md = null;
+ byte[] realHash = SHA256.digest(payload);
if(Arrays.equals(realHash, hash)) {
// Got one
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-05-04 09:26:44 UTC (rev
19719)
+++ trunk/freenet/src/freenet/node/Node.java 2008-05-04 09:27:20 UTC (rev
19720)
@@ -2608,6 +2608,7 @@
DSAPublicKey key2 = (DSAPublicKey) cachedPubKeys.get(w);
if((key2 != null) && !key2.equals(key)) {
MessageDigest md256 = SHA256.getMessageDigest();
+ try {
byte[] hashCheck = md256.digest(key.asBytes());
if(Arrays.equals(hashCheck, hash)) {
Logger.error(this, "Hash is
correct!!!");
@@ -2623,6 +2624,9 @@
} else {
Logger.error(this, "New hash is wrong");
}
+ } finally {
+ SHA256.returnMessageDigest(md256);
+ }
throw new IllegalArgumentException("Wrong
hash?? Already have different key with same hash!");
}
cachedPubKeys.push(w, key);
Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java 2008-05-04 09:26:44 UTC
(rev 19719)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java 2008-05-04 09:27:20 UTC
(rev 19720)
@@ -228,6 +228,7 @@
MessageDigest md = SHA256.getMessageDigest();
md.reset();
try {
+ try {
md.update(salt.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {}
try {
@@ -239,8 +240,10 @@
Logger.error(this, "Got IOE: " +e.getMessage(),
e);
throw new
MessageInvalidException(ProtocolErrorMessage.COULD_NOT_READ_FILE, "Unable to
access file: "+e, identifier, global);
}
- final byte[] foundHash = md.digest();
- SHA256.returnMessageDigest(md);
+ foundHash = md.digest();
+ } finally {
+ SHA256.returnMessageDigest(md);
+ }
if(logMINOR) Logger.minor(this, "FileHash result : we
found " + Base64.encode(foundHash) + " and were given " +
Base64.encode(saltedHash) + '.');