summaryrefslogtreecommitdiff
path: root/cipher/sha256.c
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2018-06-17 20:03:28 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2018-06-19 19:29:25 +0300
commit59c4e344eec61cff45185e1caea6815b3266a0f8 (patch)
tree4ce23c469a301ea9c40e6fa472e54ebb15a6a384 /cipher/sha256.c
parentb136703ea0ddbd9fec6dfd1f8dfda8373653ba39 (diff)
downloadlibgcrypt-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.c31
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
};