diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2018-06-17 20:03:28 +0300 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2018-06-19 19:29:25 +0300 |
commit | 59c4e344eec61cff45185e1caea6815b3266a0f8 (patch) | |
tree | 4ce23c469a301ea9c40e6fa472e54ebb15a6a384 /cipher/sha256.c | |
parent | b136703ea0ddbd9fec6dfd1f8dfda8373653ba39 (diff) | |
download | libgcrypt-59c4e344eec61cff45185e1caea6815b3266a0f8.tar.gz |
Add hash_buffer and hash_buffers for SHA-224, SHA-385, SHA3 and BLAKE2
* cipher/blake2.c (DEFINE_BLAKE2_VARIANT): Add hash_buffer and
hash_buffers functions for BLAKE2 variants.
* cipher/keccak.c (_gcry_sha3_hash_buffer, _gcry_sha3_hash_buffers)
(_gcry_sha3_224_hash_buffer, _gcry_sha3_224_hash_buffers)
(_gcry_sha3_256_hash_buffer, _gcry_sha3_256_hash_buffers)
(_gcry_sha3_384_hash_buffer, _gcry_sha3_384_hash_buffers)
(_gcry_sha3_512_hash_buffer, _gcry_sha3_512_hash_buffers): New.
* cipher/sha256.c (_gcry_sha224_hash_buffer)
(_gcry_sha224_hash_buffers): New.
* cipher/sha512.c (_gcry_sha384_hash_buffer)
(_gcry_sha384_hash_buffers): New.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/sha256.c')
-rw-r--r-- | cipher/sha256.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/cipher/sha256.c b/cipher/sha256.c index 5c1c13f8..06959707 100644 --- a/cipher/sha256.c +++ b/cipher/sha256.c @@ -588,6 +588,35 @@ _gcry_sha256_hash_buffers (void *outbuf, const gcry_buffer_t *iov, int iovcnt) } +/* Shortcut functions which puts the hash value of the supplied buffer + * into outbuf which must have a size of 28 bytes. */ +static void +_gcry_sha224_hash_buffer (void *outbuf, const void *buffer, size_t length) +{ + SHA256_CONTEXT hd; + + sha224_init (&hd, 0); + _gcry_md_block_write (&hd, buffer, length); + sha256_final (&hd); + memcpy (outbuf, hd.bctx.buf, 28); +} + + +/* Variant of the above shortcut function using multiple buffers. */ +static void +_gcry_sha224_hash_buffers (void *outbuf, const gcry_buffer_t *iov, int iovcnt) +{ + SHA256_CONTEXT hd; + + sha224_init (&hd, 0); + for (;iovcnt > 0; iov++, iovcnt--) + _gcry_md_block_write (&hd, + (const char*)iov[0].data + iov[0].off, iov[0].len); + sha256_final (&hd); + memcpy (outbuf, hd.bctx.buf, 28); +} + + /* Self-test section. @@ -743,7 +772,7 @@ gcry_md_spec_t _gcry_digest_spec_sha224 = GCRY_MD_SHA224, {0, 1}, "SHA224", asn224, DIM (asn224), oid_spec_sha224, 28, sha224_init, _gcry_md_block_write, sha256_final, sha256_read, NULL, - NULL, NULL, + _gcry_sha224_hash_buffer, _gcry_sha224_hash_buffers, sizeof (SHA256_CONTEXT), run_selftests }; |