aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/cipher.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/cipher.c')
-rw-r--r--crypto/cipher.c38
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
26struct 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
34static inline void xor_64(u8 *a, const u8 *b) 26static 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);