mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
9c1e8836ed
The crypto glue performed function prototype casting via macros to make indirect calls to assembly routines. Instead of performing casts at the call sites (which trips Control Flow Integrity prototype checking), switch each prototype to a common standard set of arguments which allows the removal of the existing macros. In order to keep pointer math unchanged, internal casting between u128 pointers and u8 pointers is added. Co-developed-by: João Moreira <joao.moreira@intel.com> Signed-off-by: João Moreira <joao.moreira@intel.com> Signed-off-by: Kees Cook <keescook@chromium.org> Reviewed-by: Eric Biggers <ebiggers@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
43 lines
1.2 KiB
C
43 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef ASM_X86_SERPENT_AVX_H
|
|
#define ASM_X86_SERPENT_AVX_H
|
|
|
|
#include <crypto/b128ops.h>
|
|
#include <crypto/serpent.h>
|
|
#include <linux/types.h>
|
|
|
|
struct crypto_skcipher;
|
|
|
|
#define SERPENT_PARALLEL_BLOCKS 8
|
|
|
|
struct serpent_xts_ctx {
|
|
struct serpent_ctx tweak_ctx;
|
|
struct serpent_ctx crypt_ctx;
|
|
};
|
|
|
|
asmlinkage void serpent_ecb_enc_8way_avx(const void *ctx, u8 *dst,
|
|
const u8 *src);
|
|
asmlinkage void serpent_ecb_dec_8way_avx(const void *ctx, u8 *dst,
|
|
const u8 *src);
|
|
|
|
asmlinkage void serpent_cbc_dec_8way_avx(const void *ctx, u8 *dst,
|
|
const u8 *src);
|
|
asmlinkage void serpent_ctr_8way_avx(const void *ctx, u8 *dst, const u8 *src,
|
|
le128 *iv);
|
|
|
|
asmlinkage void serpent_xts_enc_8way_avx(const void *ctx, u8 *dst,
|
|
const u8 *src, le128 *iv);
|
|
asmlinkage void serpent_xts_dec_8way_avx(const void *ctx, u8 *dst,
|
|
const u8 *src, le128 *iv);
|
|
|
|
extern void __serpent_crypt_ctr(const void *ctx, u8 *dst, const u8 *src,
|
|
le128 *iv);
|
|
|
|
extern void serpent_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv);
|
|
extern void serpent_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv);
|
|
|
|
extern int xts_serpent_setkey(struct crypto_skcipher *tfm, const u8 *key,
|
|
unsigned int keylen);
|
|
|
|
#endif
|