aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/crypto
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>2012-02-17 15:48:43 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2012-02-25 04:20:22 -0500
commit53709ddee36cbd19434aa0f0ac8c1e27b92aca33 (patch)
tree59c7543cc150c6849185e74d21976461c530ba28 /arch/x86/crypto
parent35474c3bb712261c285ca20c568e4e508387cad5 (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.c219
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
126static 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
148static unsigned int __cbc_encrypt(struct blkcipher_desc *desc, 126static 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
271static 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
294static inline void u128_to_be128(be128 *dst, const u128 *src) 249static 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
415static 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
438static void encrypt_callback(void *priv, u8 *srcdst, unsigned int nbytes) 370static 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
528static 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
552struct twofish_xts_ctx { 460struct 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
618static struct crypto_alg blk_xts_alg = { 526static 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
641static bool is_blacklisted_cpu(void) 633static bool is_blacklisted_cpu(void)
642{ 634{
@@ -678,8 +670,6 @@ MODULE_PARM_DESC(force, "Force module load, ignore CPU blacklist");
678 670
679int __init init(void) 671int __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
709blk_xts_err:
710 crypto_unregister_alg(&blk_lrw_alg);
711blk_lrw_err:
712 crypto_unregister_alg(&blk_ctr_alg);
713ctr_err:
714 crypto_unregister_alg(&blk_cbc_alg);
715cbc_err:
716 crypto_unregister_alg(&blk_ecb_alg);
717ecb_err:
718 return err;
719} 682}
720 683
721void __exit fini(void) 684void __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
730module_init(init); 689module_init(init);