-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] ) )}.