Example #1
0
int main(int argc, char *argv[])
{
    uint32_t bit;
    uint32_t i;
    uint32_t nb_bits_samples = NB_BITS_SAMPLES;
    uint32_t nb_bytes_samples = nb_bits_samples / 8;
    uint32_t nb_bytes = 0;
    uint8_t samples[nb_bytes_samples];
    uint8_t test = 0;

    signal(SIGINT, signal_handler);

    if(argc > 1 && strcmp(argv[1], "-d") == 0)
        daemonize();
    if(argc > 1 && strcmp(argv[1], "-t") == 0)
        test = 1;

    create_fifo_and_wait("w", "Waiting for server to start...", "Server started : could start Random numbers generation.");

    qrand_setup();
    while (keep_going)
    {
        for (i = 0; i < nb_bits_samples; i++) 
        {
            bit = qrand();
            //When we want to test the rng, we don't want it to be unbiaise
            if(test == 1)
            {
                nb_bytes = build_byte(bit, (uint8_t*)&samples);
            }
            else
            {
                nb_bytes = exclusive_or(bit, (uint8_t*)&samples);
            }

            if(nb_bytes >= nb_bytes_samples)
            {
                send_numbers((uint8_t*)&samples, nb_bytes_samples);
            }
            usleep(SLEEP_INTERVAL);
        }
    }
    qrand_close();
    return 0;
}
Example #2
0
/*Another algorithm to reduice biais, used by Giorgio Vazzana but reduice the 
rate of number generation.
 */
uint32_t von_neumann(uint32_t bit, uint8_t *samples)
{
  static uint32_t previous = 0;
  static uint32_t flip_flop = 0;
  uint32_t nb_bytes = 0;

  flip_flop = !flip_flop;

  if(flip_flop)
  {
      if(previous != bit)
      {
        nb_bytes = build_byte(previous, samples);
      }
  }
  previous = bit;
  return nb_bytes;
}
Example #3
0
/*Exclusive XOR used by the PEAR to reduice bias*/
uint32_t exclusive_or(uint32_t bit, uint8_t *samples)
{
  static uint32_t flip_flop = 0;
  flip_flop = !flip_flop;
  return build_byte(flip_flop ^ bit, samples);
}