summaryrefslogtreecommitdiff
path: root/include/crypto
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 /include/crypto
parentd0e83059a6c9b04f00264a74b8f6439948de4613 (diff)
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 'include/crypto')
-rw-r--r--include/crypto/rng.h27
1 files changed, 25 insertions, 2 deletions
diff --git a/include/crypto/rng.h b/include/crypto/rng.h
index f13f3faca4d7..f20f068154bc 100644
--- a/include/crypto/rng.h
+++ b/include/crypto/rng.h
@@ -16,7 +16,9 @@
#include <linux/crypto.h>
struct crypto_rng {
- int (*generate)(struct crypto_rng *tfm, u8 *rdata, unsigned int dlen);
+ int (*generate)(struct crypto_rng *tfm,
+ const u8 *src, unsigned int slen,
+ u8 *dst, unsigned int dlen);
int (*seed)(struct crypto_rng *tfm, u8 *seed, unsigned int slen);
struct crypto_tfm base;
};
@@ -83,6 +85,27 @@ static inline void crypto_free_rng(struct crypto_rng *tfm)
}
/**
+ * crypto_rng_generate() - get random number
+ * @tfm: cipher handle
+ * @src: Input buffer holding additional data, may be NULL
+ * @slen: Length of additional data
+ * @dst: output buffer holding the random numbers
+ * @dlen: length of the output buffer
+ *
+ * This function fills the caller-allocated buffer with random
+ * numbers using the random number generator referenced by the
+ * cipher handle.
+ *
+ * Return: 0 function was successful; < 0 if an error occurred
+ */
+static inline int crypto_rng_generate(struct crypto_rng *tfm,
+ const u8 *src, unsigned int slen,
+ u8 *dst, unsigned int dlen)
+{
+ return tfm->generate(tfm, src, slen, dst, dlen);
+}
+
+/**
* crypto_rng_get_bytes() - get random number
* @tfm: cipher handle
* @rdata: output buffer holding the random numbers
@@ -96,7 +119,7 @@ static inline void crypto_free_rng(struct crypto_rng *tfm)
static inline int crypto_rng_get_bytes(struct crypto_rng *tfm,
u8 *rdata, unsigned int dlen)
{
- return tfm->generate(tfm, rdata, dlen);
+ return crypto_rng_generate(tfm, NULL, 0, rdata, dlen);
}
/**