diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2013-09-21 13:54:38 +0300 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2013-09-21 13:54:38 +0300 |
commit | 592c2ab3deeeccbb6d3b078ed7bf0e6627c8e1fb (patch) | |
tree | 067ff9ba60af04b9570da3f54c3ff6c992650a90 /cipher/hash-common.c | |
parent | 902ea6052c11108bd19333c31b03e084bed1fb86 (diff) | |
download | libgcrypt-592c2ab3deeeccbb6d3b078ed7bf0e6627c8e1fb.tar.gz |
Use hash transform function return type for passing burn stack depth
* cipher/gostr4311-94.c (transform): Return stack burn depth.
* cipher/hash-common.c (_gcry_md_block_write): Use stack burn depth
returned by 'hd->bwrite'.
* cipher/hash-common.h (_gcry_md_block_write_t): Change return type to
'unsigned int'.
(gry_md_block_ctx_t): Remove 'stack_burn'.
* cipher/md4.c (transform): Return stack burn depth.
(md4_final): Use stack burn depth from transform.
* cipher/md5.c (transform): Return stack burn depth.
(md5_final): Use stack burn depth from transform.
* cipher/rmd160.c (transform): Return stack burn depth.
(rmd160_final): Use stack burn depth from transform.
* cipher/sha1.c (transform): Return stack burn depth.
(sha1_final): Use stack burn depth from transform.
* cipher/sha256.c (transform): Return stack burn depth.
(sha256_final): Use stack burn depth from transform.
* cipher/sha512.c (__transform, transform): Return stack burn depth.
(sha512_final): Use stack burn depth from transform.
* cipher/stribog.c (transform64): Return stack burn depth.
* cipher/tiger.c (transform): Return stack burn depth.
(tiger_final): Use stack burn depth from transform.
--
Transform function might want different depth of stack burn depending on
detected CPU features (like in SHA-512 on ARM with NEON). So return
stack burn depth from transform functions as a request or a hint to
calling function.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/hash-common.c')
-rw-r--r-- | cipher/hash-common.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/cipher/hash-common.c b/cipher/hash-common.c index 1a6e8e9f..e318e7e1 100644 --- a/cipher/hash-common.c +++ b/cipher/hash-common.c @@ -101,6 +101,7 @@ _gcry_md_block_write (void *context, const void *inbuf_arg, size_t inlen) { const unsigned char *inbuf = inbuf_arg; gcry_md_block_ctx_t *hd = context; + unsigned int stack_burn = 0; if (sizeof(hd->buf) < hd->blocksize) BUG(); @@ -110,8 +111,9 @@ _gcry_md_block_write (void *context, const void *inbuf_arg, size_t inlen) if (hd->count == hd->blocksize) /* Flush the buffer. */ { - hd->bwrite (hd, hd->buf); - _gcry_burn_stack (hd->stack_burn); + stack_burn = hd->bwrite (hd, hd->buf); + _gcry_burn_stack (stack_burn); + stack_burn = 0; hd->count = 0; hd->nblocks++; } @@ -129,13 +131,13 @@ _gcry_md_block_write (void *context, const void *inbuf_arg, size_t inlen) while (inlen >= hd->blocksize) { - hd->bwrite (hd, inbuf); + stack_burn = hd->bwrite (hd, inbuf); hd->count = 0; hd->nblocks++; inlen -= hd->blocksize; inbuf += hd->blocksize; } - _gcry_burn_stack (hd->stack_burn); + _gcry_burn_stack (stack_burn); for (; inlen && hd->count < hd->blocksize; inlen--) hd->buf[hd->count++] = *inbuf++; } |