Crate udigest

Source
Expand description

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!

Re-exports§

pub use encoding::Buffer;
pub use as_::DigestAs;

Modules§

as_
Provides utilities for custom digesting rules
encoding
Unambiguous encoding
inline_structinline-struct
Digestable inline structs

Macros§

inline_structinline-struct
Creates digestable inline struct

Structs§

Bytes
Wrapper for a bytestring

Traits§

Digestable
A value that can be unambiguously digested

Functions§

hashdigest
Digests a structured value using fixed-output hash function (like sha2-256)
hash_iterdigest
Digests a list of structured data using fixed-output hash function (like sha2-256)
hash_vofdigest
Digests a structured value using variable-output hash function (like blake2b)
hash_vof_iterdigest
Digests a list of structured data using variable-output hash function (like blake2b)
hash_xofdigest
Digests a structured value using extendable-output hash function (like shake-256)
hash_xof_iterdigest
Digests a list of structured data using extendable-output hash function (like shake-256)

Derive Macros§

Digestablederive
Derives a Digestable trait