3个版本
0.1.2 | 2021年11月15日 |
---|---|
0.1.1 | 2020年5月4日 |
0.1.0 | 2020年5月4日 |
#1323 in 加密
每月263次下载
4.5MB
461 行
sha2-const
const fn
SHA-2系列哈希函数的实现。
此crate允许你在Rust中将SHA-2哈希函数用作常量表达式。对于所有其他用途,sha2
crate包含这些哈希函数的更多优化实现。
lib.rs
:
const fn
SHA-2系列哈希函数的实现。
此crate允许你在Rust中将SHA-2哈希函数用作常量表达式。对于所有其他用途,sha2
crate包含这些哈希函数的更多优化实现。
示例
在编译时计算比特币创世块的SHA-256哈希值
const VERSION: u32 = 1;
const HASH_PREV_BLOCK: [u8; 32] = [0; 32];
const HASH_MERKLE_ROOT: [u8; 32] = [
0x3b, 0xa3, 0xed, 0xfd, 0x7a, 0x7b, 0x12, 0xb2, 0x7a, 0xc7, 0x2c, 0x3e, 0x67, 0x76, 0x8f,
0x61, 0x7f, 0xc8, 0x1b, 0xc3, 0x88, 0x8a, 0x51, 0x32, 0x3a, 0x9f, 0xb8, 0xaa, 0x4b, 0x1e,
0x5e, 0x4a,
];
const TIME: u32 = 1231006505;
const BITS: u32 = 0x1d00ffff;
const NONCE: u32 = 0x7c2bac1d;
const BLOCK_HASH: [u8; 32] = Sha256::new()
.update(
&Sha256::new()
.update(&VERSION.to_le_bytes())
.update(&HASH_PREV_BLOCK)
.update(&HASH_MERKLE_ROOT)
.update(&TIME.to_le_bytes())
.update(&BITS.to_le_bytes())
.update(&NONCE.to_le_bytes())
.finalize(),
)
.finalize();
assert_eq!(
hex::encode(&BLOCK_HASH[..]),
"6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000"
);