1%% -*- mode: erlang; tab-width: 4; indent-tabs-mode: 1; st-rulers: [70] -*- 2%% vim: ts=4 sw=4 ft=erlang noet 3-module(jose_jwa_curve448_props). 4 5-include_lib("public_key/include/public_key.hrl"). 6 7-include_lib("proper/include/proper.hrl"). 8 9% -compile(export_all). 10 11eddsa_secret() -> 12 binary(57). 13 14eddsa_keypair(Secret) -> 15 {PK, SK} = jose_curve448:eddsa_keypair(Secret), 16 {SK, PK}. 17 18x448_secret() -> 19 binary(56). 20 21x448_keypair(Secret) -> 22 {PK, SK} = jose_curve448:x448_keypair(Secret), 23 {SK, PK}. 24 25eddsa_keypair_gen() -> 26 ?LET(Secret, 27 eddsa_secret(), 28 eddsa_keypair(Secret)). 29 30prop_eddsa_secret_to_public() -> 31 ?FORALL({<< Secret:57/binary, _/binary >>, PK}, 32 eddsa_keypair_gen(), 33 begin 34 PK =:= jose_jwa_curve448:eddsa_secret_to_public(Secret) 35 end). 36 37prop_ed448_sign_and_verify() -> 38 ?FORALL({{SK, PK}, M}, 39 {eddsa_keypair_gen(), binary()}, 40 begin 41 S = jose_jwa_curve448:ed448_sign(M, SK), 42 jose_jwa_curve448:ed448_verify(S, M, PK) 43 end). 44 45prop_ed448ph_sign_and_verify() -> 46 ?FORALL({{SK, PK}, M}, 47 {eddsa_keypair_gen(), binary()}, 48 begin 49 S = jose_jwa_curve448:ed448ph_sign(M, SK), 50 jose_jwa_curve448:ed448ph_verify(S, M, PK) 51 end). 52 53x448_keypair_gen() -> 54 ?LET(Secret, 55 x448_secret(), 56 x448_keypair(Secret)). 57 58x448_keypairs_gen() -> 59 ?LET({AliceSecret, BobSecret}, 60 {x448_secret(), x448_secret()}, 61 {x448_keypair(AliceSecret), x448_keypair(BobSecret)}). 62 63prop_x448_secret_to_public() -> 64 ?FORALL({SK, PK}, 65 x448_keypair_gen(), 66 begin 67 PK =:= jose_jwa_curve448:x448_secret_to_public(SK) 68 end). 69 70prop_x448_shared_secret() -> 71 ?FORALL({{AliceSK, AlicePK}, {BobSK, BobPK}}, 72 x448_keypairs_gen(), 73 begin 74 K = jose_jwa_curve448:x448_shared_secret(AliceSK, BobPK), 75 K =:= jose_jwa_curve448:x448_shared_secret(BobSK, AlicePK) 76 end). 77