Skerl is a project mainly written in C and ERLANG, it's free.
Skein hash function for Erlang, via NIFs
** Quick Start You must have [[http://erlang.org/download.html][Erlang/OTP R13B04]] or later and a GNU-style build system to compile and run =skerl=.
git clone git://github.com/basho/skerl.git cd skerl make
Start up an Erlang shell with the path to =skerl= included.
cd path/to/skerl/ebin erl
Hash a binary by calling =skerl:hash/2= with the desired number of bits for the resulting hash:
1> Bits = 256. 256 2> Data = <<"foobarbazquux">>. <<"foobarbazquux">> 3> {ok, Hash} = skerl:hash(Bits, Data). {ok,<<206,36,175,108,168,91,124,11,181,108,144,164,36, 216,130,110,241,197,98,180,65,120,56,225,1,255,54, ...>>} 4> bit_size(Hash). 256
You may find =skerl:hexhash/2= more useful, as it returns a hexadecimal-encoded string representing the hash:
5> HexHash = skerl:hexhash(Bits, Data).
<<"ce24af6ca85b7c0bb56c90a424d8826ef1c562b4417838e101ff3627dcc000bc">>
** The Skein Hash
The underlying hashing code in Skerl is the reference implementation of Skein from the official NIST submission.
Skein is a [[http://csrc.nist.gov/groups/ST/hash/sha-3/Round3/submissions_rnd3.html][finalist candidate in the NIST competition to become SHA-3]].
It is a hash function designed by Niels Ferguson, Stefan Lucks, Bruce Schneier, Doug Whiting, Mihir Bellare, Tadayoshi Kohno, Jon Callas, and Jesse Walker.
Details on the algorithm as submitted and known analysis can be found at [[http://ehash.iaik.tugraz.at/wiki/Skein][ecrypt]].
A [[http://www.schneier.com/skein1.3.pdf][full paper on Skein]] by the designers has been published.
The [[http://www.skein-hash.info/][official Skein page]] uses the headline:
Fast, Secure, Simple, Flexible, Efficient. And it rhymes with "rain."
** Contributing We encourage contributions to =skerl= from the community.
git clone [email protected]:yourusername/skerl.git
git remote add mine [email protected]:yourusername/skerl.git
git checkout -b some-topic-branch
git push mine some-topic-branch