The unified diff between revisions [2f4fd181..] and [b773b0a7..] is displayed below. It can also be downloaded as a raw diff.
This diff has been restricted to the following files: 'include/bit_ops.h'
#
#
# patch "include/bit_ops.h"
# from [f75b3ea4a19ce7802d15aa63408f94c0d950ebfe]
# to [249e2d04932f769955d4053a0485f1763674ef3c]
#
============================================================
--- include/bit_ops.h f75b3ea4a19ce7802d15aa63408f94c0d950ebfe
+++ include/bit_ops.h 249e2d04932f769955d4053a0485f1763674ef3c
@@ -1,6 +1,6 @@
/*************************************************
* Bit/Word Operations Header File *
-* (C) 1999-2008 The Botan Project *
+* (C) 1999-2008 Jack Lloyd *
*************************************************/
#ifndef BOTAN_BIT_OPS_H__
@@ -24,19 +24,64 @@ template<typename T> inline T rotate_rig
}
/*************************************************
-* Byteswap *
+* Byte Swapping Functions *
*************************************************/
-u16bit reverse_bytes(u16bit);
-u32bit reverse_bytes(u32bit);
-u64bit reverse_bytes(u64bit);
+inline u16bit reverse_bytes(u16bit input)
+ {
+ return rotate_left(input, 8);
+ }
+inline u32bit reverse_bytes(u32bit input)
+ {
+ input = ((input & 0xFF00FF00) >> 8) | ((input & 0x00FF00FF) << 8);
+ return rotate_left(input, 16);
+ }
+
+inline u64bit reverse_bytes(u64bit input)
+ {
+ u32bit hi = ((input >> 40) & 0x00FF00FF) | ((input >> 24) & 0xFF00FF00);
+ u32bit lo = ((input & 0xFF00FF00) >> 8) | ((input & 0x00FF00FF) << 8);
+ hi = (hi << 16) | (hi >> 16);
+ lo = (lo << 16) | (lo >> 16);
+ return (static_cast<u64bit>(lo) << 32) | hi;
+ }
+
/*************************************************
-* Array XOR *
+* XOR Arrays *
*************************************************/
-void xor_buf(byte[], const byte[], u32bit);
-void xor_buf(byte[], const byte[], const byte[], u32bit);
+inline void xor_buf(byte data[], const byte mask[], u32bit length)
+ {
+ while(length >= 8)
+ {
+ data[0] ^= mask[0]; data[1] ^= mask[1];
+ data[2] ^= mask[2]; data[3] ^= mask[3];
+ data[4] ^= mask[4]; data[5] ^= mask[5];
+ data[6] ^= mask[6]; data[7] ^= mask[7];
+ data += 8; mask += 8; length -= 8;
+ }
+ for(u32bit j = 0; j != length; ++j)
+ data[j] ^= mask[j];
+ }
/*************************************************
+* XOR Arrays *
+*************************************************/
+inline void xor_buf(byte out[], const byte in[],
+ const byte mask[], u32bit length)
+ {
+ while(length >= 8)
+ {
+ out[0] = in[0] ^ mask[0]; out[1] = in[1] ^ mask[1];
+ out[2] = in[2] ^ mask[2]; out[3] = in[3] ^ mask[3];
+ out[4] = in[4] ^ mask[4]; out[5] = in[5] ^ mask[5];
+ out[6] = in[6] ^ mask[6]; out[7] = in[7] ^ mask[7];
+ in += 8; out += 8; mask += 8; length -= 8;
+ }
+ for(u32bit j = 0; j != length; ++j)
+ out[j] = in[j] ^ mask[j];
+ }
+
+/*************************************************
* Simple Bit Manipulation *
*************************************************/
bool power_of_2(u64bit);