mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
lib/crypto: riscv/poly1305: Import OpenSSL/CRYPTOGAMS implementation
This is a straight import of the OpenSSL/CRYPTOGAMS Poly1305 implementation for riscv authored by Andy Polyakov. The file 'poly1305-riscv.pl' is taken straight from https://github.com/dot-asm/cryptogams commit 5e3fba73576244708a752fa61a8e93e587f271bb. This patch was tested on SpacemiT X60, with 2~2.5x improvement over generic implementation. Signed-off-by: Chunyan Zhang <zhangchunyan@iscas.ac.cn> Signed-off-by: Zhihang Shao <zhihang.shao.iscas@gmail.com> [EB: ported to lib/crypto/riscv/] Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20250829152513.92459-4-ebiggers@kernel.org Signed-off-by: Eric Biggers <ebiggers@kernel.org>
This commit is contained in:
committed by
Eric Biggers
parent
b646b782e5
commit
bef9c75598
+2
-1
@@ -128,6 +128,7 @@ config CRYPTO_LIB_POLY1305_ARCH
|
||||
default y if MIPS
|
||||
# The PPC64 code needs to be fixed to work in softirq context.
|
||||
default y if PPC64 && CPU_LITTLE_ENDIAN && VSX && BROKEN
|
||||
default y if RISCV
|
||||
default y if X86_64
|
||||
|
||||
# This symbol controls the inclusion of the Poly1305 generic code. This differs
|
||||
@@ -143,7 +144,7 @@ config CRYPTO_LIB_POLY1305_GENERIC
|
||||
|
||||
config CRYPTO_LIB_POLY1305_RSIZE
|
||||
int
|
||||
default 2 if MIPS
|
||||
default 2 if MIPS || RISCV
|
||||
default 11 if X86_64
|
||||
default 9 if ARM || ARM64
|
||||
default 1
|
||||
|
||||
@@ -112,6 +112,19 @@ endif
|
||||
|
||||
libpoly1305-$(CONFIG_PPC) += powerpc/poly1305-p10le_64.o
|
||||
|
||||
ifeq ($(CONFIG_RISCV),y)
|
||||
libpoly1305-y += riscv/poly1305-core.o
|
||||
poly1305-perlasm-flavour-$(CONFIG_32BIT) := 32
|
||||
poly1305-perlasm-flavour-$(CONFIG_64BIT) := 64
|
||||
quiet_cmd_perlasm_poly1305 = PERLASM $@
|
||||
cmd_perlasm_poly1305 = $(PERL) $< $(poly1305-perlasm-flavour-y) $@
|
||||
# Use if_changed instead of cmd, in case the flavour changed.
|
||||
$(obj)/riscv/poly1305-core.S: $(src)/riscv/poly1305-riscv.pl FORCE
|
||||
$(call if_changed,perlasm_poly1305)
|
||||
targets += riscv/poly1305-core.S
|
||||
AFLAGS_riscv/poly1305-core.o += -Dpoly1305_init=poly1305_block_init
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_X86),y)
|
||||
libpoly1305-y += x86/poly1305-x86_64-cryptogams.o
|
||||
$(obj)/x86/poly1305-x86_64-cryptogams.S: $(src)/x86/poly1305-x86_64-cryptogams.pl
|
||||
@@ -124,6 +137,7 @@ endif # CONFIG_CRYPTO_LIB_POLY1305_ARCH
|
||||
clean-files += arm/poly1305-core.S \
|
||||
arm64/poly1305-core.S \
|
||||
mips/poly1305-core.S \
|
||||
riscv/poly1305-core.S \
|
||||
x86/poly1305-x86_64-cryptogams.S
|
||||
|
||||
################################################################################
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* OpenSSL/Cryptogams accelerated Poly1305 transform for riscv
|
||||
*
|
||||
* Copyright (C) 2025 Institute of Software, CAS.
|
||||
*/
|
||||
|
||||
asmlinkage void poly1305_block_init(struct poly1305_block_state *state,
|
||||
const u8 raw_key[POLY1305_BLOCK_SIZE]);
|
||||
asmlinkage void poly1305_blocks(struct poly1305_block_state *state,
|
||||
const u8 *src, u32 len, u32 hibit);
|
||||
asmlinkage void poly1305_emit(const struct poly1305_state *state,
|
||||
u8 digest[POLY1305_DIGEST_SIZE],
|
||||
const u32 nonce[4]);
|
||||
Reference in New Issue
Block a user