Skip to content
  • Daniel Borkmann's avatar
    random32: add test cases for taus113 implementation · a6a9c0f1
    Daniel Borkmann authored
    
    
    We generated a battery of 100 test cases from GSL taus113 implemention
    and compare the results from a particular seed and a particular
    iteration with our implementation in the kernel. We have verified on
    32 and 64 bit machines that our taus113 kernel implementation gives
    same results as GSL taus113 implementation:
    
      [    0.147370] prandom: seed boundary self test passed
      [    0.148078] prandom: 100 self tests passed
    
    This is a Kconfig option that is disabled on default, just like the
    crc32 init selftests in order to not unnecessary slow down boot process.
    We also refactored out prandom_seed_very_weak() as it's now used in
    multiple places in order to reduce redundant code.
    
    GSL code we used for generating test cases:
    
      int i, j;
      srand(time(NULL));
      for (i = 0; i < 100; ++i) {
        int iteration = 500 + (rand() % 500);
        gsl_rng_default_seed = rand() + 1;
        gsl_rng *r = gsl_rng_alloc(gsl_rng_taus113);
        printf("\t{ %lu, ", gsl_rng_default_seed);
        for (j = 0; j < iteration - 1; ++j)
          gsl_rng_get(r);
        printf("%u, %lu },\n", iteration, gsl_rng_get(r));
        gsl_rng_free(r);
      }
    
    Joint work with Hannes Frederic Sowa.
    
    Cc: Florian Weimer <fweimer@redhat.com>
    Cc: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
    Signed-off-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a6a9c0f1