diff options
author | Jussi Kivilinna <jussi.kivilinna@mbnet.fi> | 2012-06-18 07:07:03 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2012-06-27 02:42:01 -0400 |
commit | 30a04008827b58c4aafbd1d6a27d6b6ed239e993 (patch) | |
tree | 7c1cb4ead62efb278c0d0154f5fcc08c8ace90bb /arch | |
parent | ffaf9156320a077ebf9c5b9a5cf987689dc1a6b3 (diff) |
crypto: twofish-avx - change to use shared ablk_* functions
Remove duplicate ablk_* functions and make use of ablk_helper module instead.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/crypto/twofish_avx_glue.c | 116 |
1 files changed, 6 insertions, 110 deletions
diff --git a/arch/x86/crypto/twofish_avx_glue.c b/arch/x86/crypto/twofish_avx_glue.c index 599f19e4bef6..cabe058eba14 100644 --- a/arch/x86/crypto/twofish_avx_glue.c +++ b/arch/x86/crypto/twofish_avx_glue.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <asm/i387.h> | 39 | #include <asm/i387.h> |
40 | #include <asm/xcr.h> | 40 | #include <asm/xcr.h> |
41 | #include <asm/xsave.h> | 41 | #include <asm/xsave.h> |
42 | #include <asm/crypto/ablk_helper.h> | ||
42 | #include <crypto/scatterwalk.h> | 43 | #include <crypto/scatterwalk.h> |
43 | #include <linux/workqueue.h> | 44 | #include <linux/workqueue.h> |
44 | #include <linux/spinlock.h> | 45 | #include <linux/spinlock.h> |
@@ -95,11 +96,6 @@ static inline void twofish_dec_blk_xway(struct twofish_ctx *ctx, u8 *dst, | |||
95 | } | 96 | } |
96 | 97 | ||
97 | 98 | ||
98 | |||
99 | struct async_twofish_ctx { | ||
100 | struct cryptd_ablkcipher *cryptd_tfm; | ||
101 | }; | ||
102 | |||
103 | static inline bool twofish_fpu_begin(bool fpu_enabled, unsigned int nbytes) | 99 | static inline bool twofish_fpu_begin(bool fpu_enabled, unsigned int nbytes) |
104 | { | 100 | { |
105 | if (fpu_enabled) | 101 | if (fpu_enabled) |
@@ -730,106 +726,6 @@ static int xts_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst, | |||
730 | return ret; | 726 | return ret; |
731 | } | 727 | } |
732 | 728 | ||
733 | static int ablk_set_key(struct crypto_ablkcipher *tfm, const u8 *key, | ||
734 | unsigned int key_len) | ||
735 | { | ||
736 | struct async_twofish_ctx *ctx = crypto_ablkcipher_ctx(tfm); | ||
737 | struct crypto_ablkcipher *child = &ctx->cryptd_tfm->base; | ||
738 | int err; | ||
739 | |||
740 | crypto_ablkcipher_clear_flags(child, CRYPTO_TFM_REQ_MASK); | ||
741 | crypto_ablkcipher_set_flags(child, crypto_ablkcipher_get_flags(tfm) | ||
742 | & CRYPTO_TFM_REQ_MASK); | ||
743 | err = crypto_ablkcipher_setkey(child, key, key_len); | ||
744 | crypto_ablkcipher_set_flags(tfm, crypto_ablkcipher_get_flags(child) | ||
745 | & CRYPTO_TFM_RES_MASK); | ||
746 | return err; | ||
747 | } | ||
748 | |||
749 | static int __ablk_encrypt(struct ablkcipher_request *req) | ||
750 | { | ||
751 | struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); | ||
752 | struct async_twofish_ctx *ctx = crypto_ablkcipher_ctx(tfm); | ||
753 | struct blkcipher_desc desc; | ||
754 | |||
755 | desc.tfm = cryptd_ablkcipher_child(ctx->cryptd_tfm); | ||
756 | desc.info = req->info; | ||
757 | desc.flags = 0; | ||
758 | |||
759 | return crypto_blkcipher_crt(desc.tfm)->encrypt( | ||
760 | &desc, req->dst, req->src, req->nbytes); | ||
761 | } | ||
762 | |||
763 | static int ablk_encrypt(struct ablkcipher_request *req) | ||
764 | { | ||
765 | struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); | ||
766 | struct async_twofish_ctx *ctx = crypto_ablkcipher_ctx(tfm); | ||
767 | |||
768 | if (!irq_fpu_usable()) { | ||
769 | struct ablkcipher_request *cryptd_req = | ||
770 | ablkcipher_request_ctx(req); | ||
771 | |||
772 | memcpy(cryptd_req, req, sizeof(*req)); | ||
773 | ablkcipher_request_set_tfm(cryptd_req, &ctx->cryptd_tfm->base); | ||
774 | |||
775 | return crypto_ablkcipher_encrypt(cryptd_req); | ||
776 | } else { | ||
777 | return __ablk_encrypt(req); | ||
778 | } | ||
779 | } | ||
780 | |||
781 | static int ablk_decrypt(struct ablkcipher_request *req) | ||
782 | { | ||
783 | struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); | ||
784 | struct async_twofish_ctx *ctx = crypto_ablkcipher_ctx(tfm); | ||
785 | |||
786 | if (!irq_fpu_usable()) { | ||
787 | struct ablkcipher_request *cryptd_req = | ||
788 | ablkcipher_request_ctx(req); | ||
789 | |||
790 | memcpy(cryptd_req, req, sizeof(*req)); | ||
791 | ablkcipher_request_set_tfm(cryptd_req, &ctx->cryptd_tfm->base); | ||
792 | |||
793 | return crypto_ablkcipher_decrypt(cryptd_req); | ||
794 | } else { | ||
795 | struct blkcipher_desc desc; | ||
796 | |||
797 | desc.tfm = cryptd_ablkcipher_child(ctx->cryptd_tfm); | ||
798 | desc.info = req->info; | ||
799 | desc.flags = 0; | ||
800 | |||
801 | return crypto_blkcipher_crt(desc.tfm)->decrypt( | ||
802 | &desc, req->dst, req->src, req->nbytes); | ||
803 | } | ||
804 | } | ||
805 | |||
806 | static void ablk_exit(struct crypto_tfm *tfm) | ||
807 | { | ||
808 | struct async_twofish_ctx *ctx = crypto_tfm_ctx(tfm); | ||
809 | |||
810 | cryptd_free_ablkcipher(ctx->cryptd_tfm); | ||
811 | } | ||
812 | |||
813 | static int ablk_init(struct crypto_tfm *tfm) | ||
814 | { | ||
815 | struct async_twofish_ctx *ctx = crypto_tfm_ctx(tfm); | ||
816 | struct cryptd_ablkcipher *cryptd_tfm; | ||
817 | char drv_name[CRYPTO_MAX_ALG_NAME]; | ||
818 | |||
819 | snprintf(drv_name, sizeof(drv_name), "__driver-%s", | ||
820 | crypto_tfm_alg_driver_name(tfm)); | ||
821 | |||
822 | cryptd_tfm = cryptd_alloc_ablkcipher(drv_name, 0, 0); | ||
823 | if (IS_ERR(cryptd_tfm)) | ||
824 | return PTR_ERR(cryptd_tfm); | ||
825 | |||
826 | ctx->cryptd_tfm = cryptd_tfm; | ||
827 | tfm->crt_ablkcipher.reqsize = sizeof(struct ablkcipher_request) + | ||
828 | crypto_ablkcipher_reqsize(&cryptd_tfm->base); | ||
829 | |||
830 | return 0; | ||
831 | } | ||
832 | |||
833 | static struct crypto_alg twofish_algs[10] = { { | 729 | static struct crypto_alg twofish_algs[10] = { { |
834 | .cra_name = "__ecb-twofish-avx", | 730 | .cra_name = "__ecb-twofish-avx", |
835 | .cra_driver_name = "__driver-ecb-twofish-avx", | 731 | .cra_driver_name = "__driver-ecb-twofish-avx", |
@@ -942,7 +838,7 @@ static struct crypto_alg twofish_algs[10] = { { | |||
942 | .cra_priority = 400, | 838 | .cra_priority = 400, |
943 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, | 839 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, |
944 | .cra_blocksize = TF_BLOCK_SIZE, | 840 | .cra_blocksize = TF_BLOCK_SIZE, |
945 | .cra_ctxsize = sizeof(struct async_twofish_ctx), | 841 | .cra_ctxsize = sizeof(struct async_helper_ctx), |
946 | .cra_alignmask = 0, | 842 | .cra_alignmask = 0, |
947 | .cra_type = &crypto_ablkcipher_type, | 843 | .cra_type = &crypto_ablkcipher_type, |
948 | .cra_module = THIS_MODULE, | 844 | .cra_module = THIS_MODULE, |
@@ -964,7 +860,7 @@ static struct crypto_alg twofish_algs[10] = { { | |||
964 | .cra_priority = 400, | 860 | .cra_priority = 400, |
965 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, | 861 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, |
966 | .cra_blocksize = TF_BLOCK_SIZE, | 862 | .cra_blocksize = TF_BLOCK_SIZE, |
967 | .cra_ctxsize = sizeof(struct async_twofish_ctx), | 863 | .cra_ctxsize = sizeof(struct async_helper_ctx), |
968 | .cra_alignmask = 0, | 864 | .cra_alignmask = 0, |
969 | .cra_type = &crypto_ablkcipher_type, | 865 | .cra_type = &crypto_ablkcipher_type, |
970 | .cra_module = THIS_MODULE, | 866 | .cra_module = THIS_MODULE, |
@@ -987,7 +883,7 @@ static struct crypto_alg twofish_algs[10] = { { | |||
987 | .cra_priority = 400, | 883 | .cra_priority = 400, |
988 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, | 884 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, |
989 | .cra_blocksize = 1, | 885 | .cra_blocksize = 1, |
990 | .cra_ctxsize = sizeof(struct async_twofish_ctx), | 886 | .cra_ctxsize = sizeof(struct async_helper_ctx), |
991 | .cra_alignmask = 0, | 887 | .cra_alignmask = 0, |
992 | .cra_type = &crypto_ablkcipher_type, | 888 | .cra_type = &crypto_ablkcipher_type, |
993 | .cra_module = THIS_MODULE, | 889 | .cra_module = THIS_MODULE, |
@@ -1011,7 +907,7 @@ static struct crypto_alg twofish_algs[10] = { { | |||
1011 | .cra_priority = 400, | 907 | .cra_priority = 400, |
1012 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, | 908 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, |
1013 | .cra_blocksize = TF_BLOCK_SIZE, | 909 | .cra_blocksize = TF_BLOCK_SIZE, |
1014 | .cra_ctxsize = sizeof(struct async_twofish_ctx), | 910 | .cra_ctxsize = sizeof(struct async_helper_ctx), |
1015 | .cra_alignmask = 0, | 911 | .cra_alignmask = 0, |
1016 | .cra_type = &crypto_ablkcipher_type, | 912 | .cra_type = &crypto_ablkcipher_type, |
1017 | .cra_module = THIS_MODULE, | 913 | .cra_module = THIS_MODULE, |
@@ -1036,7 +932,7 @@ static struct crypto_alg twofish_algs[10] = { { | |||
1036 | .cra_priority = 400, | 932 | .cra_priority = 400, |
1037 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, | 933 | .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC, |
1038 | .cra_blocksize = TF_BLOCK_SIZE, | 934 | .cra_blocksize = TF_BLOCK_SIZE, |
1039 | .cra_ctxsize = sizeof(struct async_twofish_ctx), | 935 | .cra_ctxsize = sizeof(struct async_helper_ctx), |
1040 | .cra_alignmask = 0, | 936 | .cra_alignmask = 0, |
1041 | .cra_type = &crypto_ablkcipher_type, | 937 | .cra_type = &crypto_ablkcipher_type, |
1042 | .cra_module = THIS_MODULE, | 938 | .cra_module = THIS_MODULE, |