diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-06-20 08:12:18 +0400 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-06-20 08:12:18 +0400 |
commit | dfee9e568286fd2875f9ad2beb887a73682e8b2e (patch) | |
tree | b72031f308bd819c2d37d675baa5baf414751a6e /core/src/main/java/org/bouncycastle/crypto/tls/DeferredHash.java | |
parent | f5afa59158cea442fedd96403cf1630f5df5b30f (diff) |
Subclass ByteArrayOutputStream to avoid unnecessary copy
Diffstat (limited to 'core/src/main/java/org/bouncycastle/crypto/tls/DeferredHash.java')
-rw-r--r-- | core/src/main/java/org/bouncycastle/crypto/tls/DeferredHash.java | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/tls/DeferredHash.java b/core/src/main/java/org/bouncycastle/crypto/tls/DeferredHash.java index e8c76e65..c2dba4eb 100644 --- a/core/src/main/java/org/bouncycastle/crypto/tls/DeferredHash.java +++ b/core/src/main/java/org/bouncycastle/crypto/tls/DeferredHash.java @@ -10,16 +10,15 @@ import org.bouncycastle.crypto.Digest; class DeferredHash implements TlsHandshakeHash { - protected TlsContext context; - private ByteArrayOutputStream buf = new ByteArrayOutputStream(); + private DigestInputBuffer buf = new DigestInputBuffer(); private int prfAlgorithm = -1; private Digest hash = null; DeferredHash() { - this.buf = new ByteArrayOutputStream(); + this.buf = new DigestInputBuffer(); this.hash = null; } @@ -36,13 +35,11 @@ class DeferredHash public TlsHandshakeHash commit() { - int prfAlgorithm = context.getSecurityParameters().getPrfAlgorithm(); Digest prfHash = TlsUtils.createPRFHash(prfAlgorithm); - byte[] data = buf.toByteArray(); - prfHash.update(data, 0, data.length); + buf.updateDigest(prfHash); if (prfHash instanceof TlsHandshakeHash) { @@ -125,4 +122,12 @@ class DeferredHash throw new IllegalStateException("No hash algorithm has been set"); } } + + private static class DigestInputBuffer extends ByteArrayOutputStream + { + void updateDigest(Digest d) + { + d.update(buf, 0, count); + } + } } |