1 个不稳定版本
0.1.0 | 2022 年 9 月 29 日 |
---|
#1982 在 加密学
24KB
471 行
fingerprint-struct
此crate允许计算加密哈希或任意数据结构。
它提供了一个表示可以计算哈希的类型特征的Fingerprint
。它为大多数来自std
的通用类型提供默认实现,例如原始类型如u32
或bool
,集合如Vec
或BTreeSet
,指针如Box
或Rc
或特殊类型如IpAddress
。它还提供了一个派生宏,该宏为任何结构体或枚举生成Fingerprint
实现。
它依赖于digest
crate中的特征,这意味着它与Rust Crypto项目的所有哈希实现兼容。
哈希被认为是稳定的,对给定数据结构哈希方式的更改将导致小版本号增加。请注意,更改自己的类型定义可能会引入哈希冲突。为了避免这种情况,您可以在数据结构中包含版本号。
安装
将以下行添加到Cargo.toml
[dependencies]
fingerprint-struct = "0.1.0"
或者运行
cargo add fingerprint-struct
示例
哈希字符串
use blake2::Blake2b512;
use fingerprint_struct::fingerprint;
use hex::ToHex;
let hash = fingerprint::<Blake2b512>("Hello world!");
let hash: String = hash.encode_hex_upper();
println!("{hash}");
哈希自定义数据结构
use blake2::Blake2b512;
use fingerprint_struct::{fingerprint, Fingerprint};
use hex::ToHex;
#[derive(Fingerprint, Default)]
struct Book {
title: String,
rating: f32,
authors: Vec<String>
}
let book = Book::default();
let hash = fingerprint::<Blake2b512>(book);
let hash: String = hash.encode_hex_upper();
println!("{hash}");
no_std
支持
此crate支持 no_std
环境。只需禁用默认的 std
功能
[dependencies]
fingerprint-struct = { version = "0.1.0", default-features = false, features = ["derive"] }
您还可以选择性地在支持 alloc
但不支持 std
的目标上启用 alloc
功能
[dependencies]
fingerprint-struct = { version = "0.1.0", default-features = false, features = ["alloc", "derive"] }
依赖关系
~265–540KB
~13K SLoC