summaryrefslogtreecommitdiffstats
path: root/crypto/rng.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-04-20 13:39:04 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2015-04-21 10:19:58 +0800
commitff030b099a21a4753af575b4304249e88400e506 (patch)
treef54046623574ff38c4da038d3eff37837978aec6 /crypto/rng.c
parentd0e83059a6c9b04f00264a74b8f6439948de4613 (diff)
downloadlinux-0-day-ff030b099a21a4753af575b4304249e88400e506.tar.gz
linux-0-day-ff030b099a21a4753af575b4304249e88400e506.tar.xz
crypto: rng - Introduce crypto_rng_generate
This patch adds the new top-level function crypto_rng_generate which generates random numbers with additional input. It also extends the mid-level rng_gen_random function to take additional data as input. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/rng.c')
-rw-r--r--crypto/rng.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/crypto/rng.c b/crypto/rng.c
index 87fa2f4933b05..4514d3755f794 100644
--- a/crypto/rng.c
+++ b/crypto/rng.c
@@ -36,6 +36,12 @@ static inline struct crypto_rng *__crypto_rng_cast(struct crypto_tfm *tfm)
return container_of(tfm, struct crypto_rng, base);
}
+static int generate(struct crypto_rng *tfm, const u8 *src, unsigned int slen,
+ u8 *dst, unsigned int dlen)
+{
+ return crypto_rng_alg(tfm)->rng_make_random(tfm, dst, dlen);
+}
+
static int rngapi_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen)
{
u8 *buf = NULL;
@@ -59,9 +65,8 @@ static int rngapi_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen)
static int crypto_rng_init_tfm(struct crypto_tfm *tfm)
{
struct crypto_rng *rng = __crypto_rng_cast(tfm);
- struct rng_alg *alg = &tfm->__crt_alg->cra_rng;
- rng->generate = alg->rng_make_random;
+ rng->generate = generate;
rng->seed = rngapi_reset;
return 0;