diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2015-08-10 22:09:56 +0300 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2015-08-10 22:09:56 +0300 |
commit | 434ba17d1d5ad59c70d721ad3ecb376c2403a7e5 (patch) | |
tree | 155d2fb6f8e4ab7e75e1b85a8623447439201ce8 /cipher/hash-common.h | |
parent | 49f52c67fb42c0656c8f9af655087f444562ca82 (diff) | |
download | libgcrypt-434ba17d1d5ad59c70d721ad3ecb376c2403a7e5.tar.gz |
Add generic SHA3 implementation
* cipher/hash-common.h (MD_BLOCK_MAX_BLOCKSIZE): Increase blocksize
USE_SHA3 enabled.
* cipher/keccak.c (SHA3_DELIMITED_SUFFIX, SHAKE_DELIMITED_SUFFIX): New.
(KECCAK_STATE): Add proper state.
(KECCAK_CONTEXT): Add 'outlen'.
(rol64, keccak_f1600_state_permute, transform_blk, transform): New.
(keccak_init): Add proper initialization.
(keccak_final): Add proper finalization.
(selftests_keccak): Add selftests.
(oid_spec_sha3_224, oid_spec_sha3_256, oid_spec_sha3_384)
(oid_spec_sha3_512): Add OID.
(_gcry_digest_spec_sha3_224, _gcry_digest_spec_sha3_256)
(_gcry_digest_spec_sha3_384, _gcry_digest_spec_sha3_512): Fix output
length.
* cipher/mac-hmac.c (map_mac_algo_to_md): Fix mapping for SHA3-512.
(hmac_get_keylen): Return proper blocksizes for SHA3 algorithms.
[USE_SHA3] (_gcry_mac_type_spec_hmac_sha3_224)
(_gcry_mac_type_spec_hmac_sha3_256, _gcry_mac_type_spec_hmac_sha3_384)
(_gcry_mac_type_spec_hmac_sha3_512): New.
* cipher/mac-internal [USE_SHA3] (_gcry_mac_type_spec_hmac_sha3_224)
(_gcry_mac_type_spec_hmac_sha3_256, _gcry_mac_type_spec_hmac_sha3_384)
(_gcry_mac_type_spec_hmac_sha3_512): New.
* cipher/mac.c (mac_list) [USE_SHA3]: Add SHA3 algorithms.
* cipher/md.c (md_open): Use proper SHA-3 blocksizes for HMAC macpads.
* tests/basic.c (check_digests): Add SHA3 test vectors.
--
Patch adds generic implementation for SHA3. Currently missing with this
patch:
- HMAC SHA3 test vectors, not available from NIST (yet?)
- ASNs
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/hash-common.h')
-rw-r--r-- | cipher/hash-common.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/cipher/hash-common.h b/cipher/hash-common.h index c9491913..e1ae5a24 100644 --- a/cipher/hash-common.h +++ b/cipher/hash-common.h @@ -33,9 +33,15 @@ typedef unsigned int (*_gcry_md_block_write_t) (void *c, const unsigned char *blks, size_t nblks); -#if defined(HAVE_U64_TYPEDEF) && (defined(USE_SHA512) || defined(USE_WHIRLPOOL)) -/* SHA-512 needs u64 and larger buffer. Whirlpool needs u64. */ -# define MD_BLOCK_MAX_BLOCKSIZE 128 +#if defined(HAVE_U64_TYPEDEF) && (defined(USE_SHA512) || defined(USE_SHA3) || \ + defined(USE_WHIRLPOOL)) +/* SHA-512, SHA-3 and Whirlpool needs u64. SHA-512 and SHA3 need larger + * buffer. */ +# ifdef USE_SHA3 +# define MD_BLOCK_MAX_BLOCKSIZE (1152 / 8) +# else +# define MD_BLOCK_MAX_BLOCKSIZE 128 +# endif # define MD_NBLOCKS_TYPE u64 #else # define MD_BLOCK_MAX_BLOCKSIZE 64 |