lib/cryptopunk/utils.ex

defmodule Cryptopunk.Utils do
  @moduledoc """
  Utility functions
  """

  alias Cryptopunk.Key

  @spec hmac_sha512(binary(), binary()) :: binary()
  def hmac_sha512(key, data) do
    :crypto.mac(:hmac, :sha512, key, data)
  end

  @spec compress_public_key(Key.t()) :: binary()
  def compress_public_key(%Key{key: key, type: :public}) do
    {:ok, compressed} = ExSecp256k1.public_key_compress(key)

    compressed
  end

  @spec decompress_public_key(binary()) :: binary()
  def decompress_public_key(key) do
    {:ok, decompressed} = ExSecp256k1.public_key_decompress(key)

    decompressed
  end

  @spec sha256_hash(binary()) :: binary()
  def sha256_hash(binary) do
    :crypto.hash(:sha256, binary)
  end

  @spec ripemd160_hash(binary()) :: binary()
  def ripemd160_hash(binary) do
    :crypto.hash(:ripemd160, binary)
  end
end