3#define CONST64(n) n ## ui64
6#define CONST64(n) n ## ULL
13#if defined(__x86_64__) || (defined(__sparc__) && defined(__arch64__))
22#define STORE32L(x, y) \
23 { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
24 (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); }
26#define LOAD32L(x, y) \
27 { x = ((unsigned long)((y)[3] & 255)<<24) | \
28 ((unsigned long)((y)[2] & 255)<<16) | \
29 ((unsigned long)((y)[1] & 255)<<8) | \
30 ((unsigned long)((y)[0] & 255)); }
32#define STORE64L(x, y) \
33 { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \
34 (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \
35 (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
36 (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); }
38#define LOAD64L(x, y) \
39 { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \
40 (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \
41 (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \
42 (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); }
44#define STORE32H(x, y) \
45 { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \
46 (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); }
48#define LOAD32H(x, y) \
49 { x = ((unsigned long)((y)[0] & 255)<<24) | \
50 ((unsigned long)((y)[1] & 255)<<16) | \
51 ((unsigned long)((y)[2] & 255)<<8) | \
52 ((unsigned long)((y)[3] & 255)); }
54#define STORE64H(x, y) \
55 { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \
56 (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \
57 (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \
58 (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); }
60#define LOAD64H(x, y) \
61 { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \
62 (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \
63 (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \
64 (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); }
70#if !defined(LTC_NO_BSWAP) && (defined(INTEL_CC) || (defined(__GNUC__) && (defined(__DJGPP__) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__i386__) || defined(__x86_64__))))
72#define STORE32H(x, y) \
79#define LOAD32H(x, y) \
87#define STORE32H(x, y) \
88 { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \
89 (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); }
91#define LOAD32H(x, y) \
92 { x = ((unsigned long)((y)[0] & 255)<<24) | \
93 ((unsigned long)((y)[1] & 255)<<16) | \
94 ((unsigned long)((y)[2] & 255)<<8) | \
95 ((unsigned long)((y)[3] & 255)); }
100#if !defined(LTC_NO_BSWAP) && (defined(__GNUC__) && defined(__x86_64__))
102#define STORE64H(x, y) \
109#define LOAD64H(x, y) \
117#define STORE64H(x, y) \
118 { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \
119 (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \
120 (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \
121 (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); }
123#define LOAD64H(x, y) \
124 { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \
125 (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \
126 (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \
127 (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); }
131#ifdef ENDIAN_32BITWORD
133#define STORE32L(x, y) \
134 { ulong32 __t = (x); XMEMCPY(y, &__t, 4); }
136#define LOAD32L(x, y) \
139#define STORE64L(x, y) \
140 { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \
141 (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \
142 (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
143 (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); }
145#define LOAD64L(x, y) \
146 { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \
147 (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \
148 (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \
149 (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); }
153#define STORE32L(x, y) \
154 { ulong32 __t = (x); XMEMCPY(y, &__t, 4); }
156#define LOAD32L(x, y) \
157 { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; }
159#define STORE64L(x, y) \
160 { ulong64 __t = (x); XMEMCPY(y, &__t, 8); }
162#define LOAD64L(x, y) \
163 { XMEMCPY(&(x), y, 8); }
170#define STORE32L(x, y) \
171 { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
172 (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); }
174#define LOAD32L(x, y) \
175 { x = ((unsigned long)((y)[3] & 255)<<24) | \
176 ((unsigned long)((y)[2] & 255)<<16) | \
177 ((unsigned long)((y)[1] & 255)<<8) | \
178 ((unsigned long)((y)[0] & 255)); }
180#define STORE64L(x, y) \
181 { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \
182 (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \
183 (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
184 (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); }
186#define LOAD64L(x, y) \
187 { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48) | \
188 (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32) | \
189 (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16) | \
190 (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); }
192#ifdef ENDIAN_32BITWORD
194#define STORE32H(x, y) \
195 { ulong32 __t = (x); XMEMCPY(y, &__t, 4); }
197#define LOAD32H(x, y) \
200#define STORE64H(x, y) \
201 { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \
202 (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \
203 (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \
204 (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); }
206#define LOAD64H(x, y) \
207 { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48)| \
208 (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32)| \
209 (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16)| \
210 (((ulong64)((y)[6] & 255))<<8)| (((ulong64)((y)[7] & 255))); }
214#define STORE32H(x, y) \
215 { ulong32 __t = (x); XMEMCPY(y, &__t, 4); }
217#define LOAD32H(x, y) \
218 { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; }
220#define STORE64H(x, y) \
221 { ulong64 __t = (x); XMEMCPY(y, &__t, 8); }
223#define LOAD64H(x, y) \
224 { XMEMCPY(&(x), y, 8); }
229#define BSWAP(x) ( ((x>>24)&0x000000FFUL) | ((x<<24)&0xFF000000UL) | \
230 ((x>>8)&0x0000FF00UL) | ((x<<8)&0x00FF0000UL) )
237#pragma intrinsic(_lrotr,_lrotl)
238#define ROR(x,n) _lrotr(x,n)
239#define ROL(x,n) _lrotl(x,n)
240#define RORc(x,n) _lrotr(x,n)
241#define ROLc(x,n) _lrotl(x,n)
243#elif !defined(__STRICT_ANSI__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(INTEL_CC) && !defined(LTC_NO_ASM)
245static inline unsigned ROL(
unsigned word,
int i)
249 :
"0" (word),
"c" (i));
253static inline unsigned ROR(
unsigned word,
int i)
257 :
"0" (word),
"c" (i));
263static inline unsigned ROLc(
unsigned word,
const int i)
267 :
"0" (word),
"I" (i));
271static inline unsigned RORc(
unsigned word,
const int i)
275 :
"0" (word),
"I" (i));
286#elif !defined(__STRICT_ANSI__) && defined(LTC_PPC32)
288static inline unsigned ROL(
unsigned word,
int i)
292 :
"0" (word),
"r" (i));
296static inline unsigned ROR(
unsigned word,
int i)
300 :
"0" (word),
"r" (32 - i));
306static inline unsigned ROLc(
unsigned word,
const int i)
308 asm(
"rotlwi %0,%0,%2"
310 :
"0" (word),
"I" (i));
314static inline unsigned RORc(
unsigned word,
const int i)
316 asm(
"rotrwi %0,%0,%2"
318 :
"0" (word),
"I" (i));
332#define ROL(x, y) ( (((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
333#define ROR(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
334#define ROLc(x, y) ( (((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
335#define RORc(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
340#if !defined(__STRICT_ANSI__) && defined(__GNUC__) && defined(__x86_64__) && !defined(LTC_NO_ASM)
342static inline unsigned long ROL64(
unsigned long word,
int i)
346 :
"0" (word),
"c" (i));
350static inline unsigned long ROR64(
unsigned long word,
int i)
354 :
"0" (word),
"c" (i));
360static inline unsigned long ROL64c(
unsigned long word,
const int i)
364 :
"0" (word),
"J" (i));
368static inline unsigned long ROR64c(
unsigned long word,
const int i)
372 :
"0" (word),
"J" (i));
386 ( (((x)<<((ulong64)(y)&63)) | \
387 (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF))
390 ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \
391 ((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF))
393#define ROL64c(x, y) \
394 ( (((x)<<((ulong64)(y)&63)) | \
395 (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF))
397#define ROR64c(x, y) \
398 ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \
399 ((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF))
404#define MAX(x, y) ( ((x)>(y))?(x):(y) )
408#define MIN(x, y) ( ((x)<(y))?(x):(y) )
413#define byte(x, n) ((unsigned char)((x) >> (8 * (n))))
415#define byte(x, n) (((x) >> (8 * (n))) & 255)
#define ROL64(x, y)
Definition: tomcrypt_macros.h:385
#define ROR64c(x, y)
Definition: tomcrypt_macros.h:397
#define ROL64c(x, y)
Definition: tomcrypt_macros.h:393
unsigned long ulong32
Definition: tomcrypt_macros.h:16
#define ROL(x, y)
Definition: tomcrypt_macros.h:332
#define ROLc(x, y)
Definition: tomcrypt_macros.h:334
#define ROR64(x, y)
Definition: tomcrypt_macros.h:389
#define ROR(x, y)
Definition: tomcrypt_macros.h:333
unsigned long long ulong64
Definition: tomcrypt_macros.h:7
#define RORc(x, y)
Definition: tomcrypt_macros.h:335