forked from I2P_Developers/i2p.i2p
Copy directly into buffer without intermediate buffer
This commit is contained in:
@ -2,6 +2,7 @@ package net.i2p.crypto;
|
|||||||
|
|
||||||
import gnu.crypto.hash.Sha256Standalone;
|
import gnu.crypto.hash.Sha256Standalone;
|
||||||
|
|
||||||
|
import java.security.DigestException;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
@ -20,6 +21,7 @@ public final class SHA256Generator {
|
|||||||
private final LinkedBlockingQueue<MessageDigest> _digests;
|
private final LinkedBlockingQueue<MessageDigest> _digests;
|
||||||
|
|
||||||
private static final boolean _useGnu;
|
private static final boolean _useGnu;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
boolean useGnu = false;
|
boolean useGnu = false;
|
||||||
try {
|
try {
|
||||||
@ -53,13 +55,13 @@ public final class SHA256Generator {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the hash and cache the result.
|
* Calculate the hash and cache the result.
|
||||||
|
* @param source what to hash
|
||||||
*/
|
*/
|
||||||
public final Hash calculateHash(byte[] source, int start, int len) {
|
public final Hash calculateHash(byte[] source, int start, int len) {
|
||||||
MessageDigest digest = acquire();
|
MessageDigest digest = acquire();
|
||||||
digest.update(source, start, len);
|
digest.update(source, start, len);
|
||||||
byte rv[] = digest.digest();
|
byte rv[] = digest.digest();
|
||||||
release(digest);
|
release(digest);
|
||||||
//return new Hash(rv);
|
|
||||||
return Hash.create(rv);
|
return Hash.create(rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,9 +73,12 @@ public final class SHA256Generator {
|
|||||||
public final void calculateHash(byte[] source, int start, int len, byte out[], int outOffset) {
|
public final void calculateHash(byte[] source, int start, int len, byte out[], int outOffset) {
|
||||||
MessageDigest digest = acquire();
|
MessageDigest digest = acquire();
|
||||||
digest.update(source, start, len);
|
digest.update(source, start, len);
|
||||||
byte rv[] = digest.digest();
|
try {
|
||||||
|
digest.digest(out, outOffset, Hash.HASH_LENGTH);
|
||||||
|
} catch (DigestException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
release(digest);
|
release(digest);
|
||||||
System.arraycopy(rv, 0, out, outOffset, rv.length);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private MessageDigest acquire() {
|
private MessageDigest acquire() {
|
||||||
|
Reference in New Issue
Block a user