From b2e80fce3d49ccb4b437f05c84dd24b8ae52040d Mon Sep 17 00:00:00 2001 From: zzz <zzz@i2pmail.org> Date: Fri, 7 Feb 2025 11:44:35 -0500 Subject: [PATCH] Crypto: Allow external use of pooled SHA256 instances --- .../src/net/i2p/crypto/SHA256Generator.java | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/core/java/src/net/i2p/crypto/SHA256Generator.java b/core/java/src/net/i2p/crypto/SHA256Generator.java index 7f79575d4b..af3dbd149e 100644 --- a/core/java/src/net/i2p/crypto/SHA256Generator.java +++ b/core/java/src/net/i2p/crypto/SHA256Generator.java @@ -47,7 +47,7 @@ public final class SHA256Generator { MessageDigest digest = acquire(); digest.update(source, start, len); byte rv[] = digest.digest(); - release(digest); + releaseit(digest); return Hash.create(rv); } @@ -64,11 +64,19 @@ public final class SHA256Generator { } catch (DigestException e) { throw new RuntimeException(e); } 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(); if (rv != null) rv.reset(); @@ -77,7 +85,22 @@ public final class SHA256Generator { 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); } -- GitLab