#include <linux/types.h>
#include <linux/string.h>
+#include <linux/bitops.h>
#include "michael_mic.h"
-// Rotation functions on 32 bit values
-#define ROL32(A, n) (((A) << (n)) | (((A) >> (32 - (n))) & ((1UL << (n)) - 1)))
-#define ROR32(A, n) ROL32((A), 32 - (n))
// Convert from Byte[] to UInt32 in a portable way
#define getUInt32(A, B) ((uint32_t)(A[B + 0] << 0) \
+ (A[B + 1] << 8) + (A[B + 2] << 16) + (A[B + 3] << 24))
#define MichaelBlockFunction(L, R) \
do { \
- R ^= ROL32(L, 17); \
+ R ^= rol32(L, 17); \
L += R; \
R ^= ((L & 0xff00ff00) >> 8) | ((L & 0x00ff00ff) << 8); \
L += R; \
- R ^= ROL32(L, 3); \
+ R ^= rol32(L, 3); \
L += R; \
- R ^= ROR32(L, 2); \
+ R ^= ror32(L, 2); \
L += R; \
} while (0)