lib/salty/kx.ex

defmodule Salty.Kx do
  defmacro __using__(_opts) do
    quote do
      @behaviour Salty.Kx
      alias Salty.Nif, as: C
    end
  end

  def primitive do
    Salty.Kx.X25519blake2b
  end

  @callback publickeybytes() :: pos_integer()

  @callback secretkeybytes() :: pos_integer()

  @callback seedbytes() :: pos_integer()

  @callback sessionkeybytes() :: pos_integer()

  @callback seed_keypair(binary()) :: {:ok, binary(), binary()} | {:error, atom()}

  @callback keypair() :: {:ok, binary(), binary()} | {:error, atom()}

  @callback client_session_keys(binary(), binary(), binary()) :: {:ok, binary(), binary()} | {:error, atom()}

  @callback server_session_keys(binary(), binary(), binary()) :: {:ok, binary(), binary()} | {:error, atom()}

end