Fix too large burn_stack in camellia-glue.c
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Fri, 16 Nov 2012 08:45:43 +0000 (10:45 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 21 Nov 2012 10:52:33 +0000 (11:52 +0100)
* cipher/camellia-glue.c (camellia_encrypt, camellia_decrypt): Do not
take full array size of KEY_TABLE_TYPE, but argument size instead.
--

KEY_TABLE_TYPE is array type, and sizeof(KEY_TABLE_TYPE) gives full
size of array. However what is wanted here is size of array argument
in stack, so change sizeof(KEY_TABLE_TYPE) to sizeof(void*). This
gives boost in speed for camellia cipher.

On AMD Phenom II, x86-64:

Before:

 $ tests/benchmark --cipher-repetitions 10 cipher camellia128
 Running each test 10 times.
                 ECB/Stream         CBC             CFB             OFB             CTR
              --------------- --------------- --------------- --------------- ---------------
 CAMELLIA128    250ms   240ms   270ms   260ms   250ms   250ms   260ms   250ms   340ms   330ms

After:

 $ tests/benchmark --cipher-repetitions 10 cipher camellia128
 Running each test 10 times.
                 ECB/Stream         CBC             CFB             OFB             CTR
              --------------- --------------- --------------- --------------- ---------------
 CAMELLIA128    140ms   130ms   150ms   160ms   150ms   150ms   150ms   140ms   220ms   220ms

[v2]
 - Add GNU style changelog

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
cipher/camellia-glue.c

index a263621..c5019d0 100644 (file)
@@ -111,7 +111,7 @@ camellia_encrypt(void *c, byte *outbuf, const byte *inbuf)
 
   Camellia_EncryptBlock(ctx->keybitlength,inbuf,ctx->keytable,outbuf);
   _gcry_burn_stack
-    (sizeof(int)+2*sizeof(unsigned char *)+sizeof(KEY_TABLE_TYPE)
+    (sizeof(int)+2*sizeof(unsigned char *)+sizeof(void*/*KEY_TABLE_TYPE*/)
      +4*sizeof(u32)
      +2*sizeof(u32*)+4*sizeof(u32)
      +2*2*sizeof(void*) /* Function calls.  */
@@ -125,7 +125,7 @@ camellia_decrypt(void *c, byte *outbuf, const byte *inbuf)
 
   Camellia_DecryptBlock(ctx->keybitlength,inbuf,ctx->keytable,outbuf);
   _gcry_burn_stack
-    (sizeof(int)+2*sizeof(unsigned char *)+sizeof(KEY_TABLE_TYPE)
+    (sizeof(int)+2*sizeof(unsigned char *)+sizeof(void*/*KEY_TABLE_TYPE*/)
      +4*sizeof(u32)
      +2*sizeof(u32*)+4*sizeof(u32)
      +2*2*sizeof(void*) /* Function calls.  */