69f1c387ba
The test interface allows a privileged process to capture the raw unconditioned noise that is collected by the Jitter RNG for statistical analysis. Such testing allows the analysis how much entropy the Jitter RNG noise source provides on a given platform. The obtained data is the time stamp sampled by the Jitter RNG. Considering that the Jitter RNG inserts the delta of this time stamp compared to the immediately preceding time stamp, the obtained data needs to be post-processed accordingly to obtain the data the Jitter RNG inserts into its entropy pool. The raw entropy collection is provided to obtain the raw unmodified time stamps that are about to be added to the Jitter RNG entropy pool and are credited with entropy. Thus, this patch adds an interface which renders the Jitter RNG insecure. This patch is NOT INTENDED FOR PRODUCTION SYSTEMS, but solely for development/test systems to verify the available entropy rate. Access to the data is given through the jent_raw_hires debugfs file. The data buffer should be multiples of sizeof(u32) to fill the entire buffer. Using the option jitterentropy_testing.boot_raw_hires_test=1 the raw noise of the first 1000 entropy events since boot can be sampled. This test interface allows generating the data required for analysis whether the Jitter RNG is in compliance with SP800-90B sections 3.1.3 and 3.1.4. If the test interface is not compiled, its code is a noop which has no impact on the performance. Signed-off-by: Stephan Mueller <smueller@chronox.de> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
30 lines
1.2 KiB
C
30 lines
1.2 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
extern void *jent_zalloc(unsigned int len);
|
|
extern void jent_zfree(void *ptr);
|
|
extern void jent_get_nstime(__u64 *out);
|
|
extern int jent_hash_time(void *hash_state, __u64 time, u8 *addtl,
|
|
unsigned int addtl_len, __u64 hash_loop_cnt,
|
|
unsigned int stuck);
|
|
int jent_read_random_block(void *hash_state, char *dst, unsigned int dst_len);
|
|
|
|
struct rand_data;
|
|
extern int jent_entropy_init(void *hash_state);
|
|
extern int jent_read_entropy(struct rand_data *ec, unsigned char *data,
|
|
unsigned int len);
|
|
|
|
extern struct rand_data *jent_entropy_collector_alloc(unsigned int osr,
|
|
unsigned int flags,
|
|
void *hash_state);
|
|
extern void jent_entropy_collector_free(struct rand_data *entropy_collector);
|
|
|
|
#ifdef CONFIG_CRYPTO_JITTERENTROPY_TESTINTERFACE
|
|
int jent_raw_hires_entropy_store(__u32 value);
|
|
void jent_testing_init(void);
|
|
void jent_testing_exit(void);
|
|
#else /* CONFIG_CRYPTO_JITTERENTROPY_TESTINTERFACE */
|
|
static inline int jent_raw_hires_entropy_store(__u32 value) { return 0; }
|
|
static inline void jent_testing_init(void) { }
|
|
static inline void jent_testing_exit(void) { }
|
|
#endif /* CONFIG_CRYPTO_JITTERENTROPY_TESTINTERFACE */
|