lib/salty/generichash_blake2b.ex

defmodule Salty.Generichash.Blake2b do
  use Salty.Generichash

  def bytes_min do
    C.generichash_blake2b_BYTES_MIN()
  end

  def bytes_max do
    C.generichash_blake2b_BYTES_MAX()
  end

  def bytes do
    C.generichash_blake2b_BYTES()
  end

  def keybytes_min do
    C.generichash_blake2b_KEYBYTES_MIN()
  end

  def keybytes_max do
    C.generichash_blake2b_KEYBYTES_MAX()
  end

  def keybytes do
    C.generichash_blake2b_KEYBYTES()
  end

  def saltbytes do
    C.generichash_blake2b_SALTBYTES()
  end

  def personalbytes do
    C.generichash_blake2b_PERSONALBYTES()
  end

  def hash(outlen, data) do
    C.generichash_blake2b(outlen, data)
  end

  def hash(outlen, data, key) do
    C.generichash_blake2b_key(outlen, data, key)
  end

  def hash(outlen, data, key, salt, personal) do
    C.generichash_blake2b_salt_personal(outlen, data, key, salt, personal)
  end

  def init(key, outlen) do
    C.generichash_blake2b_init(key, outlen)
  end

  def init(key, outlen, salt, personal) do
    C.generichash_blake2b_init_salt_personal(key, outlen, salt, personal)
  end

  def update(state, input) do
    C.generichash_blake2b_update(state, input)
  end

  def final(state, outlen) do
    C.generichash_blake2b_final(state, outlen)
  end

  def final_verify(_state, _expected) do
    :erlang.exit(:not_implemented)
  end

end