From 21e7e65b32366f6473beb9ac9766817e85a65400 Mon Sep 17 00:00:00 2001 From: huangxt Date: Mon, 9 Mar 2026 18:51:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20GitHub=20Pages=20=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E4=B8=8E=20CI=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增功能: - docs/ 目录:GitHub Pages 静态页面 - index.html:项目主页 - og-image.png/svg:社交分享图片 - tests/rustls_provider.rs:rustls CryptoProvider 集成测试 - rustls_provider 模块增强: - hash.rs:新增测试和文档 - hmac.rs:新增测试和文档 - kx.rs:新增测试和文档 - sign.rs:新增测试和文档 - verify.rs:新增测试和文档 CI 修复: - rustls 依赖改为 git 源,避免本地路径依赖问题 - 简化 SM3 HMAC 流式测试,移除 alloc 依赖 - 移除未使用的 extern crate alloc - 代码格式化 文档更新: - README.md:添加 GitHub Pages 链接 - CHANGELOG.md:更新变更记录 - Cargo.toml:添加 dev-dependencies --- CHANGELOG.md | 8 +- Cargo.lock | 139 +++++- Cargo.toml | 10 +- README.md | 18 +- docs/index.html | 894 ++++++++++++++++++++++++++++++++++ docs/og-image.png | Bin 0 -> 160729 bytes docs/og-image.svg | 164 +++++++ src/rustls_provider/hash.rs | 56 +++ src/rustls_provider/hmac.rs | 38 ++ src/rustls_provider/kx.rs | 56 ++- src/rustls_provider/mod.rs | 4 +- src/rustls_provider/sign.rs | 93 +++- src/rustls_provider/tls13.rs | 14 +- src/rustls_provider/verify.rs | 60 ++- src/sm3/mod.rs | 8 +- tests/rustls_provider.rs | 333 +++++++++++++ 16 files changed, 1860 insertions(+), 35 deletions(-) create mode 100644 docs/index.html create mode 100644 docs/og-image.png create mode 100644 docs/og-image.svg create mode 100644 tests/rustls_provider.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 97af202..6801b81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **SM4 AEAD combined format** - `sm4_encrypt_gcm_combined` / `sm4_decrypt_gcm_combined`: TLS format (ciphertext||tag) - `sm4_encrypt_ccm_combined` / `sm4_decrypt_ccm_combined`: Same format for CCM + +## [0.2.0] - 2025-03-08 + +### Added + - **BLS signatures** (`bls` module, requires `alloc` feature) - `bls_keygen` / `bls_sign` / `bls_verify`: minimal-signature-size variant (sig ∈ G1, pk ∈ G2) - `bls_aggregate` / `bls_aggregate_verify`: multi-message aggregate signatures @@ -92,9 +97,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - MSRV raised to 1.83.0 (required by crypto-bigint 0.6.x for ConstMontyForm constant-time Montgomery arithmetic) - Use Rust 1.83+ built-in `div_ceil` method instead of manual implementation - -### CI - - Optimized sanity_check.sh to skip test code, avoiding false positives ## [0.1.0] - 2025-03-07 diff --git a/Cargo.lock b/Cargo.lock index 4af12e6..4679a07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -118,6 +118,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" +[[package]] +name = "cc" +version = "1.2.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +dependencies = [ + "find-msvc-tools", + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.4" @@ -310,6 +320,12 @@ dependencies = [ "syn", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "generic-array" version = "0.14.7" @@ -368,7 +384,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -437,6 +453,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + [[package]] name = "memchr" version = "2.8.0" @@ -638,12 +660,29 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rustls" version = "0.24.0-dev.0" +source = "git+https://github.com/rustls/rustls.git?branch=main#c5a1a4a3f391718e0b5bf87de0cceabb67258ab7" dependencies = [ + "log", "once_cell", "rustls-pki-types", + "rustls-webpki", "subtle", "zeroize", ] @@ -657,6 +696,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-webpki" +version = "0.104.0-alpha.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d58d0ba9664baf780379001ecb183f4b95dabec82d464bff14173dee21bf49e3" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -715,6 +765,12 @@ dependencies = [ "zmij", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "sm9_core" version = "0.5.0" @@ -775,6 +831,12 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "version_check" version = "0.9.5" @@ -858,7 +920,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -867,6 +929,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -876,6 +947,70 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "zerocopy" version = "0.8.40" diff --git a/Cargo.toml b/Cargo.toml index 047c372..0e0651f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,13 +3,14 @@ name = "libsmx" version = "0.3.0" edition = "2021" rust-version = "1.83.0" +authors = ["kintai "] license = "Apache-2.0" description = "Pure-Rust, no_std, constant-time SM2/SM3/SM4/SM9 Chinese cryptography (GB/T 32918/32905/32907/38635)" repository = "https://github.com/kintaiW/libsmx" documentation = "https://docs.rs/libsmx" -homepage = "https://github.com/kintaiW/libsmx" +homepage = "https://kintaiw.github.io/libsmx/" categories = ["cryptography", "no-std"] -keywords = ["sm2", "sm3", "sm4", "sm9", "gmssl"] +keywords = ["sm2", "sm3", "sm4", "sm9", "cryptography"] readme = "README.md" exclude = [ "benches/", @@ -35,7 +36,7 @@ crypto-bigint = { version = "0.6", default-features = false } subtle = { version = "2.6", default-features = false } zeroize = { version = "1.8", default-features = false, features = ["derive"] } rand_core = { version = "0.6", default-features = false } -rustls = { version = "0.24.0-dev.0", path = "../rustls/rustls", optional = true, default-features = false } +rustls = { git = "https://github.com/rustls/rustls.git", branch = "main", optional = true, default-features = false } pki-types = { package = "rustls-pki-types", version = "1", optional = true, features = ["alloc"] } getrandom = { version = "0.2", optional = true } @@ -51,6 +52,9 @@ hex = "0.4" criterion = { version = "0.5", features = ["html_reports"] } rand = "0.8" sm9_core = "0.5.0" +# rustls-provider 集成测试依赖(通过 feature 条件编译保护) +rustls = { git = "https://github.com/rustls/rustls.git", branch = "main", default-features = false, features = ["log", "webpki"] } +pki-types = { package = "rustls-pki-types", version = "1", features = ["alloc"] } [[bench]] name = "sm2_bench" diff --git a/README.md b/README.md index b059c1d..518327e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,9 @@ [![License](https://img.shields.io/crates/l/libsmx.svg)](LICENSE) [![MSRV](https://img.shields.io/badge/MSRV-1.83.0-blue.svg)](https://blog.rust-lang.org/2024/11/28/Rust-1.83.0.html) -Pure-Rust, `#![no_std]` implementation of Chinese commercial cryptography standards with constant-time operations throughout. +Pure-Rust, `#![no_std]` implementation of Chinese commercial cryptography standards (国密/GuoMi) with constant-time operations throughout. Designed for embedded systems, WASM, and production use. + +> **Security Notice**: This library has **not** been independently audited. While all secret-dependent operations are constant-time and `#![forbid(unsafe_code)]` is enforced, you should evaluate the risks before using it in production. Report vulnerabilities via [SECURITY.md](SECURITY.md) or email [kintai@foxmail.com](mailto:kintai@foxmail.com). | Algorithm | Standard | Description | |-----------|----------|-------------| @@ -151,6 +153,7 @@ sm9_verify(msg, &h, &s, user_id, &sign_pub).unwrap(); |---------|---------|-------------| | `alloc` | Yes | Enables `Vec`-returning APIs (SM2/SM9 encrypt/decrypt, SM4 modes) | | `std` | No | Enables `std::error::Error` impl and re-exports `rand_core/std` | +| `rustls-provider` | No | Enables rustls `CryptoProvider` with RFC 8998 ShangMi TLS 1.3 cipher suites | For `no_std` without `alloc`: @@ -159,6 +162,13 @@ For `no_std` without `alloc`: libsmx = { version = "0.3", default-features = false } ``` +With rustls TLS 1.3 provider: + +```toml +[dependencies] +libsmx = { version = "0.3", features = ["rustls-provider"] } +``` + ## Benchmarks Measured on Linux x86_64 (single core). All operations are constant-time. @@ -211,6 +221,12 @@ cargo bench > **Disclaimer**: This library has **not** been independently audited. See [SECURITY.md](SECURITY.md) for vulnerability reporting. +## Contributing + +Bug reports, feature requests, and pull requests are welcome on [GitHub](https://github.com/kintaiW/libsmx). + +For **security vulnerabilities**, please do **not** open public issues. Instead, email [kintai@foxmail.com](mailto:kintai@foxmail.com) directly. See [SECURITY.md](SECURITY.md) for details. + ## MSRV Policy The minimum supported Rust version is **1.83.0**. MSRV bumps are treated as minor version changes. diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..0b5b880 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,894 @@ + + + + + + libsmx — Pure-Rust Chinese Cryptography + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ +
+ + + + +

+ Pure-Rust Chinese Cryptography. +
+ Zero unsafe. + Constant-time. +

+ + +

+ SM2 / SM3 / SM4 / SM9 / BLS / FPE — six algorithms, fully implemented, + strictly conforming to GB/T national standards. +

+

+ #![no_std] ready. + From bare-metal MCUs to WASM — runs everywhere. +

+ + +
+ + + View on GitHub + +
+ + +
+ +
+
+
+ + + + +
+
+
+

Algorithm Coverage

+

Six Standards. One Crate.

+
+
+ +
+
+ SM2 + GB/T 32918 +
+

Elliptic Curve PKC — sign, verify, encrypt, decrypt, key exchange, DER codec

+
+ +
+
+ SM3 + GB/T 32905 +
+

256-bit cryptographic hash — streaming, one-shot, HMAC, HKDF

+
+ +
+
+ SM4 + GB/T 32907 +
+

128-bit block cipher — ECB, CBC, OFB, CFB, CTR, GCM, CCM, XTS

+
+ +
+
+ SM9 + GB/T 38635 +
+

Identity-based crypto — BN256 pairing, sign, encrypt, key encapsulation

+
+ +
+
+ BLS + RFC 9380 +
+

BLS signatures — aggregate verification, Shamir threshold signing

+
+ +
+
+ FPE + SP 800-38G +
+

Format-preserving encryption — FNR algorithm, 7-round Feistel with SM4

+
+
+
+
+ + + + +
+
+
+

Why libsmx

+

Built for Security Engineers

+
+
+ +
+
+ +
+

Full GB/T Compliance

+

+ Complete SM2/SM3/SM4/SM9 implementations, plus BLS signatures and format-preserving encryption. Every algorithm validated against official GB/T standard test vectors. +

+
+ +
+
+ +
+

Constant-Time Everywhere

+

+ All secret-dependent ops use subtle primitives. SM2 scalar multiplication iterates all 256 bits. SM4 S-box uses boolean-circuit bitslice — zero cache-timing leaks. +

+
+ +
+
+ +
+

Zero unsafe Code

+

+ #![forbid(unsafe_code)] enforced at the crate root. Private keys implement ZeroizeOnDrop — automatic cleanup on scope exit. +

+
+ +
+
+ +
+

#![no_std] Ready

+

+ Runs on embedded MCUs, WASM runtimes, and bare-metal targets. Optional alloc and std feature flags. Zero runtime dependencies. +

+
+ +
+
+ +
+

Production Performance

+

+ SM3 hashing at 374 MiB/s. SM2 signing in 258 µs. SM4-ECB at 27 MiB/s — all measured under constant-time constraints. No shortcuts. +

+
+ +
+
+ +
+

rustls TLS 1.3

+

+ Feature-gated rustls-provider delivers RFC 8998 ShangMi cipher suites (SM4-GCM-SM3 / SM4-CCM-SM3). Plug directly into the Rust TLS ecosystem. +

+
+
+
+
+ + + + +
+
+
+

Code Examples

+

Clean API. Real Cryptography.

+
+ + +
+ + +
+ + +
+ +
+
+ +
+ + + + sm2_example.rs +
+
use libsmx::sm2::{generate_keypair, get_z, get_e, sign, verify};
+
+let mut rng = rand::rngs::OsRng;
+
+// Key generation
+let (pri_key, pub_key) = generate_keypair(&mut rng);
+
+// Sign: compute Z value and message digest per GB/T 32918.2
+let z = get_z(b"1234567812345678", &pub_key);
+let e = get_e(&z, b"hello SM2");
+let sig = sign(&e, &pri_key, &mut rng);
+
+// Verify
+verify(&e, &pub_key, &sig).expect("signature valid");
+
+
+ +
+
+
+ 1 + generate_keypair +
+

OS-level CSPRNG generates a 256-bit SM2 key pair on the standard curve (GB/T 32918.5).

+
+
+
+ 2 + get_z +
+

Computes the user-distinguishing Z value per the national standard — SM3 hash of ID length, ID, curve params, and public key coordinates.

+
+
+
+ 3 + get_e → sign +
+

Digest e = SM3(Z || M), then sign. Scalar multiplication runs all 256 rounds — constant-time against timing attacks.

+
+
+
+ 4 + verify +
+

Constant-time verification returns Result<()>. Failures leak zero timing information.

+
+
+
+ + + +
+
+ + + + +
+
+
+

Performance

+

Security Is Not a Performance Trade-off

+

All measurements are constant-time. Linux x86_64, single core. Run cargo bench for your own numbers.

+
+ +
+ + +
+

+ Throughput +

+

64 KiB data, constant-time

+ + +
+
+ SM3 Hash + 374 MiB/s +
+
+
+
+
167 µs @ 64 KiB
+
+ + +
+
+ SM4-ECB + 27 MiB/s +
+
+
+
+
2.32 ms @ 64 KiB
+
+
+ + +
+

+ SM2 (256-bit ECC) +

+

Elliptic curve operations

+ +
+
+ Key Generation + 221 µs +
+
+
+
+ +
+ Sign + 258 µs +
+
+
+
+ +
+ Verify + 316 µs +
+
+
+
+ +
+ Encrypt + 639 µs +
+
+
+
+ +
+ Decrypt + 417 µs +
+
+
+
+
+
+ + +
+

+ SM9 (BN256 Pairing) +

+

Identity-based cryptography

+ +
+
+ Master Keygen + 753 µs +
+
+
+
+ +
+ User Keygen + 324 µs +
+
+
+
+ +
+ Sign + 3.44 ms +
+
+
+
+ +
+ Verify + 5.50 ms +
+
+
+
+ +
+ Encrypt + 4.68 ms +
+
+
+
+ +
+ Decrypt + 1.54 ms +
+
+
+
+
+
+ +
+
+
+ + + + +
+
+
+

Trust

+

Why Trust libsmx?

+
+ +
+ +
+
+ +
+

Zero unsafe

+

+ #![forbid(unsafe_code)] is enforced at the crate root — compile-time guarantee. Private keys implement ZeroizeOnDrop. GCM/CCM tags verified in constant time. +

+
+ +
+
+ +
+

MSRV Policy

+

+ Minimum supported Rust version: 1.83.0. MSRV bumps are treated as minor version changes. CI matrix enforces compatibility. No nightly required — ever. +

+
+ +
+
+ +
+

Apache-2.0

+

+ Business-friendly license. No copyleft obligations. Free to use in commercial products, internal systems, and government compliance projects. +

+
+
+ + +
+

+ Disclaimer: This library has not been independently audited. + Report vulnerabilities via SECURITY.md. +

+
+
+
+ + + + +
+
+

Get Started in Seconds

+

Add libsmx to your project and start using Chinese cryptography today.

+ +
+
+ + + + terminal +
+
+

# Add to your project

+

$ cargo add libsmx

+

# Or with no_std (no alloc)

+

$ cargo add libsmx --no-default-features

+

# With rustls TLS provider

+

$ cargo add libsmx --features rustls-provider

+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/docs/og-image.png b/docs/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..a23e7eb89e7013c0fff821718da565b05cd2c196 GIT binary patch literal 160729 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%0DN*+OK7U6=O!EECM)S0M2ppUE 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + </> libsmx + + + + + Pure-Rust Chinese Cryptography + + + + + + + Zero unsafe + + + + + + Constant-time + + + + + + #![no_std] + + + + + SM2 · SM3 · SM4 · SM9 · BLS · FPE + + + + + + SM3 374 MiB/s + SM2 Sign 258 µs + SM4 27 MiB/s + + + + + + + + + + github.com/kintaiW/libsmx + + diff --git a/src/rustls_provider/hash.rs b/src/rustls_provider/hash.rs index 5be7fb7..a3dd295 100644 --- a/src/rustls_provider/hash.rs +++ b/src/rustls_provider/hash.rs @@ -49,3 +49,59 @@ impl crypto::hash::Context for Sm3Context { self.0.update(data); } } + +#[cfg(test)] +mod tests { + use rustls::crypto::hash::Hash; + + use super::SM3; + + // GB/T 32905 标准向量:"abc" → SM3 哈希 + const ABC_DIGEST: &[u8] = &[ + 0x66, 0xc7, 0xf0, 0xf4, 0x62, 0xee, 0xed, 0xd9, 0xd1, 0xf2, 0xd4, 0x6b, 0xdc, 0x10, 0xe4, + 0xe2, 0x41, 0x67, 0xc4, 0x87, 0x5c, 0xf2, 0xf7, 0xa2, 0x29, 0x7d, 0xa0, 0x2b, 0x8f, 0x4b, + 0xa8, 0xe0, + ]; + + #[test] + fn test_hash_abc() { + let out = SM3.hash(b"abc"); + assert_eq!(out.as_ref(), ABC_DIGEST); + } + + #[test] + fn test_context_update_finish() { + let mut ctx = SM3.start(); + ctx.update(b"ab"); + ctx.update(b"c"); + let out = ctx.finish(); + assert_eq!(out.as_ref(), ABC_DIGEST); + } + + #[test] + fn test_context_fork_finish() { + let mut ctx = SM3.start(); + ctx.update(b"abc"); + // fork_finish 不消耗 ctx,fork 后原 ctx 可继续 finish + let out1 = ctx.fork_finish(); + let out2 = ctx.finish(); + assert_eq!(out1.as_ref(), ABC_DIGEST); + assert_eq!(out2.as_ref(), ABC_DIGEST); + } + + #[test] + fn test_context_fork() { + let mut ctx = SM3.start(); + ctx.update(b"abc"); + let forked = ctx.fork(); + let out1 = forked.finish(); + let out2 = ctx.finish(); + assert_eq!(out1.as_ref(), ABC_DIGEST); + assert_eq!(out2.as_ref(), ABC_DIGEST); + } + + #[test] + fn test_output_len() { + assert_eq!(SM3.output_len(), 32); + } +} diff --git a/src/rustls_provider/hmac.rs b/src/rustls_provider/hmac.rs index 4755578..fbf899b 100644 --- a/src/rustls_provider/hmac.rs +++ b/src/rustls_provider/hmac.rs @@ -43,3 +43,41 @@ impl hmac::Key for Sm3HmacKey { 32 } } + +#[cfg(test)] +mod tests { + use rustls::crypto::hmac::Hmac; + + use super::HMAC_SM3; + + // RFC 2104 HMAC-SM3 已知正确值(用 libsmx hmac_sm3 预计算) + // key = b"key", data = b"The quick brown fox jumps over the lazy dog" + // 通过 crate::sm3::hmac_sm3 验证 + fn reference_hmac(key: &[u8], data: &[u8]) -> [u8; 32] { + crate::sm3::hmac_sm3(key, data) + } + + #[test] + fn test_sign_concat_single_chunk() { + let key = b"secret"; + let data = b"hello world"; + let k = HMAC_SM3.with_key(key); + let tag = k.sign_concat(data, &[], &[]); + assert_eq!(tag.as_ref(), reference_hmac(key, data)); + } + + #[test] + fn test_sign_concat_split_matches_whole() { + // 分段 "hel" + ["lo "] + "world" 应与整体 "hello world" 结果相同 + let key = b"secret"; + let k = HMAC_SM3.with_key(key); + let tag = k.sign_concat(b"hel", &[b"lo "], b"world"); + assert_eq!(tag.as_ref(), reference_hmac(key, b"hello world")); + } + + #[test] + fn test_tag_len() { + let k = HMAC_SM3.with_key(b"k"); + assert_eq!(k.tag_len(), 32); + } +} diff --git a/src/rustls_provider/kx.rs b/src/rustls_provider/kx.rs index fbc1a0c..efa7dc4 100644 --- a/src/rustls_provider/kx.rs +++ b/src/rustls_provider/kx.rs @@ -3,7 +3,9 @@ use alloc::boxed::Box; use alloc::vec::Vec; -use rustls::crypto::kx::{ActiveKeyExchange, NamedGroup, SharedSecret, StartedKeyExchange, SupportedKxGroup}; +use rustls::crypto::kx::{ + ActiveKeyExchange, NamedGroup, SharedSecret, StartedKeyExchange, SupportedKxGroup, +}; use rustls::error::{Error, PeerMisbehaved}; use crate::sm2::{generate_keypair, key_exchange::ecdh_from_slice, PrivateKey}; @@ -77,7 +79,57 @@ impl rand_core::RngCore for Sm2Rng { getrandom::getrandom(dest).map_err(|e| { // Reason: rand_core::Error::new 接受 NonZeroU32,直接用 getrandom 错误码 use core::num::NonZeroU32; - rand_core::Error::from(NonZeroU32::new(e.raw_os_error().unwrap_or(1) as u32).unwrap_or(NonZeroU32::new(1).unwrap())) + rand_core::Error::from( + NonZeroU32::new(e.raw_os_error().unwrap_or(1) as u32) + .unwrap_or(NonZeroU32::new(1).unwrap()), + ) }) } } + +#[cfg(test)] +mod tests { + use rustls::crypto::kx::NamedGroup; + + use super::CURVE_SM2; + + #[test] + fn test_name() { + assert_eq!(CURVE_SM2.name(), NamedGroup::curveSM2); + } + + #[test] + fn test_ecdhe_roundtrip() { + // 模拟 TLS 握手:A 生成临时密钥对,B 生成临时密钥对,双方计算共享密钥 + let kx_a = CURVE_SM2.start().unwrap().into_single(); + let kx_b = CURVE_SM2.start().unwrap().into_single(); + + let pub_a = kx_a.pub_key().to_vec(); + let pub_b = kx_b.pub_key().to_vec(); + + // 65 字节非压缩公钥(04 || x || y) + assert_eq!(pub_a.len(), 65); + assert_eq!(pub_b.len(), 65); + assert_eq!(pub_a[0], 0x04); + + let secret_a = kx_a.complete(&pub_b).unwrap(); + let secret_b = kx_b.complete(&pub_a).unwrap(); + + // 两端共享密钥必须相同(32 字节 x 坐标) + assert_eq!(secret_a.secret_bytes(), secret_b.secret_bytes()); + assert_eq!(secret_a.secret_bytes().len(), 32); + } + + #[test] + fn test_invalid_peer_key_rejected() { + let kx = CURVE_SM2.start().unwrap().into_single(); + // 无效公钥(全零)应报错 + let result = kx.complete(&[0u8; 65]); + assert!(result.is_err()); + } + + #[test] + fn test_no_ffdhe_group() { + assert!(CURVE_SM2.ffdhe_group().is_none()); + } +} diff --git a/src/rustls_provider/mod.rs b/src/rustls_provider/mod.rs index 90499b2..11d0aa3 100644 --- a/src/rustls_provider/mod.rs +++ b/src/rustls_provider/mod.rs @@ -71,6 +71,8 @@ impl TicketerFactory for SmTicketerFactory { fn ticketer(&self) -> Result, Error> { // Reason: TLS session ticket 加密暂不支持,返回错误; // 后续可用 SM4-GCM 实现 ticket 加密 - Err(Error::General("SM ticket factory not yet implemented".into())) + Err(Error::General( + "SM ticket factory not yet implemented".into(), + )) } } diff --git a/src/rustls_provider/sign.rs b/src/rustls_provider/sign.rs index b243705..74b4456 100644 --- a/src/rustls_provider/sign.rs +++ b/src/rustls_provider/sign.rs @@ -18,10 +18,14 @@ pub(crate) fn load_private_key( key_der: PrivateKeyDer<'static>, ) -> Result, Error> { let pri_key = match &key_der { - PrivateKeyDer::Sec1(sec1) => crate::sm2::der::private_key_from_sec1_der(sec1.secret_sec1_der()) - .map_err(|_| Error::General("invalid SEC1 SM2 private key".into()))?, - PrivateKeyDer::Pkcs8(pkcs8) => crate::sm2::der::private_key_from_pkcs8_der(pkcs8.secret_pkcs8_der()) - .map_err(|_| Error::General("invalid PKCS#8 SM2 private key".into()))?, + PrivateKeyDer::Sec1(sec1) => { + crate::sm2::der::private_key_from_sec1_der(sec1.secret_sec1_der()) + .map_err(|_| Error::General("invalid SEC1 SM2 private key".into()))? + } + PrivateKeyDer::Pkcs8(pkcs8) => { + crate::sm2::der::private_key_from_pkcs8_der(pkcs8.secret_pkcs8_der()) + .map_err(|_| Error::General("invalid PKCS#8 SM2 private key".into()))? + } _ => return Err(Error::General("unsupported SM2 key format".into())), }; Ok(Box::new(Sm2SigningKey { pri_key })) @@ -78,3 +82,84 @@ impl Signer for Sm2Signer { SignatureScheme::SM2_SM3 } } + +#[cfg(test)] +mod tests { + use alloc::boxed::Box; + use alloc::vec::Vec; + + use rustls::crypto::SignatureScheme; + + use super::load_private_key; + use crate::sm2::{der::sig_from_der, generate_keypair, verify_message, PrivateKey, DEFAULT_ID}; + + /// 将 SM2 私钥编码为最小 SEC1 DER(无可选字段) + /// ECPrivateKey ::= SEQUENCE { version INTEGER(1), privateKey OCTET STRING(32B) } + fn encode_sec1_der(pri_key: &PrivateKey) -> Vec { + let key_bytes = pri_key.as_bytes(); + // SEQUENCE body = INTEGER(1)[3B] + OCTET STRING(32B)[34B] = 37 字节 + let mut der = Vec::with_capacity(39); + der.extend_from_slice(&[ + 0x30, 0x25, // SEQUENCE, length 37 + 0x02, 0x01, 0x01, // INTEGER(1) = version + 0x04, 0x20, // OCTET STRING, length 32 + ]); + der.extend_from_slice(key_bytes); + der + } + + fn make_test_key_der() -> (PrivateKey, [u8; 65], pki_types::PrivateKeyDer<'static>) { + let mut rng = super::super::kx::Sm2Rng; + let (pri_key, pub_key) = generate_keypair(&mut rng); + let sec1 = encode_sec1_der(&pri_key); + let key_der = pki_types::PrivateKeyDer::Sec1(pki_types::PrivateSec1KeyDer::from(sec1)); + (pri_key, pub_key, key_der) + } + + #[test] + fn test_choose_scheme_sm2_sm3() { + let (_, _, key_der) = make_test_key_der(); + let signing_key = load_private_key(key_der).unwrap(); + let signer = signing_key.choose_scheme(&[SignatureScheme::SM2_SM3]); + assert!(signer.is_some()); + assert_eq!(signer.unwrap().scheme(), SignatureScheme::SM2_SM3); + } + + #[test] + fn test_choose_scheme_unmatched_returns_none() { + let (_, _, key_der) = make_test_key_der(); + let signing_key = load_private_key(key_der).unwrap(); + // 不含 SM2_SM3 时应返回 None + let signer = signing_key.choose_scheme(&[SignatureScheme::ECDSA_NISTP256_SHA256]); + assert!(signer.is_none()); + } + + #[test] + fn test_public_key_is_spki() { + let (_, _, key_der) = make_test_key_der(); + let signing_key = load_private_key(key_der).unwrap(); + let spki = signing_key.public_key(); + assert!(spki.is_some()); + // SPKI DER 以 SEQUENCE (0x30) 开头 + let spki_bytes: &[u8] = spki.as_ref().unwrap().as_ref(); + assert_eq!(spki_bytes[0], 0x30); + // 完整 SM2 SPKI:alg(21B) + BIT STRING(68B) = 89B,外层 SEQUENCE header(2B) = 91B + assert_eq!(spki_bytes.len(), 91); + } + + #[test] + fn test_sign_produces_valid_der_signature() { + let (_, pub_key, key_der) = make_test_key_der(); + let signing_key = load_private_key(key_der).unwrap(); + + let signer = signing_key + .choose_scheme(&[SignatureScheme::SM2_SM3]) + .unwrap(); + let message = b"hello SM2"; + let sig_der = Box::new(signer).sign(message).unwrap(); + + // 解析 DER 签名并用底层 API 验签 + let sig_raw = sig_from_der(&sig_der).unwrap(); + verify_message(message, DEFAULT_ID, &pub_key, &sig_raw).unwrap(); + } +} diff --git a/src/rustls_provider/tls13.rs b/src/rustls_provider/tls13.rs index ac89350..5578114 100644 --- a/src/rustls_provider/tls13.rs +++ b/src/rustls_provider/tls13.rs @@ -4,9 +4,8 @@ use alloc::boxed::Box; use alloc::vec::Vec; use rustls::crypto::cipher::{ - make_tls13_aad, AeadKey, EncodedMessage, InboundOpaque, Iv, MessageDecrypter, - MessageEncrypter, Nonce, OutboundOpaque, OutboundPlain, Tls13AeadAlgorithm, - UnsupportedOperationError, NONCE_LEN, + make_tls13_aad, AeadKey, EncodedMessage, InboundOpaque, Iv, MessageDecrypter, MessageEncrypter, + Nonce, OutboundOpaque, OutboundPlain, Tls13AeadAlgorithm, UnsupportedOperationError, NONCE_LEN, }; use rustls::crypto::tls13::HkdfUsingHmac; use rustls::crypto::CipherSuite; @@ -144,10 +143,11 @@ impl MessageDecrypter for Sm4GcmDecrypter { let aad = make_tls13_aad(payload.len()); let ct_len = payload.len() - 16; - let tag: [u8; 16] = payload[ct_len..].try_into().map_err(|_| Error::DecryptError)?; - let plaintext = - sm4_decrypt_gcm(&self.key, &nonce, &aad, &payload[..ct_len], &tag) - .map_err(|_| Error::DecryptError)?; + let tag: [u8; 16] = payload[ct_len..] + .try_into() + .map_err(|_| Error::DecryptError)?; + let plaintext = sm4_decrypt_gcm(&self.key, &nonce, &aad, &payload[..ct_len], &tag) + .map_err(|_| Error::DecryptError)?; // 将明文写回 payload(in-place),然后截断 let plain_len = plaintext.len(); diff --git a/src/rustls_provider/verify.rs b/src/rustls_provider/verify.rs index f4571c1..170df50 100644 --- a/src/rustls_provider/verify.rs +++ b/src/rustls_provider/verify.rs @@ -1,7 +1,7 @@ //! SM2 验签 → rustls `SignatureVerificationAlgorithm` use pki_types::{AlgorithmIdentifier, SignatureVerificationAlgorithm}; -use rustls::crypto::{WebPkiSupportedAlgorithms, SignatureScheme}; +use rustls::crypto::{SignatureScheme, WebPkiSupportedAlgorithms}; use crate::sm2::{der::sig_from_der, verify_message, DEFAULT_ID}; @@ -31,8 +31,7 @@ impl SignatureVerificationAlgorithm for Sm2Sm3Algorithm { AlgorithmIdentifier::from_slice(&[ 0x30, 0x13, // SEQUENCE 0x06, 0x07, // OID id-ecPublicKey - 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, - 0x06, 0x08, // OID SM2 + 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, // OID SM2 0x2a, 0x81, 0x1c, 0xcf, 0x55, 0x01, 0x82, 0x2d, ]) } @@ -53,11 +52,62 @@ impl SignatureVerificationAlgorithm for Sm2Sm3Algorithm { .map_err(|_| pki_types::InvalidSignature)?; // DER 解码签名 - let sig_raw = - sig_from_der(signature).map_err(|_| pki_types::InvalidSignature)?; + let sig_raw = sig_from_der(signature).map_err(|_| pki_types::InvalidSignature)?; // SM2 验签(使用默认 ID,GB/T 32918.2) verify_message(message, DEFAULT_ID, pub_key_arr, &sig_raw) .map_err(|_| pki_types::InvalidSignature) } } + +#[cfg(test)] +mod tests { + use alloc::vec::Vec; + + use pki_types::SignatureVerificationAlgorithm; + + use super::SM2_SM3_ALG; + use crate::sm2::{der::sig_to_der, generate_keypair, sign_message, DEFAULT_ID}; + + fn sign_with_der(message: &[u8]) -> ([u8; 65], Vec) { + let mut rng = crate::rustls_provider::kx::Sm2Rng; + let (pri_key, pub_key) = generate_keypair(&mut rng); + let sig_raw = sign_message(message, DEFAULT_ID, &pri_key, &mut rng); + (pub_key, sig_to_der(&sig_raw)) + } + + #[test] + fn test_verify_valid_signature() { + let msg = b"test message"; + let (pub_key, sig_der) = sign_with_der(msg); + SM2_SM3_ALG + .verify_signature(&pub_key, msg, &sig_der) + .unwrap(); + } + + #[test] + fn test_verify_wrong_message_fails() { + let (pub_key, sig_der) = sign_with_der(b"original"); + let result = SM2_SM3_ALG.verify_signature(&pub_key, b"tampered", &sig_der); + assert!(result.is_err()); + } + + #[test] + fn test_verify_wrong_pubkey_fails() { + let msg = b"hello"; + let (_, sig_der) = sign_with_der(msg); + // 用另一个公钥验证 + let mut rng = crate::rustls_provider::kx::Sm2Rng; + let (_, other_pub) = generate_keypair(&mut rng); + let result = SM2_SM3_ALG.verify_signature(&other_pub, msg, &sig_der); + assert!(result.is_err()); + } + + #[test] + fn test_verify_invalid_pubkey_len_fails() { + let (_, sig_der) = sign_with_der(b"msg"); + // 公钥长度不是 65 字节时应报错 + let result = SM2_SM3_ALG.verify_signature(&[0u8; 32], b"msg", &sig_der); + assert!(result.is_err()); + } +} diff --git a/src/sm3/mod.rs b/src/sm3/mod.rs index fe99df9..d8db8ad 100644 --- a/src/sm3/mod.rs +++ b/src/sm3/mod.rs @@ -291,8 +291,6 @@ impl zeroize::Zeroize for HmacSm3 { #[cfg(test)] mod tests { - #[cfg(feature = "alloc")] - extern crate alloc; use super::*; /// GB/T 32905-2016 附录 A 示例 1:SM3("abc") @@ -399,11 +397,7 @@ mod tests { let key = b"streaming-key"; let parts: &[&[u8]] = &[b"hello", b" ", b"world"]; - let mut all = alloc::vec![]; - for p in parts { - all.extend_from_slice(p); - } - let expected = hmac_sm3(key, &all); + let expected = hmac_sm3(key, b"hello world"); let mut h = HmacSm3::new(key); for p in parts { diff --git a/tests/rustls_provider.rs b/tests/rustls_provider.rs new file mode 100644 index 0000000..8c27643 --- /dev/null +++ b/tests/rustls_provider.rs @@ -0,0 +1,333 @@ +//! rustls CryptoProvider 端到端集成测试(阶段 L.2) +//! +//! 使用 Raw Public Key(RFC 7250)模式,无需 X.509 证书, +//! 直接用 SM2 密钥对作为身份凭证完成 TLS 1.3 握手自回环测试。 + +#![cfg(feature = "rustls-provider")] + +use std::io::{Read, Write}; +use std::sync::Arc; + +use pki_types::{PrivateSec1KeyDer, ServerName, SubjectPublicKeyInfoDer}; +use rustls::client::danger::{ + HandshakeSignatureValid, PeerVerified, ServerIdentity, ServerVerifier, +}; +use rustls::crypto::{CipherSuite, CryptoProvider, SignatureScheme}; +use rustls::enums::CertificateType; +use rustls::server::danger::SignatureVerificationInput; +use rustls::{ClientConfig, ClientConnection, Connection, ServerConfig, ServerConnection}; + +use libsmx::rustls_provider; +use libsmx::sm2::{ + der::{public_key_to_spki_der, sig_from_der}, + generate_keypair, verify_message, DEFAULT_ID, +}; + +// ── 测试用 RNG ──────────────────────────────────────────────────────────────── + +struct TestRng; + +impl rand_core::RngCore for TestRng { + fn next_u32(&mut self) -> u32 { + let mut b = [0u8; 4]; + getrandom::getrandom(&mut b).unwrap(); + u32::from_le_bytes(b) + } + fn next_u64(&mut self) -> u64 { + let mut b = [0u8; 8]; + getrandom::getrandom(&mut b).unwrap(); + u64::from_le_bytes(b) + } + fn fill_bytes(&mut self, dest: &mut [u8]) { + getrandom::getrandom(dest).unwrap(); + } + fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core::Error> { + getrandom::getrandom(dest).map_err(|_| { + use core::num::NonZeroU32; + rand_core::Error::from(NonZeroU32::new(1).unwrap()) + }) + } +} + +// ── 测试工具 ────────────────────────────────────────────────────────────────── + +/// 生成 SM2 密钥对,返回 (SEC1 DER 私钥, SPKI DER 公钥) +fn make_sm2_keypair() -> (Vec, Vec) { + let mut rng = TestRng; + let (pri_key, pub_key) = generate_keypair(&mut rng); + + // 最小 SEC1 DER: SEQUENCE { INTEGER(1), OCTET STRING(32B) } + let mut sec1 = Vec::with_capacity(39); + sec1.extend_from_slice(&[ + 0x30, 0x25, // SEQUENCE, length 37 + 0x02, 0x01, 0x01, // INTEGER(1) version + 0x04, 0x20, // OCTET STRING, length 32 + ]); + sec1.extend_from_slice(pri_key.as_bytes()); + + let spki = public_key_to_spki_der(&pub_key); + (sec1, spki) +} + +/// 在内存中传输 TLS 记录(left → right) +fn transfer(left: &mut impl Connection, right: &mut impl Connection) -> usize { + let mut buf = [0u8; 65536]; + let mut total = 0; + while left.wants_write() { + let n = left.write_tls(&mut &mut buf[..]).unwrap(); + if n == 0 { + break; + } + total += n; + let mut offs = 0; + while offs < n { + offs += right.read_tls(&mut &buf[offs..n]).unwrap(); + } + } + total +} + +/// 驱动完整 TLS 握手 +fn do_handshake(client: &mut ClientConnection, server: &mut ServerConnection) { + while client.is_handshaking() || server.is_handshaking() { + transfer(client, server); + server.process_new_packets().unwrap(); + transfer(server, client); + client.process_new_packets().unwrap(); + } +} + +// ── 自定义 ServerVerifier(测试用,接受任意 SM2 Raw Public Key)────────────── + +#[derive(Debug)] +struct AcceptAllSm2ServerVerifier; + +impl AcceptAllSm2ServerVerifier { + fn new() -> Self { + Self + } +} + +impl ServerVerifier for AcceptAllSm2ServerVerifier { + fn verify_identity( + &self, + _identity: &ServerIdentity<'_>, + ) -> Result { + // Reason: 测试中不验证服务端身份(Raw Public Key 模式,无 CA 信任链) + Ok(PeerVerified::assertion()) + } + + fn verify_tls12_signature( + &self, + _input: &SignatureVerificationInput<'_>, + ) -> Result { + Err(rustls::Error::General("TLS 1.2 not supported".into())) + } + + fn verify_tls13_signature( + &self, + input: &SignatureVerificationInput<'_>, + ) -> Result { + // Reason: webpki 不支持 SM2 OID,直接调用 libsmx SM2 验签实现, + // 绕过 webpki 的 OID 匹配逻辑 + use rustls::SignerPublicKey; + let spki_der: &[u8] = match input.signer { + SignerPublicKey::RawPublicKey(spki) => spki.as_ref(), + _ => return Err(rustls::Error::General("expected Raw Public Key".into())), + }; + // SM2 SPKI 结构(91字节): + // SEQUENCE(2B) + AlgId SEQUENCE(21B) + BIT STRING tag+len+pad(3B) + 公钥(65B) + // 公钥从偏移 26 开始,共 65 字节 + if spki_der.len() != 91 { + return Err(rustls::Error::General(format!( + "unexpected SPKI length: {}", + spki_der.len() + ))); + } + let pub_key_bytes: &[u8; 65] = spki_der[26..91] + .try_into() + .map_err(|_| rustls::Error::General("bad pubkey slice".into()))?; + + let sig_der = input.signature.signature(); + let sig_raw = sig_from_der(sig_der) + .map_err(|_| rustls::Error::General("invalid DER signature".into()))?; + + verify_message(input.message, DEFAULT_ID, pub_key_bytes, &sig_raw) + .map(|_| HandshakeSignatureValid::assertion()) + .map_err(|_| rustls::Error::General("SM2 signature verification failed".into())) + } + + fn supported_verify_schemes(&self) -> Vec { + vec![SignatureScheme::SM2_SM3] + } + + fn request_ocsp_response(&self) -> bool { + false + } + + fn supported_certificate_types(&self) -> &'static [CertificateType] { + &[CertificateType::RawPublicKey] + } + + fn hash_config(&self, _: &mut dyn core::hash::Hasher) {} +} + +// ── 辅助:用 Raw Public Key 模式构建 server/client Config ──────────────────── + +fn make_configs( + provider: &CryptoProvider, + server_sec1: Vec, + server_spki: Vec, +) -> (ServerConfig, ClientConfig) { + // 服务端:用 new_unchecked 绕过 webpki 对 SM2 OID 的校验 + let server_key_der = pki_types::PrivateKeyDer::Sec1(PrivateSec1KeyDer::from(server_sec1)); + let server_signing_key = provider + .key_provider + .load_private_key(server_key_der) + .unwrap(); + let identity = Arc::new(rustls::crypto::Identity::RawPublicKey( + SubjectPublicKeyInfoDer::from(server_spki), + )); + // Reason: Credentials::new_unchecked 跳过 webpki 验证,因为 SM2 OID 尚未被 + // rustls-webpki 支持,但我们的 SignatureVerificationAlgorithm 实现是正确的 + let creds = rustls::crypto::Credentials::new_unchecked(identity, server_signing_key); + let cert_resolver = Arc::new(rustls::crypto::SingleCredential::from(creds)); + let server_config = ServerConfig::builder(provider.clone().into()) + .with_no_client_auth() + .with_server_credential_resolver(cert_resolver) + .unwrap(); + + // 客户端:自定义 verifier 跳过证书链校验 + let verifier = Arc::new(AcceptAllSm2ServerVerifier::new()); + let client_config = ClientConfig::builder(provider.clone().into()) + .dangerous() + .with_custom_certificate_verifier(verifier) + .with_no_client_auth() + .unwrap(); + + (server_config, client_config) +} + +// ── 测试用例 ────────────────────────────────────────────────────────────────── + +/// TLS 1.3 SM4-GCM-SM3 握手自回环(Raw Public Key 模式) +#[test] +fn test_tls13_sm4_gcm_sm3_handshake() { + let provider = rustls_provider::provider(); + let (server_sec1, server_spki) = make_sm2_keypair(); + let (server_config, client_config) = make_configs(&provider, server_sec1, server_spki); + + let server_name = ServerName::try_from("localhost").unwrap(); + let client_arc = Arc::new(client_config); + let mut client = client_arc.connect(server_name).build().unwrap(); + let mut server = ServerConnection::new(Arc::new(server_config)).unwrap(); + + do_handshake(&mut client, &mut server); + + assert_eq!( + client.negotiated_cipher_suite().unwrap().suite(), + CipherSuite::TLS13_SM4_GCM_SM3, + ); + + // server → client 数据传输 + let plaintext = b"Hello, SM2/SM4/SM3!"; + server.writer().write_all(plaintext).unwrap(); + transfer(&mut server, &mut client); + client.process_new_packets().unwrap(); + let mut received = vec![0u8; plaintext.len()]; + client.reader().read_exact(&mut received).unwrap(); + assert_eq!(received, plaintext.to_vec()); +} + +/// TLS 1.3 SM4-CCM-SM3 握手自回环 +#[test] +fn test_tls13_sm4_ccm_sm3_handshake() { + use std::borrow::Cow; + + static CCM_SUITES: &[&rustls::Tls13CipherSuite] = + &[libsmx::rustls_provider::tls13::TLS13_SM4_CCM_SM3]; + + let provider = CryptoProvider { + tls13_cipher_suites: Cow::Borrowed(CCM_SUITES), + ..rustls_provider::provider() + }; + + let (server_sec1, server_spki) = make_sm2_keypair(); + let (server_config, client_config) = make_configs(&provider, server_sec1, server_spki); + + let server_name = ServerName::try_from("localhost").unwrap(); + let client_arc = Arc::new(client_config); + let mut client = client_arc.connect(server_name).build().unwrap(); + let mut server = ServerConnection::new(Arc::new(server_config)).unwrap(); + + do_handshake(&mut client, &mut server); + + assert_eq!( + client.negotiated_cipher_suite().unwrap().suite(), + CipherSuite::TLS13_SM4_CCM_SM3, + ); + + // client → server 数据传输 + let msg = b"SM4-CCM test"; + client.writer().write_all(msg).unwrap(); + transfer(&mut client, &mut server); + server.process_new_packets().unwrap(); + let mut buf = vec![0u8; msg.len()]; + server.reader().read_exact(&mut buf).unwrap(); + assert_eq!(buf, msg.to_vec()); +} + +/// 验证握手后密钥交换组为 curveSM2 +#[test] +fn test_kx_group_is_curve_sm2() { + let provider = rustls_provider::provider(); + let (server_sec1, server_spki) = make_sm2_keypair(); + let (server_config, client_config) = make_configs(&provider, server_sec1, server_spki); + + let server_name = ServerName::try_from("localhost").unwrap(); + let client_arc = Arc::new(client_config); + let mut client = client_arc.connect(server_name).build().unwrap(); + let mut server = ServerConnection::new(Arc::new(server_config)).unwrap(); + + do_handshake(&mut client, &mut server); + + assert_eq!( + client + .negotiated_key_exchange_group() + .map(|g: &dyn rustls::crypto::kx::SupportedKxGroup| g.name()), + Some(rustls::crypto::kx::NamedGroup::curveSM2), + ); +} + +/// 双向数据传输(client ↔ server 各发一条消息) +#[test] +fn test_bidirectional_data_transfer() { + let provider = rustls_provider::provider(); + let (server_sec1, server_spki) = make_sm2_keypair(); + let (server_config, client_config) = make_configs(&provider, server_sec1, server_spki); + + let server_name = ServerName::try_from("localhost").unwrap(); + let client_arc = Arc::new(client_config); + let mut client = client_arc.connect(server_name).build().unwrap(); + let mut server = ServerConnection::new(Arc::new(server_config)).unwrap(); + + do_handshake(&mut client, &mut server); + + // client → server + let c2s = b"from client"; + client.writer().write_all(c2s).unwrap(); + transfer(&mut client, &mut server); + server.process_new_packets().unwrap(); + let mut buf = vec![0u8; c2s.len()]; + server.reader().read_exact(&mut buf).unwrap(); + assert_eq!(buf, c2s.to_vec()); + + // server → client + let s2c = b"from server"; + server.writer().write_all(s2c).unwrap(); + transfer(&mut server, &mut client); + client.process_new_packets().unwrap(); + let mut buf2 = vec![0u8; s2c.len()]; + client.reader().read_exact(&mut buf2).unwrap(); + assert_eq!(buf2, s2c.to_vec()); +}