aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-04-20 22:46:46 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2015-04-21 21:30:20 -0400
commit94f1bb15bed84ad6c893916b7e7b9db6f1d7eec6 (patch)
tree5deafd0b955a212c1b86893bf1e43c711ac7b861
parente33cf2c5aab7d0012e7890089e89ae2466c2449c (diff)
crypto: rng - Remove old low-level rng interface
Now that all rng implementations have switched over to the new interface, we can remove the old low-level interface. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--crypto/rng.c57
-rw-r--r--include/crypto/internal/rng.h3
-rw-r--r--include/crypto/rng.h10
-rw-r--r--include/linux/crypto.h30
4 files changed, 8 insertions, 92 deletions
diff --git a/crypto/rng.c b/crypto/rng.c
index e98ce1ca527d..055e276427b1 100644
--- a/crypto/rng.c
+++ b/crypto/rng.c
@@ -4,6 +4,7 @@
4 * RNG operations. 4 * RNG operations.
5 * 5 *
6 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com> 6 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
7 * Copyright (c) 2015 Herbert Xu <herbert@gondor.apana.org.au>
7 * 8 *
8 * This program is free software; you can redistribute it and/or modify it 9 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the Free 10 * under the terms of the GNU General Public License as published by the Free
@@ -36,39 +37,6 @@ static inline struct crypto_rng *__crypto_rng_cast(struct crypto_tfm *tfm)
36 return container_of(tfm, struct crypto_rng, base); 37 return container_of(tfm, struct crypto_rng, base);
37} 38}
38 39
39static inline struct old_rng_alg *crypto_old_rng_alg(struct crypto_rng *tfm)
40{
41 return &crypto_rng_tfm(tfm)->__crt_alg->cra_rng;
42}
43
44static int generate(struct crypto_rng *tfm, const u8 *src, unsigned int slen,
45 u8 *dst, unsigned int dlen)
46{
47 return crypto_old_rng_alg(tfm)->rng_make_random(tfm, dst, dlen);
48}
49
50static int rngapi_reset(struct crypto_rng *tfm, const u8 *seed,
51 unsigned int slen)
52{
53 u8 *buf = NULL;
54 u8 *src = (u8 *)seed;
55 int err;
56
57 if (slen) {
58 buf = kmalloc(slen, GFP_KERNEL);
59 if (!buf)
60 return -ENOMEM;
61
62 memcpy(buf, seed, slen);
63 src = buf;
64 }
65
66 err = crypto_old_rng_alg(tfm)->rng_reset(tfm, src, slen);
67
68 kzfree(buf);
69 return err;
70}
71
72int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen) 40int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen)
73{ 41{
74 u8 *buf = NULL; 42 u8 *buf = NULL;
@@ -83,7 +51,7 @@ int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen)
83 seed = buf; 51 seed = buf;
84 } 52 }
85 53
86 err = tfm->seed(tfm, seed, slen); 54 err = crypto_rng_alg(tfm)->seed(tfm, seed, slen);
87 55
88 kfree(buf); 56 kfree(buf);
89 return err; 57 return err;
@@ -92,21 +60,6 @@ EXPORT_SYMBOL_GPL(crypto_rng_reset);
92 60
93static int crypto_rng_init_tfm(struct crypto_tfm *tfm) 61static int crypto_rng_init_tfm(struct crypto_tfm *tfm)
94{ 62{
95 struct crypto_rng *rng = __crypto_rng_cast(tfm);
96 struct rng_alg *alg = crypto_rng_alg(rng);
97 struct old_rng_alg *oalg = crypto_old_rng_alg(rng);
98
99 if (oalg->rng_make_random) {
100 rng->generate = generate;
101 rng->seed = rngapi_reset;
102 rng->seedsize = oalg->seedsize;
103 return 0;
104 }
105
106 rng->generate = alg->generate;
107 rng->seed = alg->seed;
108 rng->seedsize = alg->seedsize;
109
110 return 0; 63 return 0;
111} 64}
112 65
@@ -114,8 +67,7 @@ static unsigned int seedsize(struct crypto_alg *alg)
114{ 67{
115 struct rng_alg *ralg = container_of(alg, struct rng_alg, base); 68 struct rng_alg *ralg = container_of(alg, struct rng_alg, base);
116 69
117 return alg->cra_rng.rng_make_random ? 70 return ralg->seedsize;
118 alg->cra_rng.seedsize : ralg->seedsize;
119} 71}
120 72
121#ifdef CONFIG_NET 73#ifdef CONFIG_NET
@@ -150,7 +102,7 @@ static void crypto_rng_show(struct seq_file *m, struct crypto_alg *alg)
150 seq_printf(m, "seedsize : %u\n", seedsize(alg)); 102 seq_printf(m, "seedsize : %u\n", seedsize(alg));
151} 103}
152 104
153const struct crypto_type crypto_rng_type = { 105static const struct crypto_type crypto_rng_type = {
154 .extsize = crypto_alg_extsize, 106 .extsize = crypto_alg_extsize,
155 .init_tfm = crypto_rng_init_tfm, 107 .init_tfm = crypto_rng_init_tfm,
156#ifdef CONFIG_PROC_FS 108#ifdef CONFIG_PROC_FS
@@ -162,7 +114,6 @@ const struct crypto_type crypto_rng_type = {
162 .type = CRYPTO_ALG_TYPE_RNG, 114 .type = CRYPTO_ALG_TYPE_RNG,
163 .tfmsize = offsetof(struct crypto_rng, base), 115 .tfmsize = offsetof(struct crypto_rng, base),
164}; 116};
165EXPORT_SYMBOL_GPL(crypto_rng_type);
166 117
167struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask) 118struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask)
168{ 119{
diff --git a/include/crypto/internal/rng.h b/include/crypto/internal/rng.h
index 2c9a865c66e2..263f1a5eebc7 100644
--- a/include/crypto/internal/rng.h
+++ b/include/crypto/internal/rng.h
@@ -2,6 +2,7 @@
2 * RNG: Random Number Generator algorithms under the crypto API 2 * RNG: Random Number Generator algorithms under the crypto API
3 * 3 *
4 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com> 4 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
5 * Copyright (c) 2015 Herbert Xu <herbert@gondor.apana.org.au>
5 * 6 *
6 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free 8 * under the terms of the GNU General Public License as published by the Free
@@ -16,8 +17,6 @@
16#include <crypto/algapi.h> 17#include <crypto/algapi.h>
17#include <crypto/rng.h> 18#include <crypto/rng.h>
18 19
19extern const struct crypto_type crypto_rng_type;
20
21int crypto_register_rng(struct rng_alg *alg); 20int crypto_register_rng(struct rng_alg *alg);
22void crypto_unregister_rng(struct rng_alg *alg); 21void crypto_unregister_rng(struct rng_alg *alg);
23int crypto_register_rngs(struct rng_alg *algs, int count); 22int crypto_register_rngs(struct rng_alg *algs, int count);
diff --git a/include/crypto/rng.h b/include/crypto/rng.h
index cc22e52a129a..c5d4684429f5 100644
--- a/include/crypto/rng.h
+++ b/include/crypto/rng.h
@@ -2,6 +2,7 @@
2 * RNG: Random Number Generator algorithms under the crypto API 2 * RNG: Random Number Generator algorithms under the crypto API
3 * 3 *
4 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com> 4 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
5 * Copyright (c) 2015 Herbert Xu <herbert@gondor.apana.org.au>
5 * 6 *
6 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free 8 * under the terms of the GNU General Public License as published by the Free
@@ -56,11 +57,6 @@ struct rng_alg {
56}; 57};
57 58
58struct crypto_rng { 59struct crypto_rng {
59 int (*generate)(struct crypto_rng *tfm,
60 const u8 *src, unsigned int slen,
61 u8 *dst, unsigned int dlen);
62 int (*seed)(struct crypto_rng *tfm, const u8 *seed, unsigned int slen);
63 unsigned int seedsize;
64 struct crypto_tfm base; 60 struct crypto_tfm base;
65}; 61};
66 62
@@ -144,7 +140,7 @@ static inline int crypto_rng_generate(struct crypto_rng *tfm,
144 const u8 *src, unsigned int slen, 140 const u8 *src, unsigned int slen,
145 u8 *dst, unsigned int dlen) 141 u8 *dst, unsigned int dlen)
146{ 142{
147 return tfm->generate(tfm, src, slen, dst, dlen); 143 return crypto_rng_alg(tfm)->generate(tfm, src, slen, dst, dlen);
148} 144}
149 145
150/** 146/**
@@ -198,7 +194,7 @@ int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed,
198 */ 194 */
199static inline int crypto_rng_seedsize(struct crypto_rng *tfm) 195static inline int crypto_rng_seedsize(struct crypto_rng *tfm)
200{ 196{
201 return tfm->seedsize; 197 return crypto_rng_alg(tfm)->seedsize;
202} 198}
203 199
204#endif 200#endif
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index 2fa9b05360f7..ee14140f8893 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -138,7 +138,6 @@ struct crypto_async_request;
138struct crypto_aead; 138struct crypto_aead;
139struct crypto_blkcipher; 139struct crypto_blkcipher;
140struct crypto_hash; 140struct crypto_hash;
141struct crypto_rng;
142struct crypto_tfm; 141struct crypto_tfm;
143struct crypto_type; 142struct crypto_type;
144struct aead_givcrypt_request; 143struct aead_givcrypt_request;
@@ -426,40 +425,12 @@ struct compress_alg {
426 unsigned int slen, u8 *dst, unsigned int *dlen); 425 unsigned int slen, u8 *dst, unsigned int *dlen);
427}; 426};
428 427
429/**
430 * struct old_rng_alg - random number generator definition
431 * @rng_make_random: The function defined by this variable obtains a random
432 * number. The random number generator transform must generate
433 * the random number out of the context provided with this
434 * call.
435 * @rng_reset: Reset of the random number generator by clearing the entire state.
436 * With the invocation of this function call, the random number
437 * generator shall completely reinitialize its state. If the random
438 * number generator requires a seed for setting up a new state,
439 * the seed must be provided by the consumer while invoking this
440 * function. The required size of the seed is defined with
441 * @seedsize .
442 * @seedsize: The seed size required for a random number generator
443 * initialization defined with this variable. Some random number
444 * generators like the SP800-90A DRBG does not require a seed as the
445 * seeding is implemented internally without the need of support by
446 * the consumer. In this case, the seed size is set to zero.
447 */
448struct old_rng_alg {
449 int (*rng_make_random)(struct crypto_rng *tfm, u8 *rdata,
450 unsigned int dlen);
451 int (*rng_reset)(struct crypto_rng *tfm, u8 *seed, unsigned int slen);
452
453 unsigned int seedsize;
454};
455
456 428
457#define cra_ablkcipher cra_u.ablkcipher 429#define cra_ablkcipher cra_u.ablkcipher
458#define cra_aead cra_u.aead 430#define cra_aead cra_u.aead
459#define cra_blkcipher cra_u.blkcipher 431#define cra_blkcipher cra_u.blkcipher
460#define cra_cipher cra_u.cipher 432#define cra_cipher cra_u.cipher
461#define cra_compress cra_u.compress 433#define cra_compress cra_u.compress
462#define cra_rng cra_u.rng
463 434
464/** 435/**
465 * struct crypto_alg - definition of a cryptograpic cipher algorithm 436 * struct crypto_alg - definition of a cryptograpic cipher algorithm
@@ -559,7 +530,6 @@ struct crypto_alg {
559 struct blkcipher_alg blkcipher; 530 struct blkcipher_alg blkcipher;
560 struct cipher_alg cipher; 531 struct cipher_alg cipher;
561 struct compress_alg compress; 532 struct compress_alg compress;
562 struct old_rng_alg rng;
563 } cra_u; 533 } cra_u;
564 534
565 int (*cra_init)(struct crypto_tfm *tfm); 535 int (*cra_init)(struct crypto_tfm *tfm);