1. 06 Jun, 2019 1 commit
    • Stephan Müller's avatar
      crypto: jitter - update implementation to 2.1.2 · d9d67c87
      Stephan Müller authored
      
      The Jitter RNG implementation is updated to comply with upstream version
      2.1.2. The change covers the following aspects:
      
      * Time variation measurement is conducted over the LFSR operation
      instead of the XOR folding
      
      * Invcation of stuck test during initialization
      
      * Removal of the stirring functionality and the Von-Neumann
      unbiaser as the LFSR using a primitive and irreducible polynomial
      generates an identical distribution of random bits
      
      This implementation was successfully used in FIPS 140-2 validations
      as well as in German BSI evaluations.
      
      This kernel implementation was tested as follows:
      
      * The unchanged kernel code file jitterentropy.c is compiled as part
      of user space application to generate raw unconditioned noise
      data. That data is processed with the NIST SP800-90B non-IID test
      tool to verify that the kernel code exhibits an equal amount of noise
      as the upstream Jitter RNG version 2.1.2.
      
      * Using AF_ALG with the libkcapi tool of kcapi-rng the Jitter RNG was
      output tested with dieharder to verify that the output does not
      exhibit statistical weaknesses. The following command was used:
      kcapi-rng -n "jitterentropy_rng" -b 100000000000 | dieharder -a -g 200
      
      * The unchanged kernel code file jitterentropy.c is compiled as part
      of user space application to test the LFSR implementation. The
      LFSR is injected a monotonically increasing counter as input and
      the output is fed into dieharder to verify that the LFSR operation
      does not exhibit statistical weaknesses.
      
      * The patch was tested on the Muen separation kernel which returns
      a more coarse time stamp to verify that the Jitter RNG does not cause
      regressions with its initialization test considering that the Jitter
      RNG depends on a high-resolution timer.
      Tested-by: default avatarReto Buerki <reet@codelabs.ch>
      Signed-off-by: default avatarStephan Mueller <smueller@chronox.de>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      d9d67c87
  2. 30 May, 2019 1 commit
  3. 18 Apr, 2019 1 commit
    • Eric Biggers's avatar
      crypto: run initcalls for generic implementations earlier · c4741b23
      Eric Biggers authored
      
      Use subsys_initcall for registration of all templates and generic
      algorithm implementations, rather than module_init.  Then change
      cryptomgr to use arch_initcall, to place it before the subsys_initcalls.
      
      This is needed so that when both a generic and optimized implementation
      of an algorithm are built into the kernel (not loadable modules), the
      generic implementation is registered before the optimized one.
      Otherwise, the self-tests for the optimized implementation are unable to
      allocate the generic implementation for the new comparison fuzz tests.
      
      Note that on arm, a side effect of this change is that self-tests for
      generic implementations may run before the unaligned access handler has
      been installed.  So, unaligned accesses will crash the kernel.  This is
      arguably a good thing as it makes it easier to detect that type of bug.
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      c4741b23
  4. 17 Nov, 2016 1 commit
  5. 24 Jun, 2016 1 commit
    • Stephan Mueller's avatar
      crypto: jitterentropy - use ktime_get_ns as fallback · b578456c
      Stephan Mueller authored
      
      As part of the Y2038 development, __getnstimeofday is not supposed to be
      used any more. It is now replaced with ktime_get_ns. The Jitter RNG uses
      the time stamp to measure the execution time of a given code path and
      tries to detect variations in the execution time. Therefore, the only
      requirement the Jitter RNG has, is a sufficient high resolution to
      detect these variations.
      
      The change was tested on x86 to show an identical behavior as RDTSC. The
      used test code simply measures the execution time of the heart of the
      RNG:
      
              jent_get_nstime(&time);
              jent_memaccess(ec, min);
              jent_fold_time(NULL, time, &folded, min);
              jent_get_nstime(&time2);
              return ((time2 - time));
      Signed-off-by: default avatarStephan Mueller <smueller@chronox.de>
      Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      b578456c
  6. 14 Oct, 2015 1 commit
  7. 28 Jul, 2015 1 commit
  8. 25 Jun, 2015 1 commit
    • Stephan Mueller's avatar
      crypto: jitterentropy - avoid compiler warnings · dfc9fa91
      Stephan Mueller authored
      
      The core of the Jitter RNG is intended to be compiled with -O0. To
      ensure that the Jitter RNG can be compiled on all architectures,
      separate out the RNG core into a stand-alone C file that can be compiled
      with -O0 which does not depend on any kernel include file.
      
      As no kernel includes can be used in the C file implementing the core
      RNG, any dependencies on kernel code must be extracted.
      
      A second file provides the link to the kernel and the kernel crypto API
      that can be compiled with the regular compile options of the kernel.
      Signed-off-by: default avatarStephan Mueller <smueller@chronox.de>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      dfc9fa91