mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-21 22:47:51 -04:00
crypto: drbg - Remove unhelpful helper functions
Fold the contents of the inline functions crypto_drbg_get_bytes_addtl(), crypto_drbg_get_bytes_addtl_test(), and crypto_drbg_reset_test() into their only caller in drbg_cavs_test(). It ends up being much simpler. Signed-off-by: Eric Biggers <ebiggers@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -55,7 +55,7 @@
|
||||
* char data[DATALEN];
|
||||
*
|
||||
* drng = crypto_alloc_rng(drng_name, 0, 0);
|
||||
* err = crypto_rng_get_bytes(drng, &data, DATALEN);
|
||||
* err = crypto_rng_get_bytes(drng, data, DATALEN);
|
||||
* crypto_free_rng(drng);
|
||||
*
|
||||
*
|
||||
@@ -64,15 +64,13 @@
|
||||
* struct crypto_rng *drng;
|
||||
* int err;
|
||||
* char data[DATALEN];
|
||||
* struct drbg_string pers;
|
||||
* char personalization[11] = "some-string";
|
||||
*
|
||||
* drbg_string_fill(&pers, personalization, strlen(personalization));
|
||||
* drng = crypto_alloc_rng(drng_name, 0, 0);
|
||||
* // The reset completely re-initializes the DRBG with the provided
|
||||
* // personalization string
|
||||
* err = crypto_rng_reset(drng, &personalization, strlen(personalization));
|
||||
* err = crypto_rng_get_bytes(drng, &data, DATALEN);
|
||||
* err = crypto_rng_reset(drng, personalization, strlen(personalization));
|
||||
* err = crypto_rng_get_bytes(drng, data, DATALEN);
|
||||
* crypto_free_rng(drng);
|
||||
*
|
||||
*
|
||||
@@ -82,13 +80,10 @@
|
||||
* int err;
|
||||
* char data[DATALEN];
|
||||
* char addtl_string[11] = "some-string";
|
||||
* string drbg_string addtl;
|
||||
*
|
||||
* drbg_string_fill(&addtl, addtl_string, strlen(addtl_string));
|
||||
* drng = crypto_alloc_rng(drng_name, 0, 0);
|
||||
* // The following call is a wrapper to crypto_rng_get_bytes() and returns
|
||||
* // the same error codes.
|
||||
* err = crypto_drbg_get_bytes_addtl(drng, &data, DATALEN, &addtl);
|
||||
* err = crypto_rng_generate(drng, addtl_string, strlen(addtl_string),
|
||||
data, DATALEN);
|
||||
* crypto_free_rng(drng);
|
||||
*
|
||||
*
|
||||
|
||||
@@ -3487,8 +3487,6 @@ static int drbg_cavs_test(const struct drbg_testvec *test, int pr,
|
||||
{
|
||||
int ret = -EAGAIN;
|
||||
struct crypto_rng *drng;
|
||||
struct drbg_test_data test_data;
|
||||
struct drbg_string addtl, pers, testentropy;
|
||||
unsigned char *buf = kzalloc(test->expectedlen, GFP_KERNEL);
|
||||
|
||||
if (!buf)
|
||||
@@ -3504,39 +3502,27 @@ static int drbg_cavs_test(const struct drbg_testvec *test, int pr,
|
||||
return PTR_ERR(drng);
|
||||
}
|
||||
|
||||
test_data.testentropy = &testentropy;
|
||||
drbg_string_fill(&testentropy, test->entropy, test->entropylen);
|
||||
drbg_string_fill(&pers, test->pers, test->perslen);
|
||||
ret = crypto_drbg_reset_test(drng, &pers, &test_data);
|
||||
crypto_rng_set_entropy(drng, test->entropy, test->entropylen);
|
||||
ret = crypto_rng_reset(drng, test->pers, test->perslen);
|
||||
if (ret) {
|
||||
printk(KERN_ERR "alg: drbg: Failed to reset rng\n");
|
||||
goto outbuf;
|
||||
}
|
||||
|
||||
drbg_string_fill(&addtl, test->addtla, test->addtllen);
|
||||
if (pr) {
|
||||
drbg_string_fill(&testentropy, test->entpra, test->entprlen);
|
||||
ret = crypto_drbg_get_bytes_addtl_test(drng,
|
||||
buf, test->expectedlen, &addtl, &test_data);
|
||||
} else {
|
||||
ret = crypto_drbg_get_bytes_addtl(drng,
|
||||
buf, test->expectedlen, &addtl);
|
||||
}
|
||||
if (pr)
|
||||
crypto_rng_set_entropy(drng, test->entpra, test->entprlen);
|
||||
ret = crypto_rng_generate(drng, test->addtla, test->addtllen,
|
||||
buf, test->expectedlen);
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "alg: drbg: could not obtain random data for "
|
||||
"driver %s\n", driver);
|
||||
goto outbuf;
|
||||
}
|
||||
|
||||
drbg_string_fill(&addtl, test->addtlb, test->addtllen);
|
||||
if (pr) {
|
||||
drbg_string_fill(&testentropy, test->entprb, test->entprlen);
|
||||
ret = crypto_drbg_get_bytes_addtl_test(drng,
|
||||
buf, test->expectedlen, &addtl, &test_data);
|
||||
} else {
|
||||
ret = crypto_drbg_get_bytes_addtl(drng,
|
||||
buf, test->expectedlen, &addtl);
|
||||
}
|
||||
if (pr)
|
||||
crypto_rng_set_entropy(drng, test->entprb, test->entprlen);
|
||||
ret = crypto_rng_generate(drng, test->addtlb, test->addtllen,
|
||||
buf, test->expectedlen);
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "alg: drbg: could not obtain random data for "
|
||||
"driver %s\n", driver);
|
||||
|
||||
@@ -78,10 +78,6 @@ struct drbg_state_ops {
|
||||
|
||||
};
|
||||
|
||||
struct drbg_test_data {
|
||||
struct drbg_string *testentropy; /* TEST PARAMETER: test entropy */
|
||||
};
|
||||
|
||||
enum drbg_seed_state {
|
||||
DRBG_SEED_STATE_UNSEEDED,
|
||||
DRBG_SEED_STATE_PARTIAL, /* Seeded with !rng_is_initialized() */
|
||||
@@ -165,78 +161,6 @@ static inline size_t drbg_max_requests(struct drbg_state *drbg)
|
||||
return (1<<20);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a wrapper to the kernel crypto API function of
|
||||
* crypto_rng_generate() to allow the caller to provide additional data.
|
||||
*
|
||||
* @drng DRBG handle -- see crypto_rng_get_bytes
|
||||
* @outbuf output buffer -- see crypto_rng_get_bytes
|
||||
* @outlen length of output buffer -- see crypto_rng_get_bytes
|
||||
* @addtl_input additional information string input buffer
|
||||
* @addtllen length of additional information string buffer
|
||||
*
|
||||
* return
|
||||
* see crypto_rng_get_bytes
|
||||
*/
|
||||
static inline int crypto_drbg_get_bytes_addtl(struct crypto_rng *drng,
|
||||
unsigned char *outbuf, unsigned int outlen,
|
||||
struct drbg_string *addtl)
|
||||
{
|
||||
return crypto_rng_generate(drng, addtl->buf, addtl->len,
|
||||
outbuf, outlen);
|
||||
}
|
||||
|
||||
/*
|
||||
* TEST code
|
||||
*
|
||||
* This is a wrapper to the kernel crypto API function of
|
||||
* crypto_rng_generate() to allow the caller to provide additional data and
|
||||
* allow furnishing of test_data
|
||||
*
|
||||
* @drng DRBG handle -- see crypto_rng_get_bytes
|
||||
* @outbuf output buffer -- see crypto_rng_get_bytes
|
||||
* @outlen length of output buffer -- see crypto_rng_get_bytes
|
||||
* @addtl_input additional information string input buffer
|
||||
* @addtllen length of additional information string buffer
|
||||
* @test_data filled test data
|
||||
*
|
||||
* return
|
||||
* see crypto_rng_get_bytes
|
||||
*/
|
||||
static inline int crypto_drbg_get_bytes_addtl_test(struct crypto_rng *drng,
|
||||
unsigned char *outbuf, unsigned int outlen,
|
||||
struct drbg_string *addtl,
|
||||
struct drbg_test_data *test_data)
|
||||
{
|
||||
crypto_rng_set_entropy(drng, test_data->testentropy->buf,
|
||||
test_data->testentropy->len);
|
||||
return crypto_rng_generate(drng, addtl->buf, addtl->len,
|
||||
outbuf, outlen);
|
||||
}
|
||||
|
||||
/*
|
||||
* TEST code
|
||||
*
|
||||
* This is a wrapper to the kernel crypto API function of
|
||||
* crypto_rng_reset() to allow the caller to provide test_data
|
||||
*
|
||||
* @drng DRBG handle -- see crypto_rng_reset
|
||||
* @pers personalization string input buffer
|
||||
* @perslen length of additional information string buffer
|
||||
* @test_data filled test data
|
||||
*
|
||||
* return
|
||||
* see crypto_rng_reset
|
||||
*/
|
||||
static inline int crypto_drbg_reset_test(struct crypto_rng *drng,
|
||||
struct drbg_string *pers,
|
||||
struct drbg_test_data *test_data)
|
||||
{
|
||||
crypto_rng_set_entropy(drng, test_data->testentropy->buf,
|
||||
test_data->testentropy->len);
|
||||
return crypto_rng_reset(drng, pers->buf, pers->len);
|
||||
}
|
||||
|
||||
/* DRBG type flags */
|
||||
#define DRBG_CTR ((drbg_flag_t)1<<0)
|
||||
#define DRBG_HMAC ((drbg_flag_t)1<<1)
|
||||
|
||||
Reference in New Issue
Block a user