Skip to content
Snippets Groups Projects
Commit 982961a5 authored by Niels Möller's avatar Niels Möller
Browse files

Fix rotation macros to portably support zero rotation count.

parent 23f108fb
Branches
Tags
No related merge requests found
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) \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment