more tweak
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 22 Sep 2011 06:34:34 +0000 (15:34 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 22 Sep 2011 06:34:34 +0000 (15:34 +0900)
ChangeLog
src/random.c

index 9a3edd6..95e5ee5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-22  NIIBE Yutaka  <gniibe@fsij.org>
+
+       * src/random.c  (ROTATE): Remove.
+       (SHIFT_RIGHT): New.
+       (ep_add): Use SHIFT_RIGHT.
+
 2011-09-21  NIIBE Yutaka  <gniibe@fsij.org>
 
        * src/random.c (ep_output): Bug fix for second argument of
index fe131fa..0495eb8 100644 (file)
@@ -175,7 +175,7 @@ static uint8_t ep_count;
  */
 #define NUM_NOISE_INPUTS 7
 
-#define ROTATE(f) (((f)>>1)|(((f)&1)?0x80000000UL:0))
+#define SHIFT_RIGHT(f) ((f)>>1)
 
 static void ep_add (uint8_t entropy_bits, uint8_t another_random_bit)
 {
@@ -184,13 +184,10 @@ static void ep_add (uint8_t entropy_bits, uint8_t another_random_bit)
   /* CRC-16-CCITT's Polynomial is: x^16 + x^12 + x^5 + 1 */
   epool[(ep_count - 12)& 0x0f] ^= v;
   epool[(ep_count - 5)& 0x0f] ^= v;
-  if (another_random_bit)
-    {
-      v ^= entropy_bits;
-      epool[ep_count] = ROTATE (v);
-    }
-  else
-    epool[ep_count] = ROTATE (v) ^ entropy_bits;
+  epool[ep_count] = SHIFT_RIGHT (v) ^ entropy_bits;
+
+  if ((v&1) || another_random_bit)
+    epool[ep_count] ^= 0xff;
 
   ep_count = (ep_count + 1) & 0x0f;
 }