auth(binary(), binary()) :: {:ok, binary()} | {:error, atom()}
bytes() :: non_neg_integer()
init(binary()) :: {:ok, binary()} | {:error, atom()}
keybytes() :: non_neg_integer()
verify(binary(), binary(), binary()) :: :ok | {:error, atom()}