diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2015-04-20 22:46:46 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2015-04-21 21:30:20 -0400 |
commit | 94f1bb15bed84ad6c893916b7e7b9db6f1d7eec6 (patch) | |
tree | 5deafd0b955a212c1b86893bf1e43c711ac7b861 | |
parent | e33cf2c5aab7d0012e7890089e89ae2466c2449c (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.c | 57 | ||||
-rw-r--r-- | include/crypto/internal/rng.h | 3 | ||||
-rw-r--r-- | include/crypto/rng.h | 10 | ||||
-rw-r--r-- | include/linux/crypto.h | 30 |
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 | ||
39 | static 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 | |||
44 | static 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 | |||
50 | static 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 | |||
72 | int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen) | 40 | int 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 | ||
93 | static int crypto_rng_init_tfm(struct crypto_tfm *tfm) | 61 | static 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 | ||
153 | const struct crypto_type crypto_rng_type = { | 105 | static 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 | }; |
165 | EXPORT_SYMBOL_GPL(crypto_rng_type); | ||
166 | 117 | ||
167 | struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask) | 118 | struct 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 | ||
19 | extern const struct crypto_type crypto_rng_type; | ||
20 | |||
21 | int crypto_register_rng(struct rng_alg *alg); | 20 | int crypto_register_rng(struct rng_alg *alg); |
22 | void crypto_unregister_rng(struct rng_alg *alg); | 21 | void crypto_unregister_rng(struct rng_alg *alg); |
23 | int crypto_register_rngs(struct rng_alg *algs, int count); | 22 | int 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 | ||
58 | struct crypto_rng { | 59 | struct 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 | */ |
199 | static inline int crypto_rng_seedsize(struct crypto_rng *tfm) | 195 | static 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; | |||
138 | struct crypto_aead; | 138 | struct crypto_aead; |
139 | struct crypto_blkcipher; | 139 | struct crypto_blkcipher; |
140 | struct crypto_hash; | 140 | struct crypto_hash; |
141 | struct crypto_rng; | ||
142 | struct crypto_tfm; | 141 | struct crypto_tfm; |
143 | struct crypto_type; | 142 | struct crypto_type; |
144 | struct aead_givcrypt_request; | 143 | struct 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 | */ | ||
448 | struct 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); |