Fix multi-part signatures
Remove the signstate wrapper as it is not needed anyore.
This commit is contained in:
parent
a5e66ff204
commit
d850b16d1b
@ -649,7 +649,7 @@ sign_verify_detached(SIG, M, PK) ->
|
|||||||
false -> {error, failed_verification}
|
false -> {error, failed_verification}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-type sign_state() :: {signstate, reference()}.
|
-type sign_state() :: reference().
|
||||||
|
|
||||||
%% @doc sign_init/0 initialize a multi-part signature state.
|
%% @doc sign_init/0 initialize a multi-part signature state.
|
||||||
%%
|
%%
|
||||||
@ -665,7 +665,7 @@ sign_init() ->
|
|||||||
-spec sign_update(S, M) -> sign_state() | {error, sign_update_error}
|
-spec sign_update(S, M) -> sign_state() | {error, sign_update_error}
|
||||||
when S :: sign_state(),
|
when S :: sign_state(),
|
||||||
M :: iodata().
|
M :: iodata().
|
||||||
sign_update({signstate, SignState}, M) ->
|
sign_update(SignState, M) ->
|
||||||
enacl_nif:crypto_sign_update(SignState, M).
|
enacl_nif:crypto_sign_update(SignState, M).
|
||||||
|
|
||||||
|
|
||||||
@ -675,7 +675,7 @@ sign_update({signstate, SignState}, M) ->
|
|||||||
-spec sign_final_create(S, SK) -> {ok, binary()} | {error, atom()}
|
-spec sign_final_create(S, SK) -> {ok, binary()} | {error, atom()}
|
||||||
when S :: sign_state(),
|
when S :: sign_state(),
|
||||||
SK :: iodata().
|
SK :: iodata().
|
||||||
sign_final_create({signstate, SignState}, SK) ->
|
sign_final_create(SignState, SK) ->
|
||||||
enacl_nif:crypto_sign_final_create(SignState, SK).
|
enacl_nif:crypto_sign_final_create(SignState, SK).
|
||||||
|
|
||||||
%% @doc sign_final_verify/3 verify a chunked signature
|
%% @doc sign_final_verify/3 verify a chunked signature
|
||||||
@ -687,7 +687,7 @@ sign_final_create({signstate, SignState}, SK) ->
|
|||||||
when S :: sign_state(),
|
when S :: sign_state(),
|
||||||
SIG :: binary(),
|
SIG :: binary(),
|
||||||
PK :: iodata().
|
PK :: iodata().
|
||||||
sign_final_verify({signstate, SignState}, SIG, PK) ->
|
sign_final_verify(SignState, SIG, PK) ->
|
||||||
enacl_nif:crypto_sign_final_verify(SignState, SIG, PK).
|
enacl_nif:crypto_sign_final_verify(SignState, SIG, PK).
|
||||||
|
|
||||||
%% @private
|
%% @private
|
||||||
|
@ -42,7 +42,8 @@ groups() ->
|
|||||||
generichash_chunked,
|
generichash_chunked,
|
||||||
aead_xchacha20poly1305,
|
aead_xchacha20poly1305,
|
||||||
aead_chacha20poly1305,
|
aead_chacha20poly1305,
|
||||||
pwhash]},
|
pwhash,
|
||||||
|
sign]},
|
||||||
|
|
||||||
[Neg, Pos].
|
[Neg, Pos].
|
||||||
|
|
||||||
@ -121,3 +122,20 @@ pwhash(_Config) ->
|
|||||||
true = enacl:pwhash_str_verify(Str1, PW),
|
true = enacl:pwhash_str_verify(Str1, PW),
|
||||||
false = enacl:pwhash_str_verify(Str1, <<PW/binary, 1>>),
|
false = enacl:pwhash_str_verify(Str1, <<PW/binary, 1>>),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
sign(_Config) ->
|
||||||
|
#{public := PK, secret := SK} = enacl:sign_keypair(),
|
||||||
|
Msg = <<"Test">>,
|
||||||
|
State = enacl:sign_init(),
|
||||||
|
Create = sign_chunked(State, Msg, 10000),
|
||||||
|
{ok, Signature} = enacl:sign_final_create(Create, SK),
|
||||||
|
StateVerify = enacl:sign_init(),
|
||||||
|
Verify = sign_chunked(StateVerify, Msg, 10000),
|
||||||
|
ok = enacl:sign_final_verify(Verify, Signature, PK),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
sign_chunked(S, _M, 0) -> S;
|
||||||
|
sign_chunked(S, M, N) ->
|
||||||
|
S2 = enacl:sign_update(S, M),
|
||||||
|
sign_chunked(S2, M, N-1).
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user