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>
diff --git a/crypto/rng.c b/crypto/rng.c
index 87fa2f4..4514d37 100644
--- a/crypto/rng.c
+++ b/crypto/rng.c
@@ -36,6 +36,12 @@
 	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 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;