RE: [PATCH 2/3] crypto: aria-avx: add AES-NI/AVX/x86_64 assembler implementation of aria cipher

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Taehee Yoo <ap420073@xxxxxxxxx>
> Sent: Wednesday, August 24, 2022 10:59 AM
> Subject: [PATCH 2/3] crypto: aria-avx: add AES-NI/AVX/x86_64 assembler
> implementation of aria cipher
> 
...

> +#include "ecb_cbc_helpers.h"
> +
> +asmlinkage void aria_aesni_avx_crypt_16way(const u32 *rk, u8 *dst,
> +					  const u8 *src, int rounds);
> +
> +static int ecb_do_encrypt(struct skcipher_request *req, const u32 *rkey)
> +{
> +	struct aria_ctx *ctx =
> crypto_skcipher_ctx(crypto_skcipher_reqtfm(req));
> +	struct skcipher_walk walk;
> +	unsigned int nbytes;
> +	int err;
> +
> +	err = skcipher_walk_virt(&walk, req, false);
> +
> +	while ((nbytes = walk.nbytes) > 0) {
> +		const u8 *src = walk.src.virt.addr;
> +		u8 *dst = walk.dst.virt.addr;
> +
> +		kernel_fpu_begin();
> +		while (nbytes >= ARIA_AVX_BLOCK_SIZE) {
> +			aria_aesni_avx_crypt_16way(rkey, dst, src, ctx->rounds);
> +			dst += ARIA_AVX_BLOCK_SIZE;
> +			src += ARIA_AVX_BLOCK_SIZE;
> +			nbytes -= ARIA_AVX_BLOCK_SIZE;
> +		}
> +		while (nbytes >= ARIA_BLOCK_SIZE) {
> +			aria_encrypt(ctx, dst, src);
> +			dst += ARIA_BLOCK_SIZE;
> +			src += ARIA_BLOCK_SIZE;
> +			nbytes -= ARIA_BLOCK_SIZE;
> +		}
> +		kernel_fpu_end();

Is aria_encrypt() an FPU function that belongs between kernel_fpu_begin()
and kernel_fpu_end()?

Several drivers (camellia, serpent, twofish, cast5, cast6) use ECB_WALK_START,
ECB_BLOCK, and ECB_WALK_END macros for these loops. Those macros do only call
kernel_fpu_end() at the very end. That requires the functions to be structured
with (ctx, dst, src) arguments, not (rkey, dst, src, rounds).






[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]
  Powered by Linux