change ep_add for feedback shift
authorNIIBE Yutaka <gniibe@fsij.org>
Wed, 21 Sep 2011 14:54:57 +0000 (23:54 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Wed, 21 Sep 2011 14:54:57 +0000 (23:54 +0900)
ChangeLog
src/random.c

index 7520bed..9a3edd6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
 
        * src/random.c (ep_output): Bug fix for second argument of
        fnv32_hash, and change the way to place values into the buffer.
+       (ep_add): Feedback byte always shift 1-bit, entropy_bit sometimes.
 
 2011-09-20  NIIBE Yutaka  <gniibe@fsij.org>
 
index c7e2e63..fe131fa 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 ROTATE(f) (((f)>>1)|(((f)&1)?0x80000000UL:0))
 
 static void ep_add (uint8_t entropy_bits, uint8_t another_random_bit)
 {
@@ -184,7 +184,13 @@ 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;
-  epool[ep_count] = (another_random_bit ? ROTATE (v): v) ^ entropy_bits;
+  if (another_random_bit)
+    {
+      v ^= entropy_bits;
+      epool[ep_count] = ROTATE (v);
+    }
+  else
+    epool[ep_count] = ROTATE (v) ^ entropy_bits;
 
   ep_count = (ep_count + 1) & 0x0f;
 }