hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/crypto/ofb.c
....@@ -8,40 +8,17 @@
88 */
99
1010 #include <crypto/algapi.h>
11
+#include <crypto/internal/cipher.h>
1112 #include <crypto/internal/skcipher.h>
1213 #include <linux/err.h>
1314 #include <linux/init.h>
1415 #include <linux/kernel.h>
1516 #include <linux/module.h>
16
-#include <linux/scatterlist.h>
17
-#include <linux/slab.h>
18
-
19
-struct crypto_ofb_ctx {
20
- struct crypto_cipher *child;
21
-};
22
-
23
-
24
-static int crypto_ofb_setkey(struct crypto_skcipher *parent, const u8 *key,
25
- unsigned int keylen)
26
-{
27
- struct crypto_ofb_ctx *ctx = crypto_skcipher_ctx(parent);
28
- struct crypto_cipher *child = ctx->child;
29
- int err;
30
-
31
- crypto_cipher_clear_flags(child, CRYPTO_TFM_REQ_MASK);
32
- crypto_cipher_set_flags(child, crypto_skcipher_get_flags(parent) &
33
- CRYPTO_TFM_REQ_MASK);
34
- err = crypto_cipher_setkey(child, key, keylen);
35
- crypto_skcipher_set_flags(parent, crypto_cipher_get_flags(child) &
36
- CRYPTO_TFM_RES_MASK);
37
- return err;
38
-}
3917
4018 static int crypto_ofb_crypt(struct skcipher_request *req)
4119 {
4220 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
43
- struct crypto_ofb_ctx *ctx = crypto_skcipher_ctx(tfm);
44
- struct crypto_cipher *cipher = ctx->child;
21
+ struct crypto_cipher *cipher = skcipher_cipher_simple(tfm);
4522 const unsigned int bsize = crypto_cipher_blocksize(cipher);
4623 struct skcipher_walk walk;
4724 int err;
....@@ -73,75 +50,17 @@
7350 return err;
7451 }
7552
76
-static int crypto_ofb_init_tfm(struct crypto_skcipher *tfm)
77
-{
78
- struct skcipher_instance *inst = skcipher_alg_instance(tfm);
79
- struct crypto_spawn *spawn = skcipher_instance_ctx(inst);
80
- struct crypto_ofb_ctx *ctx = crypto_skcipher_ctx(tfm);
81
- struct crypto_cipher *cipher;
82
-
83
- cipher = crypto_spawn_cipher(spawn);
84
- if (IS_ERR(cipher))
85
- return PTR_ERR(cipher);
86
-
87
- ctx->child = cipher;
88
- return 0;
89
-}
90
-
91
-static void crypto_ofb_exit_tfm(struct crypto_skcipher *tfm)
92
-{
93
- struct crypto_ofb_ctx *ctx = crypto_skcipher_ctx(tfm);
94
-
95
- crypto_free_cipher(ctx->child);
96
-}
97
-
98
-static void crypto_ofb_free(struct skcipher_instance *inst)
99
-{
100
- crypto_drop_skcipher(skcipher_instance_ctx(inst));
101
- kfree(inst);
102
-}
103
-
10453 static int crypto_ofb_create(struct crypto_template *tmpl, struct rtattr **tb)
10554 {
10655 struct skcipher_instance *inst;
107
- struct crypto_attr_type *algt;
108
- struct crypto_spawn *spawn;
10956 struct crypto_alg *alg;
110
- u32 mask;
11157 int err;
11258
113
- err = crypto_check_attr_type(tb, CRYPTO_ALG_TYPE_SKCIPHER);
114
- if (err)
115
- return err;
59
+ inst = skcipher_alloc_instance_simple(tmpl, tb);
60
+ if (IS_ERR(inst))
61
+ return PTR_ERR(inst);
11662
117
- inst = kzalloc(sizeof(*inst) + sizeof(*spawn), GFP_KERNEL);
118
- if (!inst)
119
- return -ENOMEM;
120
-
121
- algt = crypto_get_attr_type(tb);
122
- err = PTR_ERR(algt);
123
- if (IS_ERR(algt))
124
- goto err_free_inst;
125
-
126
- mask = CRYPTO_ALG_TYPE_MASK |
127
- crypto_requires_off(algt->type, algt->mask,
128
- CRYPTO_ALG_NEED_FALLBACK);
129
-
130
- alg = crypto_get_attr_alg(tb, CRYPTO_ALG_TYPE_CIPHER, mask);
131
- err = PTR_ERR(alg);
132
- if (IS_ERR(alg))
133
- goto err_free_inst;
134
-
135
- spawn = skcipher_instance_ctx(inst);
136
- err = crypto_init_spawn(spawn, alg, skcipher_crypto_instance(inst),
137
- CRYPTO_ALG_TYPE_MASK);
138
- crypto_mod_put(alg);
139
- if (err)
140
- goto err_free_inst;
141
-
142
- err = crypto_inst_setname(skcipher_crypto_instance(inst), "ofb", alg);
143
- if (err)
144
- goto err_drop_spawn;
63
+ alg = skcipher_ialg_simple(inst);
14564
14665 /* OFB mode is a stream cipher. */
14766 inst->alg.base.cra_blocksize = 1;
....@@ -152,36 +71,14 @@
15271 */
15372 inst->alg.chunksize = alg->cra_blocksize;
15473
155
- inst->alg.base.cra_priority = alg->cra_priority;
156
- inst->alg.base.cra_alignmask = alg->cra_alignmask;
157
-
158
- inst->alg.ivsize = alg->cra_blocksize;
159
- inst->alg.min_keysize = alg->cra_cipher.cia_min_keysize;
160
- inst->alg.max_keysize = alg->cra_cipher.cia_max_keysize;
161
-
162
- inst->alg.base.cra_ctxsize = sizeof(struct crypto_ofb_ctx);
163
-
164
- inst->alg.init = crypto_ofb_init_tfm;
165
- inst->alg.exit = crypto_ofb_exit_tfm;
166
-
167
- inst->alg.setkey = crypto_ofb_setkey;
16874 inst->alg.encrypt = crypto_ofb_crypt;
16975 inst->alg.decrypt = crypto_ofb_crypt;
17076
171
- inst->free = crypto_ofb_free;
172
-
17377 err = skcipher_register_instance(tmpl, inst);
17478 if (err)
175
- goto err_drop_spawn;
79
+ inst->free(inst);
17680
177
-out:
17881 return err;
179
-
180
-err_drop_spawn:
181
- crypto_drop_spawn(spawn);
182
-err_free_inst:
183
- kfree(inst);
184
- goto out;
18582 }
18683
18784 static struct crypto_template crypto_ofb_tmpl = {
....@@ -200,9 +97,10 @@
20097 crypto_unregister_template(&crypto_ofb_tmpl);
20198 }
20299
203
-module_init(crypto_ofb_module_init);
100
+subsys_initcall(crypto_ofb_module_init);
204101 module_exit(crypto_ofb_module_exit);
205102
206103 MODULE_LICENSE("GPL");
207
-MODULE_DESCRIPTION("OFB block cipher algorithm");
104
+MODULE_DESCRIPTION("OFB block cipher mode of operation");
208105 MODULE_ALIAS_CRYPTO("ofb");
106
+MODULE_IMPORT_NS(CRYPTO_INTERNAL);