7 releases

0.2.2 Sep 26, 2024
0.2.1 Aug 26, 2024
0.2.0 Jun 19, 2024
0.1.0 Nov 24, 2023

#542 in Cryptography

Download history 69/week @ 2024-08-16 379/week @ 2024-08-23 121/week @ 2024-08-30 68/week @ 2024-09-06 113/week @ 2024-09-13 338/week @ 2024-09-20 746/week @ 2024-09-27 1873/week @ 2024-10-04 1886/week @ 2024-10-11 637/week @ 2024-10-18 271/week @ 2024-10-25 374/week @ 2024-11-01 317/week @ 2024-11-08 475/week @ 2024-11-15 530/week @ 2024-11-22 466/week @ 2024-11-29

1,832 downloads per month
Used in 8 crates (7 directly)

MIT/Apache

63KB
961 lines

License Docs Crates io Discord

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, HashSet as 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

  • digest enables support of hash functions that implement digest traits
    If feature is not enabled, the crate is still usable via Digestable trait that generically implements unambiguous encoding
  • inline-struct is required to use inline_struct! macro
  • std implements Digestable trait for types in standard library
  • alloc implements Digestable trait for type in alloc crate
  • derive enables Digestable proc macro

Join us in Discord!

Feel free to reach out to us in Discord!

Dependencies

~270–440KB
~11K SLoC