Current section

Files

Jump to
ex_secrets lib aws_secrets_manager utils.ex
Raw

lib/aws_secrets_manager/utils.ex

defmodule ExSecrets.AwsSecretsManager.Auth.Utils do
@moduledoc false
alias ExSecrets.AwsSecretsManager.Request.Url
def uri_encode(url), do: Url.uri_encode(url)
def hash_sha256(data) do
:sha256
|> :crypto.hash(data)
|> bytes_to_hex
end
Code.ensure_loaded?(:crypto) || IO.warn(":crypto module failed to load")
case function_exported?(:crypto, :mac, 4) do
true ->
def hmac_sha256(key, data), do: :crypto.mac(:hmac, :sha256, key, data)
false ->
def hmac_sha256(key, data), do: :crypto.hmac(:sha256, key, data)
end
def bytes_to_hex(bytes) do
bytes
|> Base.encode16(case: :lower)
end
def service_name(service), do: service |> Atom.to_string()
def method_string(method) do
method
|> Atom.to_string()
|> String.upcase()
end
def date({date, _time}) do
date |> quasi_iso_format
end
def amz_date({date, time}) do
date = date |> quasi_iso_format
time = time |> quasi_iso_format
[date, "T", time, "Z"]
|> IO.iodata_to_binary()
end
def quasi_iso_format({y, m, d}) do
[y, m, d]
|> Enum.map(&Integer.to_string/1)
|> Enum.map(&zero_pad/1)
end
defp zero_pad(<<_>> = val), do: "0" <> val
defp zero_pad(val), do: val
end