Commit 982961a5 authored by Niels Möller's avatar Niels Möller

Fix rotation macros to portably support zero rotation count.

parent 23f108fb
2013-05-17 Niels Möller <nisse@lysator.liu.se>
* macros.h (ROTL32, ROTL64): Avoid undefined behaviour for zero
rotation count. Unfortunately makes CAST128 a bit slower with
gcc-4.6.3.
* ecc-j-to-a.c (ecc_j_to_a): Fixed ecc_modp_mul call, to avoid
invalid overlap of arguments to mpn_mul_n. Problem tracked down by
Magnus Holmgren.
......
......@@ -141,9 +141,11 @@ do { \
(dst) += (blocksize), \
(src) += (blocksize)) )
#define ROTL32(n,x) (((x)<<(n)) | ((x)>>(32-(n))))
/* The masking of the right shift is needed to allow n == 0 (using
just 32 - n and 64 - n results in undefined behaviour). */
#define ROTL32(n,x) (((x)<<(n)) | ((x)>>((-(n)&31))))
#define ROTL64(n,x) (((x)<<(n)) | ((x)>>(64-(n))))
#define ROTL64(n,x) (((x)<<(n)) | ((x)>>((-(n))&63)))
/* Requires that size > 0 */
#define INCREMENT(size, ctr) \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment