 99f42f937a
			
		
	
	
	99f42f937a
	
	
	
		
			
			This reverts commit cf1521a1a5.
Instruction (vpgatherdd) that this implementation relied on turned out to be
slow performer on real hardware (i5-4570). The previous 8-way twofish/AVX
implementation is therefore faster and this implementation should be removed.
Converting this implementation to use the same method as in twofish/AVX for
table look-ups would give additional ~3% speed up vs twofish/AVX, but would
hardly be worth of the added code and binary size.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
		
	
			
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef ASM_X86_TWOFISH_H
 | |
| #define ASM_X86_TWOFISH_H
 | |
| 
 | |
| #include <linux/crypto.h>
 | |
| #include <crypto/twofish.h>
 | |
| #include <crypto/lrw.h>
 | |
| #include <crypto/b128ops.h>
 | |
| 
 | |
| struct twofish_lrw_ctx {
 | |
| 	struct lrw_table_ctx lrw_table;
 | |
| 	struct twofish_ctx twofish_ctx;
 | |
| };
 | |
| 
 | |
| struct twofish_xts_ctx {
 | |
| 	struct twofish_ctx tweak_ctx;
 | |
| 	struct twofish_ctx crypt_ctx;
 | |
| };
 | |
| 
 | |
| /* regular block cipher functions from twofish_x86_64 module */
 | |
| asmlinkage void twofish_enc_blk(struct twofish_ctx *ctx, u8 *dst,
 | |
| 				const u8 *src);
 | |
| asmlinkage void twofish_dec_blk(struct twofish_ctx *ctx, u8 *dst,
 | |
| 				const u8 *src);
 | |
| 
 | |
| /* 3-way parallel cipher functions */
 | |
| asmlinkage void __twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst,
 | |
| 				       const u8 *src, bool xor);
 | |
| asmlinkage void twofish_dec_blk_3way(struct twofish_ctx *ctx, u8 *dst,
 | |
| 				     const u8 *src);
 | |
| 
 | |
| /* helpers from twofish_x86_64-3way module */
 | |
| extern void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src);
 | |
| extern void twofish_enc_blk_ctr(void *ctx, u128 *dst, const u128 *src,
 | |
| 				le128 *iv);
 | |
| extern void twofish_enc_blk_ctr_3way(void *ctx, u128 *dst, const u128 *src,
 | |
| 				     le128 *iv);
 | |
| 
 | |
| extern int lrw_twofish_setkey(struct crypto_tfm *tfm, const u8 *key,
 | |
| 			      unsigned int keylen);
 | |
| 
 | |
| extern void lrw_twofish_exit_tfm(struct crypto_tfm *tfm);
 | |
| 
 | |
| extern int xts_twofish_setkey(struct crypto_tfm *tfm, const u8 *key,
 | |
| 			      unsigned int keylen);
 | |
| 
 | |
| #endif /* ASM_X86_TWOFISH_H */
 |