Skip to content

Commit b12a773

Browse files
authored
Merge pull request #7818 from SparkiDev/riscv-chacha-asm
RISC-V ChaCha20: assembly implementations
2 parents 01afe89 + 423c1d3 commit b12a773

9 files changed

Lines changed: 2465 additions & 53 deletions

File tree

configure.ac

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3077,10 +3077,14 @@ do
30773077
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_CARRYLESS"
30783078
;;
30793079
zkn|zkned)
3080-
# AES encrypt/decrpyt
3080+
# AES encrypt/decrpyt, SHA-2
30813081
ENABLED_RISCV_ASM=yes
30823082
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_SCALAR_CRYPTO_ASM"
30833083
;;
3084+
zv)
3085+
ENABLED_RISCV_ASM=yes
3086+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR"
3087+
;;
30843088
zvkg)
30853089
# VGMUL, VHHSH
30863090
ENABLED_RISCV_ASM=yes
@@ -3097,12 +3101,12 @@ do
30973101
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR_BASE_BIT_MANIPULATION"
30983102
;;
30993103
zvkned)
3100-
# Vector AES
3104+
# Vector AES, SHA-2
31013105
ENABLED_RISCV_ASM=yes
31023106
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR_CRYPTO_ASM"
31033107
;;
31043108
*)
3105-
AC_MSG_ERROR([Invalid RISC-V option [yes,zbkb,zbb,zbc,zbkc,zkn,zkned,zvkg,zvbc,zvbb,zvkb,zvkned]: $ENABLED_RISCV_ASM.])
3109+
AC_MSG_ERROR([Invalid RISC-V option [yes,zbkb,zbb,zbc,zbkc,zkn,zkned,zv,zvkg,zvbc,zvbb,zvkb,zvkned]: $ENABLED_RISCV_ASM.])
31063110
break
31073111
;;
31083112
esac

src/include.am

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -971,17 +971,21 @@ if BUILD_CHACHA
971971
if BUILD_ARMASM_NEON
972972
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-chacha.c
973973
else
974+
if BUILD_RISCV_ASM
975+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-chacha.c
976+
else
974977
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha.c
978+
endif !BUILD_RISCV_ASM
975979
if !BUILD_X86_ASM
976980
if BUILD_INTELASM
977981
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha_asm.S
978-
endif
979-
endif
980-
endif
982+
endif BUILD_INTELASM
983+
endif !BUILD_X86_ASM
984+
endif !BUILD_ARMASM_NEON
981985
if BUILD_POLY1305
982986
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha20_poly1305.c
983-
endif
984-
endif
987+
endif BUILD_POLY1305
988+
endif BUILD_CHACHA
985989

986990
if !BUILD_INLINE
987991
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/misc.c

wolfcrypt/src/chacha.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ Public domain.
3838
#if defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_ARMASM_NO_NEON)
3939
/* implementation is located in wolfcrypt/src/port/arm/armv8-chacha.c */
4040

41+
#elif defined(WOLFSSL_RISCV_ASM)
42+
/* implementation located in wolfcrypt/src/port/rsicv/riscv-64-chacha.c */
43+
4144
#else
4245
#if defined(HAVE_CHACHA)
4346

wolfcrypt/src/port/riscv/riscv-64-aes.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,6 @@ static WC_INLINE void memcpy16(byte* out, const byte* in)
7575
#endif
7676

7777

78-
/* vd = vs2 << uimm */
79-
#define VSLL_VI(vd, vs2, uimm) \
80-
ASM_WORD((0b100101 << 26) | (0b1 << 25) | \
81-
(0b011 << 12) | (0b1010111 << 0) | \
82-
(vd << 7) | (uimm << 15) | (vs2 << 20))
83-
/* vd = vs2 >> uimm */
84-
#define VSRL_VI(vd, vs2, uimm) \
85-
ASM_WORD((0b101000 << 26) | (0b1 << 25) | \
86-
(0b011 << 12) | (0b1010111 << 0) | \
87-
(vd << 7) | (uimm << 15) | (vs2 << 20))
88-
89-
9078
/* Vector register set if equal: vd[i] = vs1[i] == vs2[i] ? 1 : 0 */
9179
#define VMSEQ_VV(vd, vs1, vs2) \
9280
ASM_WORD((0b011000 << 26) | (0b1 << 25) | \

0 commit comments

Comments
 (0)