diff options
Diffstat (limited to 'crypto/cipher.c')
-rw-r--r-- | crypto/cipher.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/crypto/cipher.c b/crypto/cipher.c index c4243345b154..54c4a560070d 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c | |||
@@ -23,14 +23,6 @@ | |||
23 | #include "internal.h" | 23 | #include "internal.h" |
24 | #include "scatterwalk.h" | 24 | #include "scatterwalk.h" |
25 | 25 | ||
26 | struct cipher_desc { | ||
27 | struct crypto_tfm *tfm; | ||
28 | void (*crfn)(void *ctx, u8 *dst, const u8 *src); | ||
29 | unsigned int (*prfn)(const struct cipher_desc *desc, u8 *dst, | ||
30 | const u8 *src, unsigned int nbytes); | ||
31 | void *info; | ||
32 | }; | ||
33 | |||
34 | static inline void xor_64(u8 *a, const u8 *b) | 26 | static inline void xor_64(u8 *a, const u8 *b) |
35 | { | 27 | { |
36 | ((u32 *)a)[0] ^= ((u32 *)b)[0]; | 28 | ((u32 *)a)[0] ^= ((u32 *)b)[0]; |
@@ -224,10 +216,11 @@ static int ecb_encrypt(struct crypto_tfm *tfm, | |||
224 | struct scatterlist *src, unsigned int nbytes) | 216 | struct scatterlist *src, unsigned int nbytes) |
225 | { | 217 | { |
226 | struct cipher_desc desc; | 218 | struct cipher_desc desc; |
219 | struct cipher_alg *cipher = &tfm->__crt_alg->cra_cipher; | ||
227 | 220 | ||
228 | desc.tfm = tfm; | 221 | desc.tfm = tfm; |
229 | desc.crfn = tfm->__crt_alg->cra_cipher.cia_encrypt; | 222 | desc.crfn = cipher->cia_encrypt; |
230 | desc.prfn = ecb_process; | 223 | desc.prfn = cipher->cia_encrypt_ecb ?: ecb_process; |
231 | 224 | ||
232 | return crypt(&desc, dst, src, nbytes); | 225 | return crypt(&desc, dst, src, nbytes); |
233 | } | 226 | } |
@@ -238,10 +231,11 @@ static int ecb_decrypt(struct crypto_tfm *tfm, | |||
238 | unsigned int nbytes) | 231 | unsigned int nbytes) |
239 | { | 232 | { |
240 | struct cipher_desc desc; | 233 | struct cipher_desc desc; |
234 | struct cipher_alg *cipher = &tfm->__crt_alg->cra_cipher; | ||
241 | 235 | ||
242 | desc.tfm = tfm; | 236 | desc.tfm = tfm; |
243 | desc.crfn = tfm->__crt_alg->cra_cipher.cia_decrypt; | 237 | desc.crfn = cipher->cia_decrypt; |
244 | desc.prfn = ecb_process; | 238 | desc.prfn = cipher->cia_decrypt_ecb ?: ecb_process; |
245 | 239 | ||
246 | return crypt(&desc, dst, src, nbytes); | 240 | return crypt(&desc, dst, src, nbytes); |
247 | } | 241 | } |
@@ -252,10 +246,11 @@ static int cbc_encrypt(struct crypto_tfm *tfm, | |||
252 | unsigned int nbytes) | 246 | unsigned int nbytes) |
253 | { | 247 | { |
254 | struct cipher_desc desc; | 248 | struct cipher_desc desc; |
249 | struct cipher_alg *cipher = &tfm->__crt_alg->cra_cipher; | ||
255 | 250 | ||
256 | desc.tfm = tfm; | 251 | desc.tfm = tfm; |
257 | desc.crfn = tfm->__crt_alg->cra_cipher.cia_encrypt; | 252 | desc.crfn = cipher->cia_encrypt; |
258 | desc.prfn = cbc_process_encrypt; | 253 | desc.prfn = cipher->cia_encrypt_cbc ?: cbc_process_encrypt; |
259 | desc.info = tfm->crt_cipher.cit_iv; | 254 | desc.info = tfm->crt_cipher.cit_iv; |
260 | 255 | ||
261 | return crypt(&desc, dst, src, nbytes); | 256 | return crypt(&desc, dst, src, nbytes); |
@@ -267,10 +262,11 @@ static int cbc_encrypt_iv(struct crypto_tfm *tfm, | |||
267 | unsigned int nbytes, u8 *iv) | 262 | unsigned int nbytes, u8 *iv) |
268 | { | 263 | { |
269 | struct cipher_desc desc; | 264 | struct cipher_desc desc; |
265 | struct cipher_alg *cipher = &tfm->__crt_alg->cra_cipher; | ||
270 | 266 | ||
271 | desc.tfm = tfm; | 267 | desc.tfm = tfm; |
272 | desc.crfn = tfm->__crt_alg->cra_cipher.cia_encrypt; | 268 | desc.crfn = cipher->cia_encrypt; |
273 | desc.prfn = cbc_process_encrypt; | 269 | desc.prfn = cipher->cia_encrypt_cbc ?: cbc_process_encrypt; |
274 | desc.info = iv; | 270 | desc.info = iv; |
275 | 271 | ||
276 | return crypt(&desc, dst, src, nbytes); | 272 | return crypt(&desc, dst, src, nbytes); |
@@ -282,10 +278,11 @@ static int cbc_decrypt(struct crypto_tfm *tfm, | |||
282 | unsigned int nbytes) | 278 | unsigned int nbytes) |
283 | { | 279 | { |
284 | struct cipher_desc desc; | 280 | struct cipher_desc desc; |
281 | struct cipher_alg *cipher = &tfm->__crt_alg->cra_cipher; | ||
285 | 282 | ||
286 | desc.tfm = tfm; | 283 | desc.tfm = tfm; |
287 | desc.crfn = tfm->__crt_alg->cra_cipher.cia_decrypt; | 284 | desc.crfn = cipher->cia_decrypt; |
288 | desc.prfn = cbc_process_decrypt; | 285 | desc.prfn = cipher->cia_decrypt_cbc ?: cbc_process_decrypt; |
289 | desc.info = tfm->crt_cipher.cit_iv; | 286 | desc.info = tfm->crt_cipher.cit_iv; |
290 | 287 | ||
291 | return crypt(&desc, dst, src, nbytes); | 288 | return crypt(&desc, dst, src, nbytes); |
@@ -297,10 +294,11 @@ static int cbc_decrypt_iv(struct crypto_tfm *tfm, | |||
297 | unsigned int nbytes, u8 *iv) | 294 | unsigned int nbytes, u8 *iv) |
298 | { | 295 | { |
299 | struct cipher_desc desc; | 296 | struct cipher_desc desc; |
297 | struct cipher_alg *cipher = &tfm->__crt_alg->cra_cipher; | ||
300 | 298 | ||
301 | desc.tfm = tfm; | 299 | desc.tfm = tfm; |
302 | desc.crfn = tfm->__crt_alg->cra_cipher.cia_decrypt; | 300 | desc.crfn = cipher->cia_decrypt; |
303 | desc.prfn = cbc_process_decrypt; | 301 | desc.prfn = cipher->cia_decrypt_cbc ?: cbc_process_decrypt; |
304 | desc.info = iv; | 302 | desc.info = iv; |
305 | 303 | ||
306 | return crypt(&desc, dst, src, nbytes); | 304 | return crypt(&desc, dst, src, nbytes); |