From b839db60fe050201d412f717a7c1e55ad3e01040 Mon Sep 17 00:00:00 2001 From: Julian Zhu Date: Wed, 23 Jul 2025 12:56:39 +0800 Subject: [PATCH 1/5] fips: enable aes self tests only on x86 and aarch64 Since AES has no base aliases available for noarch, `aes_self_tests` will cause a link failure on non-x86 and non-aarch64 platforms. Signed-off-by: Julian Zhu --- fips/Makefile.am | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fips/Makefile.am b/fips/Makefile.am index ee5e2784..685a6bdb 100644 --- a/fips/Makefile.am +++ b/fips/Makefile.am @@ -30,9 +30,8 @@ src_include += -I $(srcdir)/fips extern_hdrs += include/isal_crypto_api.h include/aes_xts.h include/aes_keyexp.h include/sha1_mb.h include/sha256_mb.h -lsrc_x86_64 += fips/self_tests.c -lsrc_aarch64 += fips/self_tests_generic.c -lsrc += fips/aes_self_tests.c +lsrc_x86_64 += fips/self_tests.c fips/aes_self_tests.c +lsrc_aarch64 += fips/self_tests_generic.c fips/aes_self_tests.c lsrc += fips/sha_self_tests.c lsrc_x86_64 += fips/asm_self_tests.asm From 3b06f12a65819ffa540a0b8d7fd065bcd22b38e9 Mon Sep 17 00:00:00 2001 From: Julian Zhu Date: Wed, 23 Jul 2025 13:13:59 +0800 Subject: [PATCH 2/5] build: add riscv64 support Use the base alias implementations for most function. Signed-off-by: Julian Zhu --- Makefile.am | 11 +++++++++++ configure.ac | 2 ++ fips/Makefile.am | 1 + md5_mb/Makefile.am | 3 +++ mh_sha1/Makefile.am | 4 ++++ mh_sha1_murmur3_x64_128/Makefile.am | 6 ++++++ mh_sha256/Makefile.am | 7 +++++++ rolling_hash/Makefile.am | 4 ++++ sha1_mb/Makefile.am | 4 +++- sha256_mb/Makefile.am | 3 +++ sha512_mb/Makefile.am | 3 +++ sm3_mb/Makefile.am | 2 ++ 12 files changed, 49 insertions(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index c3ce3160..005d1486 100644 --- a/Makefile.am +++ b/Makefile.am @@ -27,6 +27,7 @@ lsrc32= lsrc_x86_64= lsrc_x86_32= lsrc_aarch64= +lsrc_riscv64= lsrc_base_aliases= unit_tests32= perf_tests32= @@ -73,6 +74,10 @@ if CPU_AARCH64 libisal_crypto_la_SOURCES += ${lsrc_aarch64} endif +if CPU_RISCV64 +libisal_crypto_la_SOURCES += ${lsrc_riscv64} +endif + if CPU_UNDEFINED libisal_crypto_la_SOURCES += ${lsrc_base_aliases} endif @@ -117,6 +122,9 @@ endif if CPU_AARCH64 as_filter = $(CC) -D__ASSEMBLY__ endif +if CPU_RISCV64 + as_filter = $(CC) -D__ASSEMBLY__ +endif CCAS = $(as_filter) EXTRA_DIST += tools/nasm-filter.sh EXTRA_DIST += tools/nasm-cet-filter.sh @@ -127,6 +135,9 @@ AM_CCASFLAGS = ${asm_args} ${INCLUDE} $(src_include) ${D} else AM_CCASFLAGS = ${asm_args} ${INCLUDE} $(src_include) ${DEFS} ${D} endif +if CPU_RISCV64 +AM_CCASFLAGS = ${asm_args} ${INCLUDE} $(src_include) ${D} +endif .asm.s: @echo " MKTMP " $@; diff --git a/configure.ac b/configure.ac index 79f367cb..4929fad6 100644 --- a/configure.ac +++ b/configure.ac @@ -29,10 +29,12 @@ AS_CASE([$host_cpu], [i?86], [CPU="x86_32"], [aarch64], [CPU="aarch64"], [arm64], [CPU="aarch64"], + [riscv64], [CPU="riscv64"], ) AM_CONDITIONAL([CPU_X86_64], [test "$CPU" = "x86_64"]) AM_CONDITIONAL([CPU_X86_32], [test "$CPU" = "x86_32"]) AM_CONDITIONAL([CPU_AARCH64], [test "$CPU" = "aarch64"]) +AM_CONDITIONAL([CPU_RISCV64], [test "$CPU" = "riscv64"]) AM_CONDITIONAL([CPU_UNDEFINED], [test "x$CPU" = "x"]) AM_CONDITIONAL([SAFE_PARAM], [test x"$SAFE_PARAM" = x"yes"]) diff --git a/fips/Makefile.am b/fips/Makefile.am index 685a6bdb..aa1b12bc 100644 --- a/fips/Makefile.am +++ b/fips/Makefile.am @@ -32,6 +32,7 @@ extern_hdrs += include/isal_crypto_api.h include/aes_xts.h include/aes_keyex lsrc_x86_64 += fips/self_tests.c fips/aes_self_tests.c lsrc_aarch64 += fips/self_tests_generic.c fips/aes_self_tests.c +lsrc_riscv64 += fips/self_tests_generic.c lsrc += fips/sha_self_tests.c lsrc_x86_64 += fips/asm_self_tests.asm diff --git a/md5_mb/Makefile.am b/md5_mb/Makefile.am index c516a575..38618b43 100644 --- a/md5_mb/Makefile.am +++ b/md5_mb/Makefile.am @@ -69,6 +69,9 @@ lsrc_aarch64 += md5_mb/md5_ctx_base.c \ md5_mb/aarch64/md5_mb_sve.S \ md5_mb/aarch64/md5_mb_multibinary.S +lsrc_riscv64 += md5_mb/md5_ctx_base.c \ + md5_mb/md5_ctx_base_aliases.c + lsrc_base_aliases += md5_mb/md5_ctx_base.c \ md5_mb/md5_ctx_base_aliases.c diff --git a/mh_sha1/Makefile.am b/mh_sha1/Makefile.am index 42a32139..eeded3ed 100644 --- a/mh_sha1/Makefile.am +++ b/mh_sha1/Makefile.am @@ -57,6 +57,10 @@ lsrc_aarch64 += \ mh_sha1/aarch64/mh_sha1_block_ce.S \ mh_sha1/aarch64/mh_sha1_ce.c +lsrc_riscv64 += \ + $(lsrc_mh_sha1_base) \ + mh_sha1/mh_sha1_base_aliases.c + lsrc_base_aliases += \ $(lsrc_mh_sha1_base) \ mh_sha1/mh_sha1_base_aliases.c diff --git a/mh_sha1_murmur3_x64_128/Makefile.am b/mh_sha1_murmur3_x64_128/Makefile.am index a6418ae7..f7af4d2c 100644 --- a/mh_sha1_murmur3_x64_128/Makefile.am +++ b/mh_sha1_murmur3_x64_128/Makefile.am @@ -56,6 +56,12 @@ lsrc_aarch64 += $(lsrc_murmur) \ mh_sha1_murmur3_x64_128/aarch64/mh_sha1_murmur3_block_asimd.S \ mh_sha1_murmur3_x64_128/aarch64/mh_sha1_murmur3_multibinary.S +lsrc_riscv64 += $(lsrc_murmur) \ + mh_sha1_murmur3_x64_128/mh_sha1_murmur3_x64_128.c \ + mh_sha1_murmur3_x64_128/mh_sha1_murmur3_x64_128_finalize_base.c \ + mh_sha1_murmur3_x64_128/mh_sha1_murmur3_x64_128_update_base.c \ + mh_sha1_murmur3_x64_128/mh_sha1_murmur3_x64_128_base_aliases.c + lsrc_base_aliases += $(lsrc_murmur) \ mh_sha1_murmur3_x64_128/mh_sha1_murmur3_x64_128.c \ mh_sha1_murmur3_x64_128/mh_sha1_murmur3_x64_128_finalize_base.c \ diff --git a/mh_sha256/Makefile.am b/mh_sha256/Makefile.am index b5f7cf65..615a505b 100644 --- a/mh_sha256/Makefile.am +++ b/mh_sha256/Makefile.am @@ -62,6 +62,13 @@ lsrc_aarch64 += $(lsrc_sha256) \ mh_sha256/mh_sha256_update_base.c \ mh_sha256/mh_sha256_block_base.c +lsrc_riscv64 += $(lsrc_sha256) \ + mh_sha256/mh_sha256_base_aliases.c \ + mh_sha256/mh_sha256.c \ + mh_sha256/mh_sha256_finalize_base.c \ + mh_sha256/mh_sha256_update_base.c \ + mh_sha256/mh_sha256_block_base.c + lsrc_base_aliases += $(lsrc_sha256) \ mh_sha256/mh_sha256_base_aliases.c \ mh_sha256/mh_sha256.c \ diff --git a/rolling_hash/Makefile.am b/rolling_hash/Makefile.am index 0f69790f..16a8d603 100644 --- a/rolling_hash/Makefile.am +++ b/rolling_hash/Makefile.am @@ -46,6 +46,10 @@ lsrc_aarch64 += rolling_hash/rolling_hashx_base.c \ rolling_hash/aarch64/rolling_hash2_aarch64_dispatcher.c \ rolling_hash/aarch64/rolling_hash2_run_until_unroll.S +lsrc_riscv64 += rolling_hash/rolling_hashx_base.c \ + rolling_hash/rolling_hash2.c \ + rolling_hash/rolling_hash2_base_aliases.c + src_include += -I $(srcdir)/rolling_hash extern_hdrs += include/rolling_hashx.h diff --git a/sha1_mb/Makefile.am b/sha1_mb/Makefile.am index 545e0f9f..220afabc 100644 --- a/sha1_mb/Makefile.am +++ b/sha1_mb/Makefile.am @@ -79,7 +79,9 @@ lsrc_aarch64 += sha1_mb/sha1_ctx_base.c \ sha1_mb/aarch64/sha1_mb_mgr_asimd.c \ sha1_mb/aarch64/sha1_mb_aarch64_dispatcher.c - +lsrc_riscv64 += sha1_mb/sha1_ctx_base_aliases.c \ + sha1_mb/sha1_ctx_base.c \ + sha1_mb/sha1_ref.c lsrc_base_aliases += sha1_mb/sha1_ctx_base_aliases.c \ sha1_mb/sha1_ctx_base.c \ diff --git a/sha256_mb/Makefile.am b/sha256_mb/Makefile.am index 9a796454..57879fa8 100644 --- a/sha256_mb/Makefile.am +++ b/sha256_mb/Makefile.am @@ -79,6 +79,9 @@ lsrc_aarch64 += sha256_mb/aarch64/sha256_mb_multibinary.S \ sha256_mb/aarch64/sha256_mb_x3_ce.S \ sha256_mb/aarch64/sha256_mb_x4_ce.S +lsrc_riscv64 += sha256_mb/sha256_ctx_base_aliases.c \ + sha256_mb/sha256_ctx_base.c \ + sha256_mb/sha256_ref.c lsrc_base_aliases += sha256_mb/sha256_ctx_base_aliases.c \ sha256_mb/sha256_ctx_base.c \ diff --git a/sha512_mb/Makefile.am b/sha512_mb/Makefile.am index de85bd55..6df24424 100644 --- a/sha512_mb/Makefile.am +++ b/sha512_mb/Makefile.am @@ -74,6 +74,9 @@ lsrc_aarch64 += sha512_mb/sha512_ctx_base.c \ sha512_mb/aarch64/sha512_mb_x1_ce.S \ sha512_mb/aarch64/sha512_mb_x2_ce.S +lsrc_riscv64 += sha512_mb/sha512_ctx_base.c \ + sha512_mb/sha512_ctx_base_aliases.c + lsrc_base_aliases += sha512_mb/sha512_ctx_base.c \ sha512_mb/sha512_ctx_base_aliases.c diff --git a/sm3_mb/Makefile.am b/sm3_mb/Makefile.am index b83a58ec..54792c21 100644 --- a/sm3_mb/Makefile.am +++ b/sm3_mb/Makefile.am @@ -54,6 +54,8 @@ lsrc_aarch64 += sm3_mb/sm3_ctx_base.c \ sm3_mb/aarch64/sm3_mb_asimd_x1.S \ sm3_mb/aarch64/sm3_mb_asimd_x4.S +lsrc_riscv64 += sm3_mb/sm3_ctx_base.c \ + sm3_mb/sm3_ctx_base_aliases.c src_include += -I $(srcdir)/sm3_mb From 17707aad3a1cf308e6c95f3d6b72da9a3a35954b Mon Sep 17 00:00:00 2001 From: Julian Zhu Date: Thu, 14 Aug 2025 11:28:02 +0800 Subject: [PATCH 3/5] ci: add RISC-V CI support Signed-off-by: Julian Zhu --- .github/workflows/ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5cfe4c14..065a8872 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,3 +65,18 @@ jobs: uses: ilammy/setup-nasm@13cbeb366c45c4379d3478cdcbadd8295feb5028 # v1.5.1 - name: Build run: nmake -f Makefile.nmake + + run_tests_linux-riscv64-v: + needs: check_format + runs-on: run_tests_linux-riscv64-v + steps: + - uses: actions/checkout@v4.2.2 + - name: Build + run: | + ./autogen.sh + ./configure + bash -c 'make -j $(nproc)' + - name: Run tests + run: bash tools/test_checks.sh + - name: Run extended tests + run: bash tools/test_extended.sh From f592ac69e2fe70ea4056b17544d37a44a59b1949 Mon Sep 17 00:00:00 2001 From: Julian Zhu Date: Wed, 20 Aug 2025 16:30:14 +0800 Subject: [PATCH 4/5] Add release note about RISC-V 64 support Signed-off-by: Julian Zhu --- Release_notes.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Release_notes.txt b/Release_notes.txt index f436a6d9..096d7ed9 100644 --- a/Release_notes.txt +++ b/Release_notes.txt @@ -83,6 +83,8 @@ v2.26 * Added SM3-NI AVX2 implementation. +* Added support for RISC-V 64 architecture. + v2.25 * Added new API including parameter checking (starting with isal_ prefix). From 06b42de741cb8d196b0b43e1e9b4218fea87688c Mon Sep 17 00:00:00 2001 From: Julian Zhu Date: Wed, 20 Aug 2025 17:56:37 +0800 Subject: [PATCH 5/5] README: add note about compiler portability for RISC-V 64 and other architectures Signed-off-by: Julian Zhu --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index fcdc21da..7628ca3d 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,9 @@ aarch64: * ./configure --disable-sve2 * make -f Makefile.unx DEFINES+=-DNO_SVE2=1 +RISC-V 64 and other: +* Compiler: Portable base functions are available that build with most C compilers. + ### Autotools To build and install the library with autotools it is usually sufficient to run: