lib/aptos/signing_key.ex

defmodule Web3MoveEx.Aptos.SigningKey do
  @moduledoc """
  An Ed25519 keypair.
  """

  import Web3MoveEx.Aptos.Helpers

  defstruct [:private_key, :public_key]

  def new() do
    {public_key, private_key} = ed25519_new()

    {:ok,
     %__MODULE__{
       private_key: private_key,
       public_key: public_key
     }}
  end

  def new(private_key) do
    with {:ok, private_key} <- normalize_key(private_key) do
      public_key = ed25519_public_key(private_key)

      {:ok,
       %__MODULE__{
         private_key: private_key,
         public_key: public_key
       }}
    end
  end

  defimpl Inspect do
    import Inspect.Algebra

    def inspect(%{public_key: public_key}, _opts) do
      concat(["#Key<", to_hex(public_key), ">"])
    end
  end

  defimpl String.Chars do
    def to_string(%{public_key: public_key}) do
      to_hex(public_key)
    end
  end
end