Commit 04597c8d authored by Stephan Müller's avatar Stephan Müller Committed by Herbert Xu

crypto: jitter - add RCT/APT support for different OSRs

The oversampling rate (OSR) value specifies the heuristically implied
entropy in the recorded data - H_submitter = 1/osr. A different entropy
estimate implies a different APT/RCT cutoff value. This change adds
support for OSRs 1 through 15. This OSR can be selected by the caller
of the Jitter RNG.

For this patch, the caller still uses one hard-coded OSR. A subsequent
patch allows this value to be configured.

In addition, the power-up self test is adjusted as follows:

* It allows the caller to provide an oversampling rate that should be
tested with - commonly it should be the same as used for the actual
runtime operation. This makes the power-up testing therefore consistent
with the runtime operation.

* It calls now jent_measure_jitter (i.e. collects the full entropy
that can possibly be harvested by the Jitter RNG) instead of only
jent_condition_data (which only returns the entropy harvested from
the conditioning component). This should now alleviate reports where
the Jitter RNG initialization thinks there is too little entropy.

* The power-up test now solely relies on the (enhanced) APT and RCT
test that is used as a health test at runtime.

The code allowing the different OSRs as well as the power-up test
changes are present in the user space version of the Jitter RNG 3.4.1
and thus was already in production use for some time.

Reported-by "Ospan, Abylay" <aospan@amazon.com>
Signed-off-by: default avatarStephan Mueller <smueller@chronox.de>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 7b8c6aee
...@@ -245,7 +245,7 @@ static int jent_kcapi_init(struct crypto_tfm *tfm) ...@@ -245,7 +245,7 @@ static int jent_kcapi_init(struct crypto_tfm *tfm)
crypto_shash_init(sdesc); crypto_shash_init(sdesc);
rng->sdesc = sdesc; rng->sdesc = sdesc;
rng->entropy_collector = jent_entropy_collector_alloc(1, 0, sdesc); rng->entropy_collector = jent_entropy_collector_alloc(0, 0, sdesc);
if (!rng->entropy_collector) { if (!rng->entropy_collector) {
ret = -ENOMEM; ret = -ENOMEM;
goto err; goto err;
...@@ -334,7 +334,7 @@ static int __init jent_mod_init(void) ...@@ -334,7 +334,7 @@ static int __init jent_mod_init(void)
desc->tfm = tfm; desc->tfm = tfm;
crypto_shash_init(desc); crypto_shash_init(desc);
ret = jent_entropy_init(desc); ret = jent_entropy_init(0, 0, desc);
shash_desc_zero(desc); shash_desc_zero(desc);
crypto_free_shash(tfm); crypto_free_shash(tfm);
if (ret) { if (ret) {
......
This diff is collapsed.
...@@ -9,7 +9,8 @@ extern int jent_hash_time(void *hash_state, __u64 time, u8 *addtl, ...@@ -9,7 +9,8 @@ extern int jent_hash_time(void *hash_state, __u64 time, u8 *addtl,
int jent_read_random_block(void *hash_state, char *dst, unsigned int dst_len); int jent_read_random_block(void *hash_state, char *dst, unsigned int dst_len);
struct rand_data; struct rand_data;
extern int jent_entropy_init(void *hash_state); extern int jent_entropy_init(unsigned int osr, unsigned int flags,
void *hash_state);
extern int jent_read_entropy(struct rand_data *ec, unsigned char *data, extern int jent_read_entropy(struct rand_data *ec, unsigned char *data,
unsigned int len); unsigned int len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment