I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Unverified Commit b2e80fce authored by zzz's avatar zzz
Browse files

Crypto: Allow external use of pooled SHA256 instances

parent 3abbc1b3
No related branches found
No related tags found
No related merge requests found
...@@ -47,7 +47,7 @@ public final class SHA256Generator { ...@@ -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 { ...@@ -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 { ...@@ -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);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment