9 typedef unsigned char u8;
10 typedef unsigned int u32;
18 #define U32C(v) (v##U)
20 #define U8V(v) ((u8)(v) & U8C(0xFF))
21 #define U32V(v) ((u32)(v) & U32C(0xFFFFFFFF))
23 #define ROTL32(v, n) \
24 (U32V((v) << (n)) | ((v) >> (32 - (n))))
26 #define U8TO32_LITTLE(p) \
28 ((u32)((p)[1]) << 8) | \
29 ((u32)((p)[2]) << 16) | \
30 ((u32)((p)[3]) << 24))
32 #define U32TO8_LITTLE(p, v) \
35 (p)[1] = U8V((v) >> 8); \
36 (p)[2] = U8V((v) >> 16); \
37 (p)[3] = U8V((v) >> 24); \
40 #define ROTATE(v,c) (ROTL32(v,c))
41 #define XOR(v,w) ((v) ^ (w))
42 #define PLUS(v,w) (U32V((v) + (w)))
43 #define PLUSONE(v) (PLUS((v),1))
45 #define QUARTERROUND(a,b,c,d) \
46 a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \
47 c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \
48 a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \
49 c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
51 static const char sigma[16] =
"expand 32-byte k";
52 static const char tau[16] =
"expand 16-byte k";
57 const char *constants;
91 u32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;
92 u32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;
118 for (i = 0;i < bytes;++i) tmp[i] = m[i];
139 for (i = 20;i > 0;i -= 2) {
166 #ifndef KEYSTREAM_ONLY
210 for (i = 0;i < bytes;++i) ctarget[i] = c[i];
218 #ifndef KEYSTREAM_ONLY
#define U32TO8_LITTLE(p, v)
#define QUARTERROUND(a, b, c, d)