Skip to content

fdopen/cryptohash

Repository files navigation

Cryptohash

Cryptohash provides OCaml bindings to various cryptographic hash functions.

Travis build Status AppVeyor Build Status

The following functions are supported:

  • SHA-1
  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  • SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512)
  • Whirlpool
  • Ripemd-160 and Ripemd-128
  • MD2, MD4, and MD5
  • Tiger and Tiger2

The hash algorithms are implemented in C for performance reasons. Currently, the implementation provided by the project saphir is used (sphlib-3, slightly modified for the latest change in the sha-3 draft)

Both sphlib and the bindings are distributed under a MIT style license. Consult the LICENSE* files in the root folder for details.

The bindings follow the interface of the Digest module included in the OCaml standard library and ocaml-sha.

Usually, the bindings are independent of each other. There are separate libraries and findlib packages for each hash function. You need the findlib package cryptohash.sha512 for sha-512, cryptohash.sha3-224 for sha3-224 and so forth.

Installation

Requirements

  • findlib > 1.5 (for building and possibly the bytes module)
  • oUnit >= 2 (build only)
  • omake (build only)
  • ocaml >= 4

Building the library

If you checkout from git, you first need to create the configure script:

cd src
autoconf

Then run omake from the root folder:

omake all

You can disable or enable native code generation with:

omake all NATIVE_ENABLED=false
omake all NATIVE_ENABLED=true

The default depend on your omake configuration.

Building documentation

omake doc

Test cases

A small selection of test cases are run during the build process.

All test cases can be run with the test target:

omake test

omake test creates and run a test program that compares the result of its own computations with public test vectors.

Another possibility is it to specify the target exttest:

omake exttest

The tool generated by exttest searches for external commands in your PATH that can be used to compute hash digests (openssl, gpg, md5sum , sha256sum, jacksum , rhash, sha1sum, ...). Then it generates random data, compute its checksums and tests if the external tools report the same checksum.

Installation

omake install

Documentation

Documentation can be found in the mli files and the html files generated by ocamldoc.

Differences to ocaml-sha

Cryptohash was intend as replacement for ocaml-sha. There are however small differences:

  • Some execeptions have been changed. The bindings now always follow the convention of Digest. Invalid_arg is thrown, if you don't designate a valid substring / subbuffer; Sys_error is thrown in case of an i/o error.
  • finalize resets the context.
  • the type buf was changed from
  type buf = (int,Bigarray.int8_unsigned_elt,Bigarray.c_layout) Bigarray.Array1.t

to

  type buf = (char,Bigarray.int8_unsigned_elt,Bigarray.c_layout) Bigarray.Array1.t
  • zero has been removed.
  • input and output now have the same semantic as Digest.input and Digest.output

If your code doesn't depend on these details, you can use the findlib package cryptohash.legacy as drop in replacement for sha.

About

wrappers around various cryptographic hash functions

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages