13387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna#ifndef ASM_X86_SERPENT_AVX_H
23387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna#define ASM_X86_SERPENT_AVX_H
33387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna
43387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna#include <linux/crypto.h>
53387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna#include <crypto/serpent.h>
63387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna
73387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna#define SERPENT_PARALLEL_BLOCKS 8
83387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna
956d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinnastruct serpent_lrw_ctx {
1056d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna	struct lrw_table_ctx lrw_table;
1156d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna	struct serpent_ctx serpent_ctx;
1256d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna};
1356d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna
1456d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinnastruct serpent_xts_ctx {
1556d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna	struct serpent_ctx tweak_ctx;
1656d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna	struct serpent_ctx crypt_ctx;
1756d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna};
1856d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna
19facd416fbc1cdee357730909a414898934f16ae1Jussi Kivilinnaasmlinkage void serpent_ecb_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
20facd416fbc1cdee357730909a414898934f16ae1Jussi Kivilinna					 const u8 *src);
21facd416fbc1cdee357730909a414898934f16ae1Jussi Kivilinnaasmlinkage void serpent_ecb_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
223387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna					 const u8 *src);
233387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna
24facd416fbc1cdee357730909a414898934f16ae1Jussi Kivilinnaasmlinkage void serpent_cbc_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
25facd416fbc1cdee357730909a414898934f16ae1Jussi Kivilinna					 const u8 *src);
26facd416fbc1cdee357730909a414898934f16ae1Jussi Kivilinnaasmlinkage void serpent_ctr_8way_avx(struct serpent_ctx *ctx, u8 *dst,
27facd416fbc1cdee357730909a414898934f16ae1Jussi Kivilinna				     const u8 *src, le128 *iv);
283387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna
29a05248ed2d9a83ae7c3e6db7c4ef9331c3dedc81Jussi Kivilinnaasmlinkage void serpent_xts_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
30a05248ed2d9a83ae7c3e6db7c4ef9331c3dedc81Jussi Kivilinna					 const u8 *src, le128 *iv);
31a05248ed2d9a83ae7c3e6db7c4ef9331c3dedc81Jussi Kivilinnaasmlinkage void serpent_xts_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
32a05248ed2d9a83ae7c3e6db7c4ef9331c3dedc81Jussi Kivilinna					 const u8 *src, le128 *iv);
33a05248ed2d9a83ae7c3e6db7c4ef9331c3dedc81Jussi Kivilinna
3456d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinnaextern void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src,
3556d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna				le128 *iv);
3656d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna
3756d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinnaextern void serpent_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv);
3856d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinnaextern void serpent_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv);
3956d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna
4056d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinnaextern int lrw_serpent_setkey(struct crypto_tfm *tfm, const u8 *key,
4156d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna			      unsigned int keylen);
4256d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna
4356d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinnaextern void lrw_serpent_exit_tfm(struct crypto_tfm *tfm);
4456d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna
4556d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinnaextern int xts_serpent_setkey(struct crypto_tfm *tfm, const u8 *key,
4656d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna			      unsigned int keylen);
4756d76c96a9f3e39ab733c5643b3ce5a1d4be242aJussi Kivilinna
483387e7d69048f5ab02729825f9611754850d9a87Jussi Kivilinna#endif
49