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);