linux/crypto
Alexey Dobriyan 3ce5564096 crypto: sha512 - reduce stack usage to safe number
commit 51fc6dc8f9 upstream.

For rounds 16--79, W[i] only depends on W[i - 2], W[i - 7], W[i - 15] and W[i - 16].
Consequently, keeping all W[80] array on stack is unnecessary,
only 16 values are really needed.

Using W[16] instead of W[80] greatly reduces stack usage
(~750 bytes to ~340 bytes on x86_64).

Line by line explanation:
* BLEND_OP
  array is "circular" now, all indexes have to be modulo 16.
  Round number is positive, so remainder operation should be
  without surprises.

* initial full message scheduling is trimmed to first 16 values which
  come from data block, the rest is calculated before it's needed.

* original loop body is unrolled version of new SHA512_0_15 and
  SHA512_16_79 macros, unrolling was done to not do explicit variable
  renaming. Otherwise it's the very same code after preprocessing.
  See sha1_transform() code which does the same trick.

Patch survives in-tree crypto test and original bugreport test
(ping flood with hmac(sha512).

See FIPS 180-2 for SHA-512 definition
http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-02-03 09:18:53 -08:00
..
async_tx Fix common misspellings 2011-03-31 11:26:23 -03:00
ablkcipher.c crypto: skcipher - remove redundant NULL check 2011-01-29 15:09:43 +11:00
aead.c
aes_generic.c
af_alg.c crypto: af_alg - fix af_alg memory_allocated data type 2010-12-21 22:22:40 +11:00
ahash.c crypto: hash - Fix handling of small unaligned buffers 2010-08-06 09:26:38 +08:00
algapi.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2010-05-03 11:28:58 +08:00
algboss.c crypto: testmgr - Fix test disabling option 2010-08-06 09:40:28 +08:00
algif_hash.c crypto: algif_hash - User-space interface for hash operations 2010-11-19 17:47:58 +08:00
algif_skcipher.c crypto: algif_skcipher - Handle unaligned receive buffer 2010-11-30 17:04:31 +08:00
ansi_cprng.c Fix common misspellings 2011-03-31 11:26:23 -03:00
anubis.c
api.c
arc4.c
authenc.c crypto: Use scatterwalk_crypto_chain 2010-12-02 14:47:16 +08:00
authencesn.c crypto: authencesn - Add algorithm to handle IPsec extended sequence numbers 2011-03-13 20:22:27 -07:00
blkcipher.c mm: strictly nested kmap_atomic() 2010-10-26 16:52:08 -07:00
blowfish.c
camellia.c
cast5.c crypto: cast5 - simplify if-statements 2010-11-13 21:47:55 +09:00
cast6.c
cbc.c
ccm.c
chainiv.c
cipher.c
compress.c
crc32c.c
cryptd.c crypto: cryptd - Use subsys_initcall to prevent races with aesni 2011-11-11 09:37:17 -08:00
crypto_null.c
crypto_wq.c crypto: mark crypto workqueues CPU_INTENSIVE 2011-01-04 23:34:08 +11:00
ctr.c crypto: Use ERR_CAST 2010-05-26 10:36:51 +10:00
cts.c
deflate.c net+crypto: Use vmalloc for zlib inflate buffers. 2011-06-29 05:48:41 -07:00
des_generic.c Blackfin: Rename DES PC2() symbol to avoid collision 2010-10-07 14:08:50 +01:00
ecb.c
eseqiv.c crypto: Use scatterwalk_crypto_chain 2010-12-02 14:47:16 +08:00
fcrypt.c
fips.c
gcm.c crypto: Use scatterwalk_crypto_chain 2010-12-02 14:47:16 +08:00
gf128mul.c Fix common misspellings 2011-03-31 11:26:23 -03:00
ghash-generic.c crypto: ghash - Avoid null pointer dereference if no key is set 2011-10-25 07:10:17 +02:00
hmac.c
internal.h
Kconfig crypto: aesni-intel - Merge with fpu.ko 2011-05-16 15:12:47 +10:00
khazad.c
krng.c
lrw.c
lzo.c
Makefile crypto: authencesn - Add algorithm to handle IPsec extended sequence numbers 2011-03-13 20:22:27 -07:00
md4.c
md5.c crypto: Move md5_transform to lib/md5.c 2011-08-15 18:31:35 -07:00
michael_mic.c
pcbc.c
pcompress.c
pcrypt.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2011-01-13 10:25:58 -08:00
proc.c
ripemd.h
rmd128.c crypto: ripemd - Set module author and update email address 2011-01-04 23:34:03 +11:00
rmd160.c crypto: ripemd - Set module author and update email address 2011-01-04 23:34:03 +11:00
rmd256.c crypto: ripemd - Set module author and update email address 2011-01-04 23:34:03 +11:00
rmd320.c crypto: ripemd - Set module author and update email address 2011-01-04 23:34:03 +11:00
rng.c
salsa20_generic.c
scatterwalk.c crypto: scatterwalk - Fix scatterwalk_done() test 2010-05-19 14:06:29 +10:00
seed.c
seqiv.c
serpent.c
sha1_generic.c
sha256_generic.c
sha512_generic.c crypto: sha512 - reduce stack usage to safe number 2012-02-03 09:18:53 -08:00
shash.c crypto: hash - Fix async import on shash algorithm 2010-11-04 14:48:37 -04:00
tcrypt.c crypto: tcrypt - CTR mode speed test for AES 2011-05-04 15:06:37 +10:00
tcrypt.h
tea.c
testmgr.c crypto: testmgr - add support for aes ofb mode 2011-05-04 15:04:10 +10:00
testmgr.h crypto: testmgr - add support for aes ofb mode 2011-05-04 15:04:10 +10:00
tgr192.c
twofish_common.c
twofish_generic.c crypto: twofish: Rename twofish to twofish_generic and add an alias 2010-06-03 21:02:51 +10:00
vmac.c Fix common misspellings 2011-03-31 11:26:23 -03:00
wp512.c
xcbc.c
xor.c
xts.c Fix common misspellings 2011-03-31 11:26:23 -03:00
zlib.c net+crypto: Use vmalloc for zlib inflate buffers. 2011-06-29 05:48:41 -07:00