1 个不稳定版本

0.1.0 2022 年 9 月 29 日

#1982加密学

MIT/Apache

24KB
471

fingerprint-struct

此crate允许计算加密哈希或任意数据结构。

它提供了一个表示可以计算哈希的类型特征的Fingerprint。它为大多数来自std的通用类型提供默认实现,例如原始类型如u32bool,集合如VecBTreeSet,指针如BoxRc或特殊类型如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