defmodule BitcoinLib.Signing.Psbt.Input.PartialSig do defstruct [:pub_key, :signature] @compressed_size 33 @uncompressed_size 65 alias BitcoinLib.Signing.Psbt.Input.PartialSig # TODO: document def parse(pub_key, signature) do %{pub_key: pub_key, signature: signature} |> validate_pub_key() |> create_partial_sig() end defp validate_pub_key(%{pub_key: pub_key} = map) do case byte_size(pub_key) do @compressed_size -> map @uncompressed_size -> map pub_key_size -> Map.put(map, :error, "wrong pub key size at #{pub_key_size}") end end defp create_partial_sig(%{error: _message} = map), do: map defp create_partial_sig(%{pub_key: pub_key, signature: signature} = map) do partial_sig = %PartialSig{ pub_key: pub_key, signature: signature } map |> Map.put(partial_sig, partial_sig) end end