lib/signing/psbt/keypair.ex

defmodule BitcoinLib.Signing.Psbt.Keypair do
  @moduledoc """
  Extracts a keypair from a binary according to the
  [specification](https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification)

  <keypair> := <key> <value>
  <key> := <keylen> <keytype> <keydata>
  <value> := <valuelen> <valuedata>
  """
  defstruct [:key, :value]

  alias BitcoinLib.Signing.Psbt.Keypair
  alias BitcoinLib.Signing.Psbt.Keypair.{Key, Value}

  # TODO: document
  def extract_from(data) do
    {key, data} = extract_key(data)
    {value, data} = extract_value(data)

    {%Keypair{key: key, value: value}, data}
  end

  defp extract_key(data), do: Key.extract_from(data)
  defp extract_value(data), do: Value.extract_from(data)
end