Compare commits
5 Commits
be0607f7c1
...
c713053efd
| Author | SHA1 | Date | |
|---|---|---|---|
| c713053efd | |||
| 751c099a44 | |||
| 8a42f4a7a3 | |||
| a305bf3511 | |||
| f2fa83c215 |
@ -3,7 +3,7 @@
|
||||
{included_applications,[]},
|
||||
{applications,[stdlib,kernel]},
|
||||
{description,"Gajumaru interoperation library"},
|
||||
{vsn,"0.6.3"},
|
||||
{vsn,"0.7.0"},
|
||||
{modules,[hakuzaru,hz,hz_fetcher,hz_grids,hz_key_master,hz_man,
|
||||
hz_sup]},
|
||||
{mod,{hakuzaru,[]}}]}.
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
%%% @end
|
||||
|
||||
-module(hakuzaru).
|
||||
-vsn("0.6.3").
|
||||
-vsn("0.7.0").
|
||||
-author("Craig Everett <ceverett@tsuriai.jp>").
|
||||
-copyright("Craig Everett <ceverett@tsuriai.jp>").
|
||||
-license("GPL-3.0-or-later").
|
||||
|
||||
49
src/hz.erl
49
src/hz.erl
@ -23,7 +23,7 @@
|
||||
%%% @end
|
||||
|
||||
-module(hz).
|
||||
-vsn("0.6.3").
|
||||
-vsn("0.7.0").
|
||||
-author("Craig Everett <ceverett@tsuriai.jp>").
|
||||
-copyright("Craig Everett <ceverett@tsuriai.jp>").
|
||||
-license("GPL-3.0-or-later").
|
||||
@ -73,8 +73,8 @@
|
||||
decode_bytearray_fate/1, decode_bytearray/2,
|
||||
spend/5, spend/10,
|
||||
sign_tx/2, sign_tx/3,
|
||||
sign_message/2,
|
||||
verify_signature/3]).
|
||||
sign_message/2, verify_signature/3,
|
||||
sign_binary/2, verify_bin_signature/3]).
|
||||
|
||||
|
||||
%%% Types
|
||||
@ -2431,7 +2431,7 @@ spend3(DSenderID,
|
||||
Sig :: binary().
|
||||
|
||||
sign_message(Message, SecKey) ->
|
||||
Prefix = <<"Gajumaru Signed Message:\n">>,
|
||||
Prefix = message_sig_prefix(),
|
||||
{ok, PSize} = vencode(byte_size(Prefix)),
|
||||
{ok, MSize} = vencode(byte_size(Message)),
|
||||
Smashed = iolist_to_binary([PSize, Prefix, MSize, Message]),
|
||||
@ -2440,7 +2440,7 @@ sign_message(Message, SecKey) ->
|
||||
|
||||
|
||||
-spec verify_signature(Sig, Message, PubKey) -> Result
|
||||
when Sig :: binary(),
|
||||
when Sig :: string(), % base64 encoded signature,
|
||||
Message :: iodata(),
|
||||
PubKey :: pubkey(),
|
||||
Result :: {ok, Outcome :: boolean()}
|
||||
@ -2465,7 +2465,7 @@ verify_signature2(Sig, Message, PK) ->
|
||||
% the user from accidentally signing a transaction disguised as a message.
|
||||
%
|
||||
% Salt the message then hash with blake2b.
|
||||
Prefix = <<"Gajumaru Signed Message:\n">>,
|
||||
Prefix = message_sig_prefix(),
|
||||
{ok, PSize} = vencode(byte_size(Prefix)),
|
||||
{ok, MSize} = vencode(byte_size(Message)),
|
||||
Smashed = iolist_to_binary([PSize, Prefix, MSize, Message]),
|
||||
@ -2475,6 +2475,7 @@ verify_signature2(Sig, Message, PK) ->
|
||||
Result = ecu_eddsa:sign_verify_detached(Signature, Hashed, PK),
|
||||
{ok, Result}.
|
||||
|
||||
message_sig_prefix() -> <<"Gajumaru Signed Message:\n">>.
|
||||
|
||||
% This is Bitcoin's variable-length unsigned integer encoding
|
||||
% See: https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer
|
||||
@ -2502,6 +2503,42 @@ eu(N, Size) ->
|
||||
<<Bytes/binary, ExtraZeros/binary>>.
|
||||
|
||||
|
||||
-spec sign_binary(Binary, SecKey) -> Sig
|
||||
when Binary :: binary(),
|
||||
SecKey :: binary(),
|
||||
Sig :: binary().
|
||||
|
||||
sign_binary(Binary, SecKey) ->
|
||||
Prefix = binary_sig_prefix(),
|
||||
Target = <<Prefix/binary, Binary/binary>>,
|
||||
{ok, Hash} = eblake2:blake2b(32, Target),
|
||||
ecu_eddsa:sign_detached(Hash, SecKey).
|
||||
|
||||
|
||||
-spec verify_bin_signature(Sig, Binary, PubKey) -> Result
|
||||
when Sig :: string(), % base64 encoded signature,
|
||||
Binary :: binary(),
|
||||
PubKey :: pubkey(),
|
||||
Result :: {ok, Outcome :: boolean()}
|
||||
| {error, Reason :: term()}.
|
||||
|
||||
verify_bin_signature(Sig, Binary, PubKey) ->
|
||||
case gmser_api_encoder:decode(PubKey) of
|
||||
{account_pubkey, PK} -> verify_bin_signature2(Sig, Binary, PK);
|
||||
Other -> {error, {bad_key, Other}}
|
||||
end.
|
||||
|
||||
verify_bin_signature2(Sig, Binary, PK) ->
|
||||
Prefix = binary_sig_prefix(),
|
||||
Target = <<Prefix/binary, Binary/binary>>,
|
||||
{ok, Hash} = eblake2:blake2b(32, Target),
|
||||
Signature = base64:decode(Sig),
|
||||
Result = ecu_eddsa:sign_verify_detached(Signature, Hash, PK),
|
||||
{ok, Result}.
|
||||
|
||||
binary_sig_prefix() -> <<"Gajumaru Signed Binary:">>.
|
||||
|
||||
|
||||
%%% Debug functionality
|
||||
|
||||
% debug_network() ->
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
-module(hz_fetcher).
|
||||
-vsn("0.6.3").
|
||||
-vsn("0.7.0").
|
||||
-author("Craig Everett <ceverett@tsuriai.jp>").
|
||||
-copyright("Craig Everett <ceverett@tsuriai.jp>").
|
||||
-license("MIT").
|
||||
|
||||
@ -37,7 +37,7 @@
|
||||
%%% @end
|
||||
|
||||
-module(hz_grids).
|
||||
-vsn("0.6.3").
|
||||
-vsn("0.7.0").
|
||||
-export([url/2, parse/1, req/2, req/3]).
|
||||
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
%%% @end
|
||||
|
||||
-module(hz_key_master).
|
||||
-vsn("0.6.3").
|
||||
-vsn("0.7.0").
|
||||
|
||||
|
||||
-export([make_key/1, encode/1, decode/1]).
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
%%% @end
|
||||
|
||||
-module(hz_man).
|
||||
-vsn("0.6.3").
|
||||
-vsn("0.7.0").
|
||||
-behavior(gen_server).
|
||||
-author("Craig Everett <ceverett@tsuriai.jp>").
|
||||
-copyright("Craig Everett <ceverett@tsuriai.jp>").
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
%%% @end
|
||||
|
||||
-module(hz_sup).
|
||||
-vsn("0.6.3").
|
||||
-vsn("0.7.0").
|
||||
-behaviour(supervisor).
|
||||
-author("Craig Everett <zxq9@zxq9.com>").
|
||||
-copyright("Craig Everett <zxq9@zxq9.com>").
|
||||
|
||||
@ -2,9 +2,9 @@
|
||||
{type,app}.
|
||||
{modules,[]}.
|
||||
{prefix,"hz"}.
|
||||
{author,"Craig Everett"}.
|
||||
{desc,"Gajumaru interoperation library"}.
|
||||
{package_id,{"otpr","hakuzaru",{0,6,3}}}.
|
||||
{author,"Craig Everett"}.
|
||||
{package_id,{"otpr","hakuzaru",{0,7,0}}}.
|
||||
{deps,[{"otpr","sophia",{9,0,0}},
|
||||
{"otpr","gmserialization",{0,1,3}},
|
||||
{"otpr","gmbytecode",{3,4,1}},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user