All of lore.kernel.org
 help / color / mirror / Atom feed
From: Herbert Xu <herbert@gondor.apana.org.au>
To: Linux Crypto Mailing List <linux-crypto@vger.kernel.org>
Subject: [PATCH 5/15] crypto: rng - Introduce crypto_rng_generate
Date: Mon, 20 Apr 2015 13:39:04 +0800	[thread overview]
Message-ID: <E1Yk4QC-0004pj-MV@gondolin.me.apana.org.au> (raw)
In-Reply-To: 20150420053515.GA18444@gondor.apana.org.au

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>
---

 crypto/rng.c         |    9 +++++++--
 include/crypto/rng.h |   27 +++++++++++++++++++++++++--
 2 files changed, 32 insertions(+), 4 deletions(-)

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 @@ 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;
diff --git a/include/crypto/rng.h b/include/crypto/rng.h
index f13f3fa..f20f068 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);
 }
 
 /**

  parent reply	other threads:[~2015-04-20  5:39 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-20  5:35 [0/15] rng: New style interface Herbert Xu
2015-04-20  5:39 ` [PATCH 1/15] crypto: api - Add crypto_alg_extsize helper Herbert Xu
2015-04-20  5:39 ` [PATCH 2/15] crypto: shash - Use " Herbert Xu
2015-04-20  5:39 ` [PATCH 3/15] crypto: pcomp " Herbert Xu
2015-04-20  5:39 ` [PATCH 4/15] crypto: rng - Convert crypto_rng to new style crypto_type Herbert Xu
2015-04-20  5:39 ` Herbert Xu [this message]
2015-04-20  5:39 ` [PATCH 6/15] crypto: rng - Mark crypto_rng_reset seed as const Herbert Xu
2015-04-20 11:48   ` Stephan Mueller
2015-04-20  5:39 ` [PATCH 7/15] crypto: rng - Convert low-level crypto_rng to new style Herbert Xu
2015-04-20  5:39 ` [PATCH 8/15] crypto: rng - Add crypto_rng_set_entropy Herbert Xu
2015-04-20  5:39 ` [PATCH 9/15] crypto: rng - Add multiple algorithm registration interface Herbert Xu
2015-04-20  5:39 ` [PATCH 10/15] crypto: drbg - Convert to new rng interface Herbert Xu
2015-04-20  5:39 ` [PATCH 11/15] crypto: ansi_cprng - Remove bogus inclusion of internal.h Herbert Xu
2015-04-20  5:39 ` [PATCH 12/15] crypto: ansi_cprng - Convert to new rng interface Herbert Xu
2015-04-20  5:39 ` [PATCH 13/15] crypto: krng " Herbert Xu
2015-04-20  5:39 ` [PATCH 14/15] crypto: rng - Remove old low-level " Herbert Xu
2015-04-20  5:39 ` [PATCH 15/15] crypto: algif_rng - Remove obsolete const-removal cast Herbert Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E1Yk4QC-0004pj-MV@gondolin.me.apana.org.au \
    --to=herbert@gondor.apana.org.au \
    --cc=linux-crypto@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.