README.md

# ScryptElixir

[![ScryptElixir](https://circleci.com/gh/christianjgreen/scrypt_elixir.svg?style=shield)](https://circleci.com/gh/christianjgreen/scrypt_elixir)

Elixir wrapper for the Scrypt key derivation function. 
https://www.tarsnap.com/scrypt.html

## Usage

This library provides raw scrypt hashing functionality as well as an implementation of the original suggested KDF.

* `hash/6` is a lower level function that allows for a custom salt length and derived key length. The result is the raw binary scrypt hash. This function allows for custom salts and derived key lengths.
* `kdf/4` is a function that creates an Scrypt header that utilizes HMAC to ensure hash integrity. This implementation enforces a 32 byte salt length and 64 byte derived key length.
* `kdf/5` creates an Scrypt header, but allows for a custom 32 byte salt.
* `verify?/6` validates an Scrypt hash using the supplied parameters, returning a boolean.
* `verify_kdf?/2` validates an Scrypt header using the supplied password.

Both functions rely on a core set of parameters:
* `password` - the core binary being hashed
* `salt` - a pseudo-randomly generated string of bytes used for hashing
* `logN` - exponent for CPU/memory cost (2^logN)
* `r` - blocksize

## Installation

The package can be installed by adding `scrypt_elixir` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:scrypt_elixir, "~> 0.1.0"}
  ]
end
```

Documentation can be found at [https://hexdocs.pm/scrypt_elixir](https://hexdocs.pm/scrypt_elixir).