23 lines
540 B
Rust
23 lines
540 B
Rust
|
|
//! Fuzz target: SM3 一次性哈希与流式哈希必须一致
|
||
|
|
//!
|
||
|
|
//! 验证 Sm3::digest(data) == 逐字节 Sm3::update + finalize 的结果相同。
|
||
|
|
|
||
|
|
#![no_main]
|
||
|
|
|
||
|
|
use libfuzzer_sys::fuzz_target;
|
||
|
|
use sm3::Digest;
|
||
|
|
|
||
|
|
fuzz_target!(|data: &[u8]| {
|
||
|
|
// 一次性哈希
|
||
|
|
let hash1 = sm3::Sm3::digest(data);
|
||
|
|
|
||
|
|
// 流式哈希(逐字节)
|
||
|
|
let mut h = sm3::Sm3::new();
|
||
|
|
for byte in data {
|
||
|
|
h.update(&[*byte]);
|
||
|
|
}
|
||
|
|
let hash2 = h.finalize();
|
||
|
|
|
||
|
|
assert_eq!(hash1, hash2, "one-shot and streaming SM3 must agree");
|
||
|
|
});
|