11 releases
Uses new Rust 2024
| 0.3.1 | Dec 29, 2025 |
|---|---|
| 0.3.0 | Oct 24, 2025 |
| 0.2.4 | Oct 24, 2025 |
| 0.2.3 | Sep 24, 2025 |
| 0.1.0 | Nov 24, 2023 |
#229 in Cryptography
2,081 downloads per month
Used in 15 crates
(9 directly)
68KB
1K
SLoC
Unambiguously digest structured data
udigest provides utilities for unambiguous hashing the structured data. Structured
data can be anything that implements Digestable trait:
str,String,CStr,CString- Integers:
i8,i16,i32,i64,i128,u8,u16,u32,u64,u128,char,isize,usize - Containers:
Box,Arc,Rc,Cow,Option,Result - Collections: arrays, slices,
Vec,LinkedList,VecDeque,BTreeSet,BTreeMap
The trait is intentionally not implemented for certain types:
HashMap,HashSetas they can not be traversed in deterministic order
The Digestable trait can be implemented for the struct using a macro:
#[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);
The crate intentionally does not try to follow any existing standards for unambiguous
encoding. The format for encoding was designed specifically for udigest to provide
a better usage experience in Rust. The details of encoding format can be found in
encoding module.
Features
digestenables support of hash functions that implementdigesttraits
If feature is not enabled, the crate is still usable viaDigestabletrait that generically implements unambiguous encodinginline-structis required to useinline_struct!macrostdimplementsDigestabletrait for types in standard libraryallocimplementsDigestabletrait for type inalloccratederiveenablesDigestableproc macro
Join us in Discord!
Feel free to reach out to us in Discord!
Dependencies
~500–740KB
~18K SLoC