forked from I2P_Developers/i2p.i2p
Crypto: Allow external use of pooled SHA256 instances
This commit is contained in:
@ -47,7 +47,7 @@ public final class SHA256Generator {
|
|||||||
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);
|
releaseit(digest);
|
||||||
return Hash.create(rv);
|
return Hash.create(rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,11 +64,19 @@ public final class SHA256Generator {
|
|||||||
} catch (DigestException e) {
|
} catch (DigestException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
} finally {
|
} finally {
|
||||||
release(digest);
|
releaseit(digest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private MessageDigest acquire() {
|
/**
|
||||||
|
* Get a MessageDigest instance from the pool,
|
||||||
|
* for uses where the one-shot calculateHash()
|
||||||
|
* would require copying the data.
|
||||||
|
* Return the instance via release() when done.
|
||||||
|
*
|
||||||
|
* @since public since 0.9.66
|
||||||
|
*/
|
||||||
|
public MessageDigest acquire() {
|
||||||
MessageDigest rv = _digests.poll();
|
MessageDigest rv = _digests.poll();
|
||||||
if (rv != null)
|
if (rv != null)
|
||||||
rv.reset();
|
rv.reset();
|
||||||
@ -77,7 +85,22 @@ public final class SHA256Generator {
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void release(MessageDigest digest) {
|
/**
|
||||||
|
* Release a digest back to the pool
|
||||||
|
* @param digest must be SHA-256
|
||||||
|
* @since public since 0.9.66
|
||||||
|
*/
|
||||||
|
public void release(MessageDigest digest) {
|
||||||
|
if (!digest.getAlgorithm().equals("SHA-256"))
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
_digests.offer(digest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release a digest back to the pool - internal version
|
||||||
|
* @since 0.9.66 renamed from release()
|
||||||
|
*/
|
||||||
|
private void releaseit(MessageDigest digest) {
|
||||||
_digests.offer(digest);
|
_digests.offer(digest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user