On 2013-11-29 at 10:01:05, Sergey V. <[email protected]> wrote:
> Move bitwise rotation from round function f() into kboxinit().
> 
> Before this patch:
> 
> type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
> GOST 28147-89    41296.13k    45430.76k    46557.61k    46863.02k    46926.51k
> 
> After:
> 
> type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
> GOST 28147-89    44060.09k    48972.78k    49807.70k    50325.50k    50394.45k
> 
> Signed-off-by: Sergey V <[email protected]>
> ---
>  engines/ccgost/gost89.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/engines/ccgost/gost89.c b/engines/ccgost/gost89.c
> index b0568c6..1a0340a 100644
> --- a/engines/ccgost/gost89.c
> +++ b/engines/ccgost/gost89.c
> @@ -9,6 +9,9 @@
>   **********************************************************************/ 
>  #include <string.h>
>  #include "gost89.h"
> +
> +#define ROTL32(x, n) ((x) << (n) | (x) >> (32 - (n)))
> +
>  /* Substitution blocks from RFC 4357 
>     
>     Note: our implementation of gost 28147-89 algorithm 
> @@ -120,11 +123,11 @@ static void kboxinit(gost_ctx *c, const 
> gost_subst_block *b)
>       
>       for (i = 0; i < 256; i++)
>               {
> -             c->k87[i] = (b->k8[i>>4] <<4 | b->k7 [i &15])<<24;
> -             c->k65[i] = (b->k6[i>>4] << 4 | b->k5 [i &15])<<16;
> -             c->k43[i] = (b->k4[i>>4] <<4  | b->k3 [i &15])<<8;
> -             c->k21[i] = b->k2[i>>4] <<4  | b->k1 [i &15];
> -
> +             /* Shift and rotate left 11 bits */
> +             c->k87[i] = ROTL32(b->k8[i>>4] << 4 | b->k7[i&15],  3);
> +             c->k65[i] = ROTL32(b->k6[i>>4] << 4 | b->k5[i&15], 27);
> +             c->k43[i] = ROTL32(b->k4[i>>4] << 4 | b->k3[i&15], 19);
> +             c->k21[i] = ROTL32(b->k2[i>>4] << 4 | b->k1[i&15], 11);
>               }
>       }
>  
> @@ -133,8 +136,8 @@ static word32 f(gost_ctx *c,word32 x)
>       {
>       x = c->k87[x>>24 & 255] | c->k65[x>>16 & 255]| 
>               c->k43[x>> 8 & 255] | c->k21[x & 255]; 
> -     /* Rotate left 11 bits */ 
> -     return x<<11 | x>>(32-11);
> +
> +     return x;
>       }
>  /* Low-level encryption routine - encrypts one 64 bit block*/
>  void gostcrypt(gost_ctx *c, const byte *in, byte *out)

Ping?

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to