From 4b4ec373b1bf2cab5bebc928e7ef3fc662883c85 Mon Sep 17 00:00:00 2001 From: Jesper Louis Andersen Date: Tue, 9 Jun 2020 13:34:03 +0200 Subject: [PATCH] Test pwhash in EQC. --- eqc_test/enacl_eqc.erl | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/eqc_test/enacl_eqc.erl b/eqc_test/enacl_eqc.erl index 70110eb..38464b4 100644 --- a/eqc_test/enacl_eqc.erl +++ b/eqc_test/enacl_eqc.erl @@ -761,6 +761,13 @@ pwhash(Passwd, Salt) -> error:badarg -> badarg end. +pwhash(Password, Salt, Ops, Mem, Alg) -> + try + enacl:pwhsah(Password, Salt, Ops, Mem, Alg) + catch + error:badarg -> badarg + end. + pwhash_str(Passwd) -> try enacl:pwhash_str(Passwd) @@ -775,11 +782,25 @@ pwhash_str_verify(PasswdHash, Passwd) -> error:badarg -> badarg end. +prop_pwhash() -> + ?FORALL({Password, Salt, OLimit, MLimit, Alg}, + {binary(16), + binary(16), + elements([interactive, moderate]), %% These could add senstitive, but are too runtime-expensive + elements([interactive, moderate]), %% And that is for a reason. + elements([default, 'argon2id13'])}, %% Argon2I13 uses different limits, so it is kept out as + %% this would otherwise fail + begin + Bin1 = enacl:pwhash(Password, Salt, OLimit, MLimit, Alg), + Bin2 = enacl:pwhash(Password, Salt, OLimit, MLimit, Alg), + equals(Bin1, Bin2) + end). + prop_pwhash_str_verify() -> ?FORALL({Passwd, OLimit, MLimit}, {?FAULT_RATE(1, 40, g_iodata()), - elements([interactive, moderate, sensitive]), - elements([interactive, moderate, sensitive])}, + elements([interactive, moderate]), + elements([interactive, moderate])}, begin case v_iodata(Passwd) of true ->