From 40cdfb31b91ac5f16bde5d9944b2501298f7e38d Mon Sep 17 00:00:00 2001 From: linleiyong Date: Mon, 29 Jun 2026 11:21:57 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20sm4=5Farm64.c=20?= =?UTF-8?q?=E5=92=8C=20sm3=5Farm64.c=20=E4=B8=ADuint32x4=5Ft=20=E4=B8=8E?= =?UTF-8?q?=20uint8x16=5Ft=20=E9=9A=90=E5=BC=8F=E6=B7=B7=E7=94=A8=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E7=BC=96=E8=AF=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sm3_arm64.c | 2 +- src/sm4_arm64.c | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/sm3_arm64.c b/src/sm3_arm64.c index dfde8336..55e29dca 100644 --- a/src/sm3_arm64.c +++ b/src/sm3_arm64.c @@ -128,7 +128,7 @@ void sm3_compress_blocks(uint32_t digest[8], const uint8_t *data, size_t blocks) for (j = 0; j < 16; j += 4) { words = vld1q_u32((uint32_t *)data + j); - words = vrev32q_u8(words); + words = (uint32x4_t)vrev32q_u8((uint8x16_t)words); vst1q_u32(W + j, words); } diff --git a/src/sm4_arm64.c b/src/sm4_arm64.c index 9ad34059..50009bb9 100644 --- a/src/sm4_arm64.c +++ b/src/sm4_arm64.c @@ -140,7 +140,7 @@ void sm4_encrypt(const SM4_KEY *key, const unsigned char in[16], unsigned char o uint8x16x4_t S1 = vld1q_u8_x4(S + 64); uint8x16x4_t S2 = vld1q_u8_x4(S + 128); uint8x16x4_t S3 = vld1q_u8_x4(S + 192); - uint8x16_t vx; + uint32x4_t vx; uint8x16_t vt; uint32_t X0, X1, X2, X3, X4; int i; @@ -156,10 +156,10 @@ void sm4_encrypt(const SM4_KEY *key, const unsigned char in[16], unsigned char o // const time X4 = S32(X4) vx = vdupq_n_u32(X4); - vt = vqtbl4q_u8(S0, vx); - vt = vqtbx4q_u8(vt, S1, veorq_u8(vx, vdupq_n_u8(0x40))); - vt = vqtbx4q_u8(vt, S2, veorq_u8(vx, vdupq_n_u8(0x80))); - vx = vqtbx4q_u8(vt, S3, veorq_u8(vx, vdupq_n_u8(0xc0))); + vt = vqtbl4q_u8(S0, (uint8x16_t)vx); + vt = vqtbx4q_u8(vt, S1, veorq_u8((uint8x16_t)vx, vdupq_n_u8(0x40))); + vt = vqtbx4q_u8(vt, S2, veorq_u8((uint8x16_t)vx, vdupq_n_u8(0x80))); + vx = (uint32x4_t)vqtbx4q_u8(vt, S3, veorq_u8((uint8x16_t)vx, vdupq_n_u8(0xc0))); X4 = vgetq_lane_u32(vx, 0); X4 = X0 ^ L32(X4); @@ -278,7 +278,7 @@ void sm4_ctr32_encrypt_4blocks(const SM4_KEY *key, uint8_t iv[16], const uint8_t memcpy(buf, iv, 16); ctr = vld1q_u32(buf); - ctr = vrev32q_u8(ctr); + ctr = (uint32x4_t)vrev32q_u8((uint8x16_t)ctr); ctr0 = vdupq_n_u32(vgetq_lane_u32(ctr, 0)); ctr1 = vdupq_n_u32(vgetq_lane_u32(ctr, 1)); @@ -301,10 +301,10 @@ void sm4_ctr32_encrypt_4blocks(const SM4_KEY *key, uint8_t iv[16], const uint8_t x4 = veorq_u32(veorq_u32(x1, x2), veorq_u32(x3, rk)); // X4 = SBOX(X4) - xt = vqtbl4q_u8(S0, x4); - xt = vqtbx4q_u8(xt, S1, veorq_u8(x4, vdupq_n_u8(0x40))); - xt = vqtbx4q_u8(xt, S2, veorq_u8(x4, vdupq_n_u8(0x80))); - x4 = vqtbx4q_u8(xt, S3, veorq_u8(x4, vdupq_n_u8(0xc0))); + xt = (uint32x4_t)vqtbl4q_u8(S0, (uint8x16_t)x4); + xt = (uint32x4_t)vqtbx4q_u8((uint8x16_t)xt, S1, veorq_u8((uint8x16_t)x4, vdupq_n_u8(0x40))); + xt = (uint32x4_t)vqtbx4q_u8((uint8x16_t)xt, S2, veorq_u8((uint8x16_t)x4, vdupq_n_u8(0x80))); + x4 = (uint32x4_t)vqtbx4q_u8((uint8x16_t)xt, S3, veorq_u8((uint8x16_t)x4, vdupq_n_u8(0xc0))); // X4 = L(X4) xt = veorq_u32(x4, vrolq_n_u32(x4, 2)); @@ -326,16 +326,16 @@ void sm4_ctr32_encrypt_4blocks(const SM4_KEY *key, uint8_t iv[16], const uint8_t x01 = vzipq_u32(x02.val[0], x13.val[0]); x23 = vzipq_u32(x02.val[1], x13.val[1]); - x0 = vrev32q_u8(x01.val[0]); + x0 = (uint32x4_t)vrev32q_u8((uint8x16_t)x01.val[0]); vst1q_u32(buf, x0); - x1 = vrev32q_u8(x01.val[1]); + x1 = (uint32x4_t)vrev32q_u8((uint8x16_t)x01.val[1]); vst1q_u32(buf + 4, x1); - x2 = vrev32q_u8(x23.val[0]); + x2 = (uint32x4_t)vrev32q_u8((uint8x16_t)x23.val[0]); vst1q_u32(buf + 8, x2); - x3 = vrev32q_u8(x23.val[1]); + x3 = (uint32x4_t)vrev32q_u8((uint8x16_t)x23.val[1]); vst1q_u32(buf + 12, x3); // xor with plaintext From e1a575586d330f8e491712e645d55799941d6aee Mon Sep 17 00:00:00 2001 From: linleiyong Date: Mon, 29 Jun 2026 11:33:37 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8DLinux=E4=B8=8B=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05abcab8..5816a5df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -165,7 +165,11 @@ option(ENABLE_GHASH "Enable standalone GHASH command and test" ON) option(ENABLE_SKF "Enable SKF module" ON) option(ENABLE_SDF "Enable SDF module" ON) -option(ENABLE_ASM_UNDERSCORE_PREFIX "Add prefix `_` to assembly symbols" ON) +if (APPLE) + option(ENABLE_ASM_UNDERSCORE_PREFIX "Add prefix `_` to assembly symbols" ON) +else() + option(ENABLE_ASM_UNDERSCORE_PREFIX "Add prefix `_` to assembly symbols" OFF) +endif() option(ENABLE_TLS "Enable TLS and TLCP protocol support" ON) option(ENABLE_QUIC "Enable QUIC support" ON) From 8a5dec35ffd46f7e38a770cae390e32a142502c8 Mon Sep 17 00:00:00 2001 From: linleiyong Date: Mon, 29 Jun 2026 12:59:47 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20tool=5Fpqc=20=E2=80=94?= =?UTF-8?q?=20XMSS=20=E7=B1=BB=E5=9E=8B=E5=90=8D=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmake/tool_pqc.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/tool_pqc.cmake b/cmake/tool_pqc.cmake index e449e59a..4038a4fb 100644 --- a/cmake/tool_pqc.cmake +++ b/cmake/tool_pqc.cmake @@ -21,9 +21,9 @@ endif() if(ENABLE_XMSS) gmssl_signature_roundtrip(tool_xmss xmsskeygen xmsssign xmssverify - KEYGEN_ARGS -xmss_type XMSS_SHA2_10_256) + KEYGEN_ARGS -xmss_type XMSS_SM3_10_256) gmssl_signature_roundtrip(tool_xmssmt xmssmtkeygen xmssmtsign xmssmtverify - KEYGEN_ARGS -xmssmt_type XMSSMT_SHA2_20_2_256) + KEYGEN_ARGS -xmssmt_type XMSSMT_SM3_20_2_256) endif() if(ENABLE_SPHINCS) From 13020a410e05dcde921b68acbdbe82488208a096 Mon Sep 17 00:00:00 2001 From: linleiyong Date: Mon, 29 Jun 2026 12:59:13 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8DTLS=201.3=20=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E8=AF=81=E4=B9=A6=E9=80=89=E6=8B=A9=20bug(ma?= =?UTF-8?q?ke=20test=E6=8A=A5=E9=94=99tool=5Ftls13=5Fsm4=5Fgcm=5Fclient=5F?= =?UTF-8?q?cert=20(Failed))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tls13.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tls13.c b/src/tls13.c index 09fd013d..2e726380 100644 --- a/src/tls13.c +++ b/src/tls13.c @@ -5874,9 +5874,9 @@ int tls13_recv_certificate_request(TLS_CONNECT *conn) int signed_certificate_timestamp = 0; int common_sig_algs[4]; - size_t common_sig_algs_cnt; + size_t common_sig_algs_cnt = 0; int common_sig_algs_cert[4]; - size_t common_sig_algs_cert_cnt; + size_t common_sig_algs_cert_cnt = 0; const uint8_t *ca_names = NULL; size_t ca_names_len = 0; const uint8_t *filters = NULL; From 4fef3d07be8c6e18123ce624b4d668c2aa992e77 Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Tue, 30 Jun 2026 10:29:33 +0800 Subject: [PATCH 5/7] Disable OpenCL PQC tests by default on macOS --- CMakeLists.txt | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5816a5df..dbc4268b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,21 +91,6 @@ if (NOT MSVC) endif() endif() -if (APPLE) - include(CheckCSourceCompiles) - set(GMSSL_CMAKE_REQUIRED_LIBRARIES_SAVE "${CMAKE_REQUIRED_LIBRARIES}") - set(CMAKE_REQUIRED_LIBRARIES "-framework OpenCL") - check_c_source_compiles( - "#include - int main(void) { cl_uint n = 0; clGetPlatformIDs(0, 0, &n); return 0; }" - GMSSL_HAVE_MACOS_OPENCL) - set(CMAKE_REQUIRED_LIBRARIES "${GMSSL_CMAKE_REQUIRED_LIBRARIES_SAVE}") - if (GMSSL_HAVE_MACOS_OPENCL) - set(GMSSL_DEFAULT_ENABLE_LMS_CL ON) - set(GMSSL_DEFAULT_ENABLE_XMSS_CL ON) - endif() -endif() - option(ENABLE_TEST_SPEED "Enable test speed" OFF) option(ENABLE_SLOW_TEST "Enable slow tests" OFF) From 37e96adb9294c7e6c87848167f71a8c9f2563164 Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Tue, 30 Jun 2026 10:42:04 +0800 Subject: [PATCH 6/7] Avoid secp384r1 test data exports on Windows --- tests/secp384r1test.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/secp384r1test.c b/tests/secp384r1test.c index 2ef1e156..6b2b6cc3 100644 --- a/tests/secp384r1test.c +++ b/tests/secp384r1test.c @@ -75,6 +75,8 @@ static int test_secp384r1(void) { secp384r1_t a; secp384r1_t b; + secp384r1_t p; + secp384r1_t n; uint8_t buf[48]; if (secp384r1_set_zero(a) != 1 || !secp384r1_is_zero(a)) { @@ -101,9 +103,12 @@ static int test_secp384r1(void) error_print(); return -1; } - if (secp384r1_check_hex(SECP384R1_P, secp384r1_p) != 1 - || secp384r1_check_hex(SECP384R1_B, secp384r1_b) != 1 - || secp384r1_check_hex(SECP384R1_N, secp384r1_n) != 1) { + if (secp384r1_from_hex(p, secp384r1_p) != 1 + || secp384r1_from_hex(b, secp384r1_b) != 1 + || secp384r1_from_hex(n, secp384r1_n) != 1 + || secp384r1_check_hex(p, secp384r1_p) != 1 + || secp384r1_check_hex(b, secp384r1_b) != 1 + || secp384r1_check_hex(n, secp384r1_n) != 1) { error_print(); return -1; } @@ -232,6 +237,7 @@ static int test_secp384r1_point(void) SECP384R1_POINT Q; SECP384R1_POINT R; secp384r1_t k; + secp384r1_t n; uint8_t octets[97]; if (secp384r1_point_set_xy(&P, SECP384R1_POINT_G.X, SECP384R1_POINT_G.Y) != 1 @@ -261,7 +267,8 @@ static int test_secp384r1_point(void) error_print(); return -1; } - if (secp384r1_point_mul_generator(&R, SECP384R1_N) != 1 + if (secp384r1_from_hex(n, secp384r1_n) != 1 + || secp384r1_point_mul_generator(&R, n) != 1 || !secp384r1_point_is_at_infinity(&R)) { error_print(); return -1; From c5ee40e3dfb640547afea7f3a9fc8fe0c9412d4a Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Tue, 30 Jun 2026 10:57:31 +0800 Subject: [PATCH 7/7] Fix P-256 ECDSA DER signature parsing --- src/secp256r1.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/secp256r1.c b/src/secp256r1.c index b35910d3..e674620e 100644 --- a/src/secp256r1.c +++ b/src/secp256r1.c @@ -1526,6 +1526,8 @@ int secp256r1_ecdsa_signature_from_der(SECP256R1_ECDSA_SIGNATURE *sig, const uin const uint8_t *d; const uint8_t *r; const uint8_t *s; + uint8_t rbuf[32] = {0}; + uint8_t sbuf[32] = {0}; size_t dlen, rlen, slen; if ((ret = asn1_sequence_from_der(&d, &dlen, in, inlen)) != 1) { @@ -1541,8 +1543,10 @@ int secp256r1_ecdsa_signature_from_der(SECP256R1_ECDSA_SIGNATURE *sig, const uin return -1; } - if (secp256r1_from_32bytes(sig->r, r) != 1 - || secp256r1_from_32bytes(sig->s, s) != 1) { + memcpy(rbuf + sizeof(rbuf) - rlen, r, rlen); + memcpy(sbuf + sizeof(sbuf) - slen, s, slen); + if (secp256r1_from_32bytes(sig->r, rbuf) != 1 + || secp256r1_from_32bytes(sig->s, sbuf) != 1) { error_print(); return -1; }