Skip to content

Commit 7c3d66e

Browse files
committed
RISC-V ASM: SHA-3
Add assembly implementations of SHA-3. Use VSRL_VX instead of two VSRL_VI operations as immediate is only 5 bits.
1 parent e562a1c commit 7c3d66e

6 files changed

Lines changed: 950 additions & 12 deletions

File tree

src/include.am

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,9 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha3-asm
286286
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha3-asm.S
287287
endif !BUILD_ARMASM_INLINE
288288
endif BUILD_ARMASM
289+
if BUILD_RISCV_ASM
290+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha3.c
291+
endif BUILD_RISCV_ASM
289292
if !BUILD_X86_ASM
290293
if BUILD_INTELASM
291294
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3_asm.S
@@ -447,6 +450,9 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha3-asm
447450
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha3-asm.S
448451
endif !BUILD_ARMASM_INLINE
449452
endif BUILD_ARMASM
453+
if BUILD_RISCV_ASM
454+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha3.c
455+
endif BUILD_RISCV_ASM
450456
if BUILD_INTELASM
451457
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3_asm.S
452458
endif
@@ -800,6 +806,9 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha3-asm
800806
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha3-asm.S
801807
endif !BUILD_ARMASM_INLINE
802808
endif BUILD_ARMASM
809+
if BUILD_RISCV_ASM
810+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha3.c
811+
endif BUILD_RISCV_ASM
803812
if !BUILD_X86_ASM
804813
if BUILD_INTELASM
805814
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3_asm.S

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,9 @@ static WC_INLINE void poly1305_blocks_riscv64_16(Poly1305* ctx,
252252
#ifdef WOLFSSL_RISCV_VECTOR
253253

254254
#define MUL_RES_REDIS(l, h, t) \
255-
VSRL_VI(t, l, 26) \
256-
VAND_VX(l, l, REG_A6) \
257-
VSRL_VI(t, t, 26) \
255+
VSRL_VX(t, l, REG_A7) \
258256
VSLL_VI(h, h, 12) \
257+
VAND_VX(l, l, REG_A6) \
259258
VOR_VV(h, h, t)
260259

261260
#endif
@@ -273,6 +272,7 @@ void poly1305_blocks_riscv64(Poly1305* ctx, const unsigned char *m,
273272
"li a4, 0xffffffc000000\n\t"
274273
"li a5, 0x3ffffff\n\t"
275274
"li a6, 0xfffffffffffff\n\t"
275+
"li a7, 52\n\t"
276276

277277
/* Load r and r^2 */
278278
"mv t0, %[r2]\n\t"
@@ -430,7 +430,7 @@ void poly1305_blocks_riscv64(Poly1305* ctx, const unsigned char *m,
430430
: [bytes] "+r" (bytes), [m] "+r" (m)
431431
: [r2] "r" (ctx->r2), [h] "r" (ctx->h)
432432
: "memory", "t0", "t1", "t2", "t3", "t4", "t5", "t6",
433-
"s3", "s4", "s5", "a4", "a5", "a6"
433+
"s3", "s4", "s5", "a4", "a5", "a6", "a7"
434434
);
435435
#endif
436436
poly1305_blocks_riscv64_16(ctx, m, bytes, 1);

0 commit comments

Comments
 (0)