Files
libsmx/CHANGELOG.md
T
huangxt a7eaf413d9 添加性能基准测试数据
- README 添加 Benchmarks 章节,包含 SM3/SM4/SM2/SM9 性能数据
- CHANGELOG 同步更新基准测试性能基线
2026-03-07 20:23:16 +08:00

2.6 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.1.0 - 2025-03-07

Added

  • SM2 elliptic curve cryptography (GB/T 32918.1-5-2016)
    • Key generation, digital signature (with Z-value), public key encryption/decryption
    • Complete addition formulas for constant-time point operations
    • Fixed-window (w=4) base point scalar multiplication with precomputed table
    • Mixed Jacobian-Affine addition for optimized verification (Shamir's trick)
    • Point compression/decompression (GB/T 32918.1 section 4.2.10)
  • SM3 cryptographic hash (GB/T 32905-2016)
    • Streaming and one-shot hashing API
    • HMAC-SM3 with automatic key material zeroization
  • SM4 block cipher (GB/T 32907-2016)
    • Boolean circuit bitslice S-box (cache-timing resistant)
    • 8 modes of operation: ECB, CBC, OFB, CFB, CTR, GCM, CCM, XTS
    • GCM/CCM authenticated encryption with constant-time tag verification
  • SM9 identity-based cryptography (GB/T 38635.1-2-2020)
    • BN256 pairing (optimal Ate with Miller loop + final exponentiation)
    • Fp12 tower extension: Fp -> Fp2(u^2+2) -> Fp6(v^3-u) -> Fp12(w^2-v)
    • Identity-based signing and verification
    • Identity-based encryption and decryption
  • Unified Error enum with Display and conditional std::error::Error impl
  • no_std support with optional alloc and std features
  • #![forbid(unsafe_code)] enforced at crate level
  • Automatic private key zeroization via zeroize::ZeroizeOnDrop
  • GB/T standard test vectors for all algorithms
  • Criterion benchmarks for all algorithms with baseline performance data:
    • SM3: 374 MiB/s throughput (64 KiB)
    • SM4-ECB: 27 MiB/s throughput (64 KiB)
    • SM2 sign: 258 µs, verify: 316 µs
    • SM9 sign: 3.44 ms, verify: 5.50 ms

Security

  • GCM gf128_mul: replaced secret-dependent if branches with mask arithmetic
  • SM2 is_infinity: replaced short-circuit Iterator::all with ConstantTimeEq
  • SM2 add: replaced 3 conditional branches with complete addition formulas + conditional_select
  • SM2 double: replaced if is_infinity() with conditional_select
  • HMAC-SM3: added zeroize for k_pad/ipad/opad key material on stack
  • CCM: reject AAD > 510 bytes instead of silently skipping
  • XTS: reject non-16-byte-aligned input instead of silently truncating
  • SM9 hash_to_range: replaced variable-iteration while loop with constant-time conditional select