defmodule Kadena.Cryptography.Utils do @moduledoc """ Implementation for `Cryptography.Utils` functions. """ @type hash :: String.t() @type str :: String.t() @type key :: String.t() @type opts :: Keyword.t() @spec bin_to_hex(key_bin :: binary()) :: key() def bin_to_hex(key_bin), do: Base.encode16(key_bin, case: :lower) @spec hex_to_bin(key :: key()) :: binary() def hex_to_bin(key), do: Base.decode16!(key, case: :lower) @spec url_encode64(hash_bin :: binary()) :: hash() def url_encode64(hash_bin), do: Base.url_encode64(hash_bin, padding: false) @spec url_decode64(hash :: hash()) :: binary() def url_decode64(hash), do: Base.url_decode64!(hash, padding: false) @spec blake2b_hash(str :: str(), opts :: opts()) :: binary() def blake2b_hash(str, opts \\ []) def blake2b_hash(str, opts) do byte_size = Keyword.get(opts, :byte_size, 32) Blake2.hash2b(str, byte_size) end end