Packages

Ethereum blockchain client for Gleam

Current section

Files

Jump to
glethers src glethers@signer.erl
Raw

src/glethers@signer.erl

-module(glethers@signer).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([sign_hash/2, sign_typed_data/4, sign_message/2, verify_signature/3]).
-export_type([signer/0]).
-type signer() :: {signer,
glethers@provider:provider(),
glethers@signer@signing_key:private_key()}.
-spec sign_hash(
glethers@signer@signing_key:private_key(),
glethers@hash@message:hash()
) -> secp256k1_gleam:signature().
sign_hash(Private_key, Hash) ->
Private_key@1 = begin
_pipe = Private_key,
glethers@signer@signing_key:to_bit_array(_pipe)
end,
Message = begin
_pipe@1 = Hash,
glethers@hash@message:to_bit_array(_pipe@1)
end,
_assert_subject = secp256k1_gleam:sign(Message, Private_key@1),
{ok, Signature} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"glethers/signer"/utf8>>,
function => <<"sign_hash"/utf8>>,
line => 17})
end,
Signature.
-spec sign_typed_data(
glethers@signer@signing_key:private_key(),
glethers@hash@typed_data:typed_data_domain(),
HVV,
fun((HVV) -> {binary(),
list({binary(), glethers@hash@typed_data:complex_field()})})
) -> secp256k1_gleam:signature().
sign_typed_data(Private_key, Domain, Struct, Encoder) ->
Hash = glethers@hash@typed_data:hash_message(Domain, Struct, Encoder),
sign_hash(Private_key, Hash).
-spec sign_message(glethers@signer@signing_key:private_key(), binary()) -> secp256k1_gleam:signature().
sign_message(Private_key, Message) ->
Hash = glethers@hash@message:hash_message(Message),
sign_hash(Private_key, Hash).
-spec verify_signature(
glethers@signer@signing_key:private_key(),
binary(),
secp256k1_gleam:signature()
) -> boolean().
verify_signature(Private_key, Message, Signature) ->
Private_key@1 = begin
_pipe = Private_key,
glethers@signer@signing_key:to_bit_array(_pipe)
end,
_assert_subject = 'Elixir.ExSecp256k1':create_public_key(Private_key@1),
{ok, Public_key} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"glethers/signer"/utf8>>,
function => <<"verify_signature"/utf8>>,
line => 42})
end,
Hash = begin
_pipe@1 = glethers@hash@message:hash_message(Message),
glethers@hash@message:to_bit_array(_pipe@1)
end,
case secp256k1_gleam:verify(Hash, Signature, Public_key) of
{ok, _} ->
true;
{error, _} ->
false
end.