defmodule ArweaveSdkEx.Utils.Crypto do
def sign(msg, jwk_json) do
# JOSE.JWK.from_binary(File.read!(file_path))
priv =
jwk_json
|> get_jwk_from_json()
|> jwk_to_priv()
do_sign(msg, priv)
end
def get_jwk_from_json(jwk_json) do
jwk_json
|> Poison.encode!()
|> JOSE.JWK.from_binary()
end
def jwk_to_priv(jwk) do
%JOSE.JWK{kty: {_, priv}} = jwk
priv
end
# TODO: pub to addr
def jwk_to_pub(jwk) do
%JOSE.JWK{kty: {_, pub}} = JOSE.JWK.to_public(jwk)
pub
end
def do_sign(msg, priv) do
:public_key.sign(
msg,
:sha256,
priv,
[rsa_padding: :rsa_pkcs1_pss_padding, rsa_pss_saltlen: -1]
)
end
def sha384(data), do: :crypto.hash(:sha384, data)
def sha256(data), do: :crypto.hash(:sha256, data)
def url_encode64(data), do: Base.url_encode64(data, padding: false)
def url_decode64(data), do: Base.url_decode64!(data, padding: false)
end