Commit 0baa8fab authored by Stephan Müller's avatar Stephan Müller Committed by Herbert Xu
Browse files

crypto: jitter - Allow configuration of oversampling rate



The oversampling rate used by the Jitter RNG allows the configuration of
the heuristically implied entropy in one timing measurement. This
entropy rate is (1 / OSR) bits of entropy per time stamp.

Considering that the Jitter RNG now support APT/RCT health tests for
different OSRs, allow this value to be configured at compile time to
support systems with limited amount of entropy in their timer.

The allowed range of OSR values complies with the APT/RCT cutoff health
test values which range from 1 through 15.

The default value of the OSR selection support is left at 1 which is the
current default. Thus, the addition of the configuration support does
not alter the default Jitter RNG behavior.

Signed-off-by: default avatarStephan Mueller <smueller@chronox.de>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 59bcfd78
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -1339,6 +1339,23 @@ config CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE
	default 1024 if CRYPTO_JITTERENTROPY_MEMSIZE_1024
	default 2048 if CRYPTO_JITTERENTROPY_MEMSIZE_8192

config CRYPTO_JITTERENTROPY_OSR
	int "CPU Jitter RNG Oversampling Rate"
	range 1 15
	default 1
	depends on CRYPTO_JITTERENTROPY
	help
	  The Jitter RNG allows the specification of an oversampling rate (OSR).
	  The Jitter RNG operation requires a fixed amount of timing
	  measurements to produce one output block of random numbers. The
	  OSR value is multiplied with the amount of timing measurements to
	  generate one output block. Thus, the timing measurement is oversampled
	  by the OSR factor. The oversampling allows the Jitter RNG to operate
	  on hardware whose timers deliver limited amount of entropy (e.g.
	  the timer is coarse) by setting the OSR to a higher value. The
	  trade-off, however, is that the Jitter RNG now requires more time
	  to generate random numbers.

config CRYPTO_JITTERENTROPY_TESTINTERFACE
	bool "CPU Jitter RNG Test Interface"
	depends on CRYPTO_JITTERENTROPY
+4 −2
Original line number Diff line number Diff line
@@ -256,7 +256,9 @@ static int jent_kcapi_init(struct crypto_tfm *tfm)
	crypto_shash_init(sdesc);
	rng->sdesc = sdesc;

	rng->entropy_collector = jent_entropy_collector_alloc(0, 0, sdesc);
	rng->entropy_collector =
		jent_entropy_collector_alloc(CONFIG_CRYPTO_JITTERENTROPY_OSR, 0,
					     sdesc);
	if (!rng->entropy_collector) {
		ret = -ENOMEM;
		goto err;
@@ -345,7 +347,7 @@ static int __init jent_mod_init(void)

	desc->tfm = tfm;
	crypto_shash_init(desc);
	ret = jent_entropy_init(0, 0, desc);
	ret = jent_entropy_init(CONFIG_CRYPTO_JITTERENTROPY_OSR, 0, desc);
	shash_desc_zero(desc);
	crypto_free_shash(tfm);
	if (ret) {