#hashing #digest #no-alloc #unambiguous-encoding

无 std udigest

明确地摘要结构化数据

5 个版本

0.2.0 2024 年 6 月 19 日
0.2.0-rc32024 年 6 月 18 日
0.2.0-rc22024 年 6 月 17 日
0.2.0-rc12024 年 6 月 5 日
0.1.0 2023 年 11 月 24 日

算法 中排名 652

Download history 145/week @ 2024-05-03 231/week @ 2024-05-10 180/week @ 2024-05-17 96/week @ 2024-05-24 247/week @ 2024-05-31 252/week @ 2024-06-07 621/week @ 2024-06-14 175/week @ 2024-06-21 30/week @ 2024-06-28 108/week @ 2024-07-05 125/week @ 2024-07-12 85/week @ 2024-07-19 147/week @ 2024-07-26 146/week @ 2024-08-02 63/week @ 2024-08-09 54/week @ 2024-08-16

每月下载量 433
用于 7 crates

MIT/Apache

48KB
653

License Docs Crates io

明确地摘要结构化数据

udigest 提供了对结构化数据进行明确哈希的实用工具。结构化数据可以是实现了 Digestable 特性的任何内容

  • strStringCStrCString
  • 整数:i8i16i32i64i128u8u16u32u64u128charisizeusize
  • 容器:BoxArcRcCowOptionResult
  • 集合:数组、切片、VecLinkedListVecDequeBTreeSetBTreeMap

该特性有意不针对某些类型实现

  • HashMapHashSet,因为它们不能以确定性的顺序遍历

可以使用宏为结构体实现 Digestable 特性

#[derive(udigest::Digestable)]
struct Person {
    name: String,
    job_title: String,
}
let alice = Person {
    name: "Alice".into(),
    job_title: "cryptographer".into(),
};

let hash = udigest::hash::<sha2::Sha256>(&alice);

该软件包有意不遵循任何现有的无歧义编码标准。编码格式是为 udigest 设计的,以在 Rust 中提供更好的使用体验。编码格式的详细信息可以在 encoding 模块中找到。

特性

  • digest 支持实现了 digest 特性的哈希函数
    如果没有启用该功能,该软件包仍然可以通过 Digestable 特性进行使用,该特性以泛型方式实现了无歧义编码
  • 使用宏 inline_struct! 需要 inline-struct
  • std 为标准库中的类型实现了 Digestable 特性
  • allocalloc 包中的类型实现了 Digestable 特性
  • derive 启用 Digestable 过程宏

依赖项

约 270-450KB
约 11K SLoC