diff options
author | Jussi Kivilinna <jussi.kivilinna@mbnet.fi> | 2012-02-17 15:48:43 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2012-02-25 04:20:22 -0500 |
commit | 53709ddee36cbd19434aa0f0ac8c1e27b92aca33 (patch) | |
tree | 59c7543cc150c6849185e74d21976461c530ba28 /arch/x86/crypto | |
parent | 35474c3bb712261c285ca20c568e4e508387cad5 (diff) |
crypto: twofish-x86_64-3way - use crypto_[un]register_algs
Combine all crypto_alg to be registered and use new crypto_[un]register_algs
functions. Simplifies init/exit code and reduce object size.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'arch/x86/crypto')
-rw-r--r-- | arch/x86/crypto/twofish_glue_3way.c | 219 |
1 files changed, 89 insertions, 130 deletions
diff --git a/arch/x86/crypto/twofish_glue_3way.c b/arch/x86/crypto/twofish_glue_3way.c index 2c7f14ec708..408fc0c5814 100644 --- a/arch/x86/crypto/twofish_glue_3way.c +++ b/arch/x86/crypto/twofish_glue_3way.c | |||
@@ -123,28 +123,6 @@ static int ecb_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst, | |||
123 | return ecb_crypt(desc, &walk, twofish_dec_blk, twofish_dec_blk_3way); | 123 | return ecb_crypt(desc, &walk, twofish_dec_blk, twofish_dec_blk_3way); |
124 | } | 124 | } |
125 | 125 | ||
126 | static struct crypto_alg blk_ecb_alg = { | ||
127 | .cra_name = "ecb(twofish)", | ||
128 | .cra_driver_name = "ecb-twofish-3way", | ||
129 | .cra_priority = 300, | ||
130 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
131 | .cra_blocksize = TF_BLOCK_SIZE, | ||
132 | .cra_ctxsize = sizeof(struct twofish_ctx), | ||
133 | .cra_alignmask = 0, | ||
134 | .cra_type = &crypto_blkcipher_type, | ||
135 | .cra_module = THIS_MODULE, | ||
136 | .cra_list = LIST_HEAD_INIT(blk_ecb_alg.cra_list), | ||
137 | .cra_u = { | ||
138 | .blkcipher = { | ||
139 | .min_keysize = TF_MIN_KEY_SIZE, | ||
140 | .max_keysize = TF_MAX_KEY_SIZE, | ||
141 | .setkey = twofish_setkey, | ||
142 | .encrypt = ecb_encrypt, | ||
143 | .decrypt = ecb_decrypt, | ||
144 | }, | ||
145 | }, | ||
146 | }; | ||
147 | |||
148 | static unsigned int __cbc_encrypt(struct blkcipher_desc *desc, | 126 | static unsigned int __cbc_encrypt(struct blkcipher_desc *desc, |
149 | struct blkcipher_walk *walk) | 127 | struct blkcipher_walk *walk) |
150 | { | 128 | { |
@@ -268,29 +246,6 @@ static int cbc_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst, | |||
268 | return err; | 246 | return err; |
269 | } | 247 | } |
270 | 248 | ||
271 | static struct crypto_alg blk_cbc_alg = { | ||
272 | .cra_name = "cbc(twofish)", | ||
273 | .cra_driver_name = "cbc-twofish-3way", | ||
274 | .cra_priority = 300, | ||
275 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
276 | .cra_blocksize = TF_BLOCK_SIZE, | ||
277 | .cra_ctxsize = sizeof(struct twofish_ctx), | ||
278 | .cra_alignmask = 0, | ||
279 | .cra_type = &crypto_blkcipher_type, | ||
280 | .cra_module = THIS_MODULE, | ||
281 | .cra_list = LIST_HEAD_INIT(blk_cbc_alg.cra_list), | ||
282 | .cra_u = { | ||
283 | .blkcipher = { | ||
284 | .min_keysize = TF_MIN_KEY_SIZE, | ||
285 | .max_keysize = TF_MAX_KEY_SIZE, | ||
286 | .ivsize = TF_BLOCK_SIZE, | ||
287 | .setkey = twofish_setkey, | ||
288 | .encrypt = cbc_encrypt, | ||
289 | .decrypt = cbc_decrypt, | ||
290 | }, | ||
291 | }, | ||
292 | }; | ||
293 | |||
294 | static inline void u128_to_be128(be128 *dst, const u128 *src) | 249 | static inline void u128_to_be128(be128 *dst, const u128 *src) |
295 | { | 250 | { |
296 | dst->a = cpu_to_be64(src->a); | 251 | dst->a = cpu_to_be64(src->a); |
@@ -412,29 +367,6 @@ static int ctr_crypt(struct blkcipher_desc *desc, struct scatterlist *dst, | |||
412 | return err; | 367 | return err; |
413 | } | 368 | } |
414 | 369 | ||
415 | static struct crypto_alg blk_ctr_alg = { | ||
416 | .cra_name = "ctr(twofish)", | ||
417 | .cra_driver_name = "ctr-twofish-3way", | ||
418 | .cra_priority = 300, | ||
419 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
420 | .cra_blocksize = 1, | ||
421 | .cra_ctxsize = sizeof(struct twofish_ctx), | ||
422 | .cra_alignmask = 0, | ||
423 | .cra_type = &crypto_blkcipher_type, | ||
424 | .cra_module = THIS_MODULE, | ||
425 | .cra_list = LIST_HEAD_INIT(blk_ctr_alg.cra_list), | ||
426 | .cra_u = { | ||
427 | .blkcipher = { | ||
428 | .min_keysize = TF_MIN_KEY_SIZE, | ||
429 | .max_keysize = TF_MAX_KEY_SIZE, | ||
430 | .ivsize = TF_BLOCK_SIZE, | ||
431 | .setkey = twofish_setkey, | ||
432 | .encrypt = ctr_crypt, | ||
433 | .decrypt = ctr_crypt, | ||
434 | }, | ||
435 | }, | ||
436 | }; | ||
437 | |||
438 | static void encrypt_callback(void *priv, u8 *srcdst, unsigned int nbytes) | 370 | static void encrypt_callback(void *priv, u8 *srcdst, unsigned int nbytes) |
439 | { | 371 | { |
440 | const unsigned int bsize = TF_BLOCK_SIZE; | 372 | const unsigned int bsize = TF_BLOCK_SIZE; |
@@ -525,30 +457,6 @@ static void lrw_exit_tfm(struct crypto_tfm *tfm) | |||
525 | lrw_free_table(&ctx->lrw_table); | 457 | lrw_free_table(&ctx->lrw_table); |
526 | } | 458 | } |
527 | 459 | ||
528 | static struct crypto_alg blk_lrw_alg = { | ||
529 | .cra_name = "lrw(twofish)", | ||
530 | .cra_driver_name = "lrw-twofish-3way", | ||
531 | .cra_priority = 300, | ||
532 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
533 | .cra_blocksize = TF_BLOCK_SIZE, | ||
534 | .cra_ctxsize = sizeof(struct twofish_lrw_ctx), | ||
535 | .cra_alignmask = 0, | ||
536 | .cra_type = &crypto_blkcipher_type, | ||
537 | .cra_module = THIS_MODULE, | ||
538 | .cra_list = LIST_HEAD_INIT(blk_lrw_alg.cra_list), | ||
539 | .cra_exit = lrw_exit_tfm, | ||
540 | .cra_u = { | ||
541 | .blkcipher = { | ||
542 | .min_keysize = TF_MIN_KEY_SIZE + TF_BLOCK_SIZE, | ||
543 | .max_keysize = TF_MAX_KEY_SIZE + TF_BLOCK_SIZE, | ||
544 | .ivsize = TF_BLOCK_SIZE, | ||
545 | .setkey = lrw_twofish_setkey, | ||
546 | .encrypt = lrw_encrypt, | ||
547 | .decrypt = lrw_decrypt, | ||
548 | }, | ||
549 | }, | ||
550 | }; | ||
551 | |||
552 | struct twofish_xts_ctx { | 460 | struct twofish_xts_ctx { |
553 | struct twofish_ctx tweak_ctx; | 461 | struct twofish_ctx tweak_ctx; |
554 | struct twofish_ctx crypt_ctx; | 462 | struct twofish_ctx crypt_ctx; |
@@ -615,7 +523,91 @@ static int xts_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst, | |||
615 | return xts_crypt(desc, dst, src, nbytes, &req); | 523 | return xts_crypt(desc, dst, src, nbytes, &req); |
616 | } | 524 | } |
617 | 525 | ||
618 | static struct crypto_alg blk_xts_alg = { | 526 | static struct crypto_alg tf_algs[5] = { { |
527 | .cra_name = "ecb(twofish)", | ||
528 | .cra_driver_name = "ecb-twofish-3way", | ||
529 | .cra_priority = 300, | ||
530 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
531 | .cra_blocksize = TF_BLOCK_SIZE, | ||
532 | .cra_ctxsize = sizeof(struct twofish_ctx), | ||
533 | .cra_alignmask = 0, | ||
534 | .cra_type = &crypto_blkcipher_type, | ||
535 | .cra_module = THIS_MODULE, | ||
536 | .cra_list = LIST_HEAD_INIT(tf_algs[0].cra_list), | ||
537 | .cra_u = { | ||
538 | .blkcipher = { | ||
539 | .min_keysize = TF_MIN_KEY_SIZE, | ||
540 | .max_keysize = TF_MAX_KEY_SIZE, | ||
541 | .setkey = twofish_setkey, | ||
542 | .encrypt = ecb_encrypt, | ||
543 | .decrypt = ecb_decrypt, | ||
544 | }, | ||
545 | }, | ||
546 | }, { | ||
547 | .cra_name = "cbc(twofish)", | ||
548 | .cra_driver_name = "cbc-twofish-3way", | ||
549 | .cra_priority = 300, | ||
550 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
551 | .cra_blocksize = TF_BLOCK_SIZE, | ||
552 | .cra_ctxsize = sizeof(struct twofish_ctx), | ||
553 | .cra_alignmask = 0, | ||
554 | .cra_type = &crypto_blkcipher_type, | ||
555 | .cra_module = THIS_MODULE, | ||
556 | .cra_list = LIST_HEAD_INIT(tf_algs[1].cra_list), | ||
557 | .cra_u = { | ||
558 | .blkcipher = { | ||
559 | .min_keysize = TF_MIN_KEY_SIZE, | ||
560 | .max_keysize = TF_MAX_KEY_SIZE, | ||
561 | .ivsize = TF_BLOCK_SIZE, | ||
562 | .setkey = twofish_setkey, | ||
563 | .encrypt = cbc_encrypt, | ||
564 | .decrypt = cbc_decrypt, | ||
565 | }, | ||
566 | }, | ||
567 | }, { | ||
568 | .cra_name = "ctr(twofish)", | ||
569 | .cra_driver_name = "ctr-twofish-3way", | ||
570 | .cra_priority = 300, | ||
571 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
572 | .cra_blocksize = 1, | ||
573 | .cra_ctxsize = sizeof(struct twofish_ctx), | ||
574 | .cra_alignmask = 0, | ||
575 | .cra_type = &crypto_blkcipher_type, | ||
576 | .cra_module = THIS_MODULE, | ||
577 | .cra_list = LIST_HEAD_INIT(tf_algs[2].cra_list), | ||
578 | .cra_u = { | ||
579 | .blkcipher = { | ||
580 | .min_keysize = TF_MIN_KEY_SIZE, | ||
581 | .max_keysize = TF_MAX_KEY_SIZE, | ||
582 | .ivsize = TF_BLOCK_SIZE, | ||
583 | .setkey = twofish_setkey, | ||
584 | .encrypt = ctr_crypt, | ||
585 | .decrypt = ctr_crypt, | ||
586 | }, | ||
587 | }, | ||
588 | }, { | ||
589 | .cra_name = "lrw(twofish)", | ||
590 | .cra_driver_name = "lrw-twofish-3way", | ||
591 | .cra_priority = 300, | ||
592 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
593 | .cra_blocksize = TF_BLOCK_SIZE, | ||
594 | .cra_ctxsize = sizeof(struct twofish_lrw_ctx), | ||
595 | .cra_alignmask = 0, | ||
596 | .cra_type = &crypto_blkcipher_type, | ||
597 | .cra_module = THIS_MODULE, | ||
598 | .cra_list = LIST_HEAD_INIT(tf_algs[3].cra_list), | ||
599 | .cra_exit = lrw_exit_tfm, | ||
600 | .cra_u = { | ||
601 | .blkcipher = { | ||
602 | .min_keysize = TF_MIN_KEY_SIZE + TF_BLOCK_SIZE, | ||
603 | .max_keysize = TF_MAX_KEY_SIZE + TF_BLOCK_SIZE, | ||
604 | .ivsize = TF_BLOCK_SIZE, | ||
605 | .setkey = lrw_twofish_setkey, | ||
606 | .encrypt = lrw_encrypt, | ||
607 | .decrypt = lrw_decrypt, | ||
608 | }, | ||
609 | }, | ||
610 | }, { | ||
619 | .cra_name = "xts(twofish)", | 611 | .cra_name = "xts(twofish)", |
620 | .cra_driver_name = "xts-twofish-3way", | 612 | .cra_driver_name = "xts-twofish-3way", |
621 | .cra_priority = 300, | 613 | .cra_priority = 300, |
@@ -625,7 +617,7 @@ static struct crypto_alg blk_xts_alg = { | |||
625 | .cra_alignmask = 0, | 617 | .cra_alignmask = 0, |
626 | .cra_type = &crypto_blkcipher_type, | 618 | .cra_type = &crypto_blkcipher_type, |
627 | .cra_module = THIS_MODULE, | 619 | .cra_module = THIS_MODULE, |
628 | .cra_list = LIST_HEAD_INIT(blk_xts_alg.cra_list), | 620 | .cra_list = LIST_HEAD_INIT(tf_algs[4].cra_list), |
629 | .cra_u = { | 621 | .cra_u = { |
630 | .blkcipher = { | 622 | .blkcipher = { |
631 | .min_keysize = TF_MIN_KEY_SIZE * 2, | 623 | .min_keysize = TF_MIN_KEY_SIZE * 2, |
@@ -636,7 +628,7 @@ static struct crypto_alg blk_xts_alg = { | |||
636 | .decrypt = xts_decrypt, | 628 | .decrypt = xts_decrypt, |
637 | }, | 629 | }, |
638 | }, | 630 | }, |
639 | }; | 631 | } }; |
640 | 632 | ||
641 | static bool is_blacklisted_cpu(void) | 633 | static bool is_blacklisted_cpu(void) |
642 | { | 634 | { |
@@ -678,8 +670,6 @@ MODULE_PARM_DESC(force, "Force module load, ignore CPU blacklist"); | |||
678 | 670 | ||
679 | int __init init(void) | 671 | int __init init(void) |
680 | { | 672 | { |
681 | int err; | ||
682 | |||
683 | if (!force && is_blacklisted_cpu()) { | 673 | if (!force && is_blacklisted_cpu()) { |
684 | printk(KERN_INFO | 674 | printk(KERN_INFO |
685 | "twofish-x86_64-3way: performance on this CPU " | 675 | "twofish-x86_64-3way: performance on this CPU " |
@@ -688,43 +678,12 @@ int __init init(void) | |||
688 | return -ENODEV; | 678 | return -ENODEV; |
689 | } | 679 | } |
690 | 680 | ||
691 | err = crypto_register_alg(&blk_ecb_alg); | 681 | return crypto_register_algs(tf_algs, ARRAY_SIZE(tf_algs)); |
692 | if (err) | ||
693 | goto ecb_err; | ||
694 | err = crypto_register_alg(&blk_cbc_alg); | ||
695 | if (err) | ||
696 | goto cbc_err; | ||
697 | err = crypto_register_alg(&blk_ctr_alg); | ||
698 | if (err) | ||
699 | goto ctr_err; | ||
700 | err = crypto_register_alg(&blk_lrw_alg); | ||
701 | if (err) | ||
702 | goto blk_lrw_err; | ||
703 | err = crypto_register_alg(&blk_xts_alg); | ||
704 | if (err) | ||
705 | goto blk_xts_err; | ||
706 | |||
707 | return 0; | ||
708 | |||
709 | blk_xts_err: | ||
710 | crypto_unregister_alg(&blk_lrw_alg); | ||
711 | blk_lrw_err: | ||
712 | crypto_unregister_alg(&blk_ctr_alg); | ||
713 | ctr_err: | ||
714 | crypto_unregister_alg(&blk_cbc_alg); | ||
715 | cbc_err: | ||
716 | crypto_unregister_alg(&blk_ecb_alg); | ||
717 | ecb_err: | ||
718 | return err; | ||
719 | } | 682 | } |
720 | 683 | ||
721 | void __exit fini(void) | 684 | void __exit fini(void) |
722 | { | 685 | { |
723 | crypto_unregister_alg(&blk_xts_alg); | 686 | crypto_unregister_algs(tf_algs, ARRAY_SIZE(tf_algs)); |
724 | crypto_unregister_alg(&blk_lrw_alg); | ||
725 | crypto_unregister_alg(&blk_ctr_alg); | ||
726 | crypto_unregister_alg(&blk_cbc_alg); | ||
727 | crypto_unregister_alg(&blk_ecb_alg); | ||
728 | } | 687 | } |
729 | 688 | ||
730 | module_init(init); | 689 | module_init(init); |