ep_output change
authorNIIBE Yutaka <gniibe@fsij.org>
Wed, 21 Sep 2011 05:50:27 +0000 (14:50 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Wed, 21 Sep 2011 05:50:27 +0000 (14:50 +0900)
ChangeLog
src/random.c

index b208557..7520bed 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-21  NIIBE Yutaka  <gniibe@fsij.org>
+
+       * src/random.c (ep_output): Bug fix for second argument of
+       fnv32_hash, and change the way to place values into the buffer.
+
 2011-09-20  NIIBE Yutaka  <gniibe@fsij.org>
 
        * boards/STBEE/mcuconf.h, boards/STBEE/board.h: New.
index 598c1a3..c7e2e63 100644 (file)
@@ -214,18 +214,25 @@ static uint32_t ep_output (void)
   uint8_t buf[NUM_NOISE_INPUTS];
   uint8_t *p = buf;
 
-  /* Use four outputs of CRC-16 buffer */
-  for (i = 0; i < 4; i++)
-    *p++ = epool[(ep_count+i) & 0x0f];
-
   /*
-   * At some probability, we use other 3 outputs of CRC-16 buffer for final output
+   * NUM_NOISE_INPUTS is seven.
+   *
+   * There are sixteen bytes in the CRC-16 buffer.  We use seven
+   * outputs of CRC-16 buffer for final output.  There are two parts;
+   * former 4 outputs which will be used directly, and latter 3
+   * outputs which will be used with feedback loop.
    */
-  for (; i < NUM_NOISE_INPUTS; i++)
+
+  /* At some probability, use latter 3 outputs of CRC-16 buffer */
+  for (i = NUM_NOISE_INPUTS - 1; i >= 4; i--)
     if (PROBABILITY_50_BY_TICK ())
       *p++ = epool[(ep_count+i) & 0x0f] ^ epool[(ep_count+i-4) & 0x0f];
 
-  return fnv32_hash (buf, i);
+  /* Use former 4 outputs of CRC-16 buffer */
+  for (i = 3; i >= 0; i--)
+    *p++ = epool[(ep_count+i) & 0x0f];
+
+  return fnv32_hash (buf, p - buf);
 }