defmodule BinanceHttp.Digest do defstruct [:signature, :timestamp] def digest(secret_key, params) when is_map(params) do time = timestamp() bin_params = glue_params(Map.put(params, :timestamp, time)) signature = :hmac |> :crypto.mac(:sha256, secret_key, bin_params) |> Base.encode16(case: :lower) {signature, time} end def digest(_, _), do: {:error, :incorrect_params} defp glue_params(params) when is_map(params) do params |> Map.to_list() |> Enum.reduce("", fn({k, v}, result) -> result <> "&#{k}=#{v}" end) |> String.trim("&") end defp timestamp do DateTime.utc_now() |> DateTime.to_unix(:millisecond) end end