ehash

A library to consistently crypto-hash Erlang Terms with sha, sha256 or sha512 . The main motivation is that commutative data structures like maps are not hashed in order as was the case with e.g. hashing a simple sequential serialisation, but have the same hash value independant of order.

You can then create UUID5 using SHA1. Alternatively you can use return an hexadecimal binary.

Usage example

Eshell V9.1.5  (abort with ^G)
1> application:ensure_all_started(ehash).
{ok,[ehash]}
2>  H = ehash:hash(sha256, #{ a => 1 }).
<<13,86,247,170,179,248,122,230,138,99,213,177,26,88,93,
  97,183,174,147,247,65,187,215,110,99,32,224,85,61,...>>
3>  ehash:to_hex(H).
<<"0d56f7aab3f87ae68a63d5b11a585d61b7ae93f741bbd76e6320e0553ddcca6d">>
4> ehash:uuid5(#{ a => 1 }).
<<"7a5f7f92-bc08-5b25-998e-9500cea9b41e">>

Build

$ rebar3 compile