Packages

Ethereum blockchain client for Gleam

Current section

Files

Jump to
glethers src glethers@hash@message.erl
Raw

src/glethers@hash@message.erl

-module(glethers@hash@message).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([from_bit_array/1, to_bit_array/1, hash_message/1]).
-export_type([hash/0]).
-opaque hash() :: {hash, bitstring()}.
-spec from_bit_array(bitstring()) -> {ok, hash()} | {error, binary()}.
from_bit_array(Hash) ->
case erlang:byte_size(Hash) =:= 32 of
true ->
{ok, {hash, Hash}};
false ->
{error, <<"Invalid bit array length"/utf8>>}
end.
-spec to_bit_array(hash()) -> bitstring().
to_bit_array(Hash) ->
{hash, Hash@1} = Hash,
Hash@1.
-spec hash_message(binary()) -> hash().
hash_message(Message) ->
Message_prefix_bit_array = begin
_pipe = <<"\x{0019}Ethereum Signed Message:\n"/utf8>>,
gleam_stdlib:identity(_pipe)
end,
Message_length = begin
_pipe@1 = gleam@string:length(Message),
_pipe@2 = gleam@int:to_string(_pipe@1),
gleam_stdlib:identity(_pipe@2)
end,
Utf8_message = begin
_pipe@3 = Message,
gleam_stdlib:identity(_pipe@3)
end,
{hash,
'Elixir.ExKeccak':hash_256(
gleam_stdlib:bit_array_concat(
[Message_prefix_bit_array, Message_length, Utf8_message]
)
)}.