Files
huangxt 8ad52ecac0 准备发布 v0.1.0
- 添加 Apache-2.0 许可证
- 添加 CHANGELOG.md 变更日志
- 添加 SECURITY.md 安全策略
- 添加 README.zh-CN.md 中文文档
- 添加 rustfmt.toml 代码格式配置
- 添加 scripts/pre_publish_check.sh 发布检查脚本
- 更新 Cargo.toml 元数据(分类、关键词、文档链接)
- 完善 README.md 示例代码
- 优化 SM2/SM9 性能和测试覆盖率
2026-03-07 19:27:41 +08:00

63 lines
2.0 KiB
Rust
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! SM3 国标测试向量(GB/T 32905-2016 附录 A
//!
//! A.1 示例1:消息为 "abc"3 字节)
//! A.2 示例2:消息为 "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"64 字节)
use libsmx::sm3::Sm3Hasher;
/// GB/T 32905-2016 附录 A.1
/// 输入:M = "abc"
/// 预期:66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0
#[test]
fn test_sm3_vector_a1_abc() {
let msg = b"abc";
let digest = Sm3Hasher::digest(msg);
let expected =
hex::decode("66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0").unwrap();
assert_eq!(
digest.as_slice(),
expected.as_slice(),
"GB/T 32905 附录 A.1 失败"
);
}
/// GB/T 32905-2016 附录 A.2
/// 输入:M = "abcd" × 1664 字节)
/// 预期:debe9ff92275b8a138604889c18e5a4d6fdb70e5387e5765293dcba39c0c5732
#[test]
fn test_sm3_vector_a2_64bytes() {
let msg = b"abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd";
let digest = Sm3Hasher::digest(msg);
let expected =
hex::decode("debe9ff92275b8a138604889c18e5a4d6fdb70e5387e5765293dcba39c0c5732").unwrap();
assert_eq!(
digest.as_slice(),
expected.as_slice(),
"GB/T 32905 附录 A.2 失败"
);
}
/// 流式接口与单次接口结果一致性验证
#[test]
fn test_sm3_streaming_equals_oneshot() {
let msg = b"abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd";
let one_shot = Sm3Hasher::digest(msg);
let mut h = Sm3Hasher::new();
h.update(&msg[..32]);
h.update(&msg[32..]);
let streaming = h.finalize();
assert_eq!(one_shot, streaming, "流式与单次结果不一致");
}
/// 空消息哈希测试
/// SM3("") = 1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b
#[test]
fn test_sm3_empty_message() {
let digest = Sm3Hasher::digest(b"");
let expected =
hex::decode("1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b").unwrap();
assert_eq!(digest.as_slice(), expected.as_slice(), "SM3 空消息测试失败");
}