assume min-entropy >=5.0
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 13 Sep 2012 01:11:53 +0000 (10:11 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 13 Sep 2012 01:11:53 +0000 (10:11 +0900)
src/random.c

index d8da966..4b5005f 100644 (file)
@@ -92,12 +92,14 @@ static uint32_t sha256_output[SHA256_DIGEST_SIZE/sizeof (uint32_t)];
 /*
  * We did an experiment of measuring entropy of ADC output with MUST.
  * The entropy of a byte by raw sampling of LSBs has more than 6.0 bit/byte.
- * So, it is considered OK to get 32-byte from 86-byte.  That is, to be a
- * full entropy source, it is needed to have N samples to output 256-bit
- * where:
+ *
+ * Further test will be required, but for now we assume min-entropy >= 5.0.
+ * 
+ * To be a full entropy source, it is needed to have N samples to
+ * output 256-bit where:
  *      N = (256 * 2) / <min-entropy of a sample>
  */
-#define NUM_NOISE_INPUTS 86
+#define NUM_NOISE_INPUTS 103
 
 static const uint8_t hash_df_initial_string[5] = {
   1,          /* counter = 1 */
@@ -119,11 +121,13 @@ static void ep_add (uint8_t entropy_bits)
 
 static const uint32_t *ep_output (void)
 {
+  int n = (SHA256_BLOCK_SIZE - 9) - 
+    ((5 + NUM_NOISE_INPUTS) % SHA256_BLOCK_SIZE);
+
+  if (PROBABILITY_50_BY_TICK ())
+    n = n - 3;
 
-  sha256_update (&sha256_ctx_data, (uint8_t *)sha256_output,
-                SHA256_DIGEST_SIZE);
-  if (PROBABILITY_50_BY_TICK ()) /* Add something by timing */
-    sha256_update (&sha256_ctx_data, hash_df_initial_string, 3);
+  sha256_update (&sha256_ctx_data, (uint8_t *)sha256_output, n);
   sha256_finish (&sha256_ctx_data, (uint8_t *)sha256_output);
   ep_init ();
   return sha256_output;
@@ -143,10 +147,14 @@ static void noise_source_error_reset (void)
 static void noise_source_error (uint32_t err)
 {
   neug_err_state |= err;
+#include "board.h"
+#if defined(BOARD_STBEE_MINI)
+  palClearPad (GPIOA, GPIOA_LED2);
+#endif
 }
 
 
-#define REPITITION_COUNT_TEST_CUTOFF 6
+#define REPITITION_COUNT_TEST_CUTOFF 7
 
 static uint8_t rct_a;
 static uint8_t rct_b;
@@ -166,7 +174,7 @@ static void repetition_count_test (uint8_t sample)
     }
 }
 
-#define ADAPTIVE_PROPORTION_64_TEST_CUTOFF 9
+#define ADAPTIVE_PROPORTION_64_TEST_CUTOFF 12
 
 static uint8_t ap64t_a;
 static uint8_t ap64t_b;
@@ -192,7 +200,7 @@ static void adaptive_proportion_64_test (uint8_t sample)
     }
 }
 
-#define ADAPTIVE_PROPORTION_4096_TEST_CUTOFF 117
+#define ADAPTIVE_PROPORTION_4096_TEST_CUTOFF 200
 
 static uint8_t ap4096t_a;
 static uint16_t ap4096t_b;