summaryrefslogtreecommitdiff
path: root/cipher/md.c
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2015-08-10 22:09:56 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2015-08-10 22:09:56 +0300
commit434ba17d1d5ad59c70d721ad3ecb376c2403a7e5 (patch)
tree155d2fb6f8e4ab7e75e1b85a8623447439201ce8 /cipher/md.c
parent49f52c67fb42c0656c8f9af655087f444562ca82 (diff)
downloadlibgcrypt-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/md.c')
-rw-r--r--cipher/md.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/cipher/md.c b/cipher/md.c
index 0c669caa..19b2c9bc 100644
--- a/cipher/md.c
+++ b/cipher/md.c
@@ -337,10 +337,20 @@ md_open (gcry_md_hd_t *h, int algo, unsigned int flags)
{
switch (algo)
{
- case GCRY_MD_SHA384:
- case GCRY_MD_SHA512:
+ case GCRY_MD_SHA3_224:
+ ctx->macpads_Bsize = 1152 / 8;
+ break;
+ case GCRY_MD_SHA3_256:
+ ctx->macpads_Bsize = 1088 / 8;
+ break;
case GCRY_MD_SHA3_384:
+ ctx->macpads_Bsize = 832 / 8;
+ break;
case GCRY_MD_SHA3_512:
+ ctx->macpads_Bsize = 576 / 8;
+ break;
+ case GCRY_MD_SHA384:
+ case GCRY_MD_SHA512:
ctx->macpads_Bsize = 128;
break;
case GCRY_MD_GOSTR3411_94: