forked from QPQ-AG/enoise
WIP: Reorientation
This commit is contained in:
@@ -1,56 +0,0 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
-module(enoise_sym_state_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
noise_XK_25519_ChaChaPoly_Blake2b_test() ->
|
||||
Protocol = enoise_protocol:from_name("Noise_XK_25519_ChaChaPoly_BLAKE2b"),
|
||||
|
||||
SSE0 = enoise_sym_state:init(Protocol),
|
||||
SSD0 = enoise_sym_state:init(Protocol),
|
||||
|
||||
Name = enoise_protocol:to_name(Protocol),
|
||||
PadName = enoise_crypto:pad(Name, enoise_crypto:hashlen(blake2b), 0),
|
||||
|
||||
?assertMatch(PadName, enoise_sym_state:h(SSE0)),
|
||||
?assertMatch(PadName, enoise_sym_state:ck(SSE0)),
|
||||
?assertMatch(false, enoise_cipher_state:has_key(enoise_sym_state:cipher_state(SSE0))),
|
||||
|
||||
TestBin = h2b("0x6162636465666768696A6B6C6D6E6F707172737475767778797A"),
|
||||
SSE1 = enoise_sym_state:mix_hash(SSE0, TestBin),
|
||||
SSD1 = enoise_sym_state:mix_hash(SSD0, TestBin),
|
||||
|
||||
ExpHash1 = enoise_crypto:hash(blake2b, <<PadName/binary, TestBin/binary>>),
|
||||
ExpHash2 = h2b("0x8DC23DE176F6B3581FB7E18F258A47B1E1A8090BF55978868F1AC88C672DC3918FA4D1828338FB5DF652F5C33D57C79537CB5D074057EF59C346D0B35A160F71"),
|
||||
?assertMatch(ExpHash1, enoise_sym_state:h(SSE1)),
|
||||
?assertMatch(ExpHash2, enoise_sym_state:h(SSD1)),
|
||||
|
||||
{ok, SSE2, TestBin} = enoise_sym_state:encrypt_and_hash(SSE1, TestBin),
|
||||
{ok, SSD2, TestBin} = enoise_sym_state:decrypt_and_hash(SSD1, TestBin),
|
||||
|
||||
SSE3 = enoise_sym_state:mix_key(SSE2, TestBin),
|
||||
SSD3 = enoise_sym_state:mix_key(SSD2, TestBin),
|
||||
|
||||
ExpEncrypt = h2b("0x24FB13758E6BA9901A4CEA117AE1D9AF757B02CAE96EFDFDA5ED3927BDD9FEA0239F7F673E924AAE81E6"),
|
||||
{ok, SSE4, Encrypt} = enoise_sym_state:encrypt_and_hash(SSE3, TestBin),
|
||||
?assertMatch(ExpEncrypt, Encrypt),
|
||||
{ok, SSD4, Decrypt} = enoise_sym_state:decrypt_and_hash(SSD3, ExpEncrypt),
|
||||
?assertMatch(TestBin, Decrypt),
|
||||
|
||||
Key1 = h2b("0x893FD190EDB611D9AF73868C8AB020F7A13C62F70F7F74C46859CF4A1E71BB74"),
|
||||
Key2 = h2b("0x492E210AD0181CE70BF9CE80308DE45EAE1FA76E1ACE22A829EF6F1A01C6E2C8"),
|
||||
|
||||
{CSE1, CSE2} = enoise_sym_state:split(SSE4),
|
||||
?assertMatch(Key1, enoise_cipher_state:key(CSE1)),
|
||||
?assertMatch(Key2, enoise_cipher_state:key(CSE2)),
|
||||
|
||||
{CSD1, CSD2} = enoise_sym_state:split(SSD4),
|
||||
?assertMatch(Key1, enoise_cipher_state:key(CSD1)),
|
||||
?assertMatch(Key2, enoise_cipher_state:key(CSD2)),
|
||||
|
||||
ok.
|
||||
|
||||
h2b(S) -> test_utils:hex_str_to_bin(S).
|
||||
+1
-1
@@ -123,5 +123,5 @@ noise_test_filter(Tests0) ->
|
||||
Tests1.
|
||||
|
||||
supported(Name) ->
|
||||
try enoise_protocol:from_name(Name), true
|
||||
try znoise_protocol:from_name(Name), true
|
||||
catch _:_ -> false end.
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
-module(enoise_bad_data_tests).
|
||||
-module(znoise_bad_data_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
bad_data_hs_1_test() ->
|
||||
SrvKeyPair = enoise_keypair:new(dh25519),
|
||||
Proto = enoise_protocol:to_name(xk, dh25519, 'ChaChaPoly', blake2b),
|
||||
SrvKeyPair = znoise_keypair:new(dh25519),
|
||||
Proto = znoise_protocol:to_name(xk, dh25519, 'ChaChaPoly', blake2b),
|
||||
Opts = [{echos, 1}, {reply, self()}],
|
||||
Srv = enoise_utils:echo_srv_start(4567, Proto, SrvKeyPair, Opts),
|
||||
Srv = znoise_utils:echo_srv_start(4567, Proto, SrvKeyPair, Opts),
|
||||
|
||||
bad_client(4567),
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
-module(enoise_chiper_state_tests).
|
||||
-module(znoise_chiper_state_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
@@ -13,26 +13,26 @@ chachapoly_test() ->
|
||||
CTLen = byte_size(CipherText),
|
||||
MACLen = byte_size(MAC),
|
||||
|
||||
CS0 = enoise_cipher_state:init(Key, 'ChaChaPoly'),
|
||||
CS1 = enoise_cipher_state:set_nonce(CS0, Nonce),
|
||||
CS0 = znoise_cipher_state:init(Key, 'ChaChaPoly'),
|
||||
CS1 = znoise_cipher_state:set_nonce(CS0, Nonce),
|
||||
|
||||
{ok, _CS2, <<CipherText0:CTLen/binary, MAC0:MACLen/binary>>} =
|
||||
enoise_cipher_state:encrypt_with_ad(CS1, AD, PlainText),
|
||||
znoise_cipher_state:encrypt_with_ad(CS1, AD, PlainText),
|
||||
|
||||
?assertMatch(CipherText, CipherText0),
|
||||
?assertMatch(MAC, MAC0),
|
||||
|
||||
{ok, _CS3, <<PlainText0:PTLen/binary>>} =
|
||||
enoise_cipher_state:decrypt_with_ad(CS1, AD, <<CipherText/binary, MAC/binary>>),
|
||||
znoise_cipher_state:decrypt_with_ad(CS1, AD, <<CipherText/binary, MAC/binary>>),
|
||||
|
||||
?assertMatch(PlainText, PlainText0),
|
||||
|
||||
% rekey test
|
||||
CS4 = enoise_cipher_state:rekey(CS1),
|
||||
CS4 = znoise_cipher_state:rekey(CS1),
|
||||
{ok, _CS5, <<CipherText1:CTLen/binary, MAC1:MACLen/binary>>} =
|
||||
enoise_cipher_state:encrypt_with_ad(CS4, AD, PlainText),
|
||||
znoise_cipher_state:encrypt_with_ad(CS4, AD, PlainText),
|
||||
{ok, _CS6, <<PlainText1:PTLen/binary>>} =
|
||||
enoise_cipher_state:decrypt_with_ad(CS4, AD, <<CipherText1/binary, MAC1/binary>>),
|
||||
znoise_cipher_state:decrypt_with_ad(CS4, AD, <<CipherText1/binary, MAC1/binary>>),
|
||||
?assertMatch(PlainText, PlainText1),
|
||||
|
||||
ok.
|
||||
@@ -2,25 +2,25 @@
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
-module(enoise_crypto_tests).
|
||||
-module(znoise_crypto_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
curve25519_test() ->
|
||||
KeyPair1 = enoise_keypair:new(dh25519),
|
||||
KeyPair2 = enoise_keypair:new(dh25519),
|
||||
KeyPair1 = znoise_keypair:new(dh25519),
|
||||
KeyPair2 = znoise_keypair:new(dh25519),
|
||||
|
||||
SharedA = enoise_crypto:dh(dh25519, KeyPair1, KeyPair2),
|
||||
SharedB = enoise_crypto:dh(dh25519, KeyPair2, KeyPair1),
|
||||
SharedA = znoise_crypto:dh(dh25519, KeyPair1, KeyPair2),
|
||||
SharedB = znoise_crypto:dh(dh25519, KeyPair2, KeyPair1),
|
||||
?assertMatch(SharedA, SharedB),
|
||||
|
||||
#{ a_pub := APub, a_priv := APriv,
|
||||
b_pub := BPub, b_priv := BPriv, shared := Shared } = test_utils:curve25519_data(),
|
||||
|
||||
KeyPair3 = enoise_keypair:new(dh25519, APriv, APub),
|
||||
KeyPair4 = enoise_keypair:new(dh25519, BPriv, BPub),
|
||||
?assertMatch(Shared, enoise_crypto:dh(dh25519, KeyPair3, KeyPair4)),
|
||||
?assertMatch(Shared, enoise_crypto:dh(dh25519, KeyPair4, KeyPair3)),
|
||||
KeyPair3 = znoise_keypair:new(dh25519, APriv, APub),
|
||||
KeyPair4 = znoise_keypair:new(dh25519, BPriv, BPub),
|
||||
?assertMatch(Shared, znoise_crypto:dh(dh25519, KeyPair3, KeyPair4)),
|
||||
?assertMatch(Shared, znoise_crypto:dh(dh25519, KeyPair4, KeyPair3)),
|
||||
|
||||
ok.
|
||||
|
||||
@@ -35,43 +35,43 @@ chachapoly_test() ->
|
||||
?assert(PTLen == CTLen),
|
||||
|
||||
<<CipherText0:CTLen/binary, MAC0:MACLen/binary>> =
|
||||
enoise_crypto:encrypt('ChaChaPoly', Key, Nonce, AD, PlainText),
|
||||
znoise_crypto:encrypt('ChaChaPoly', Key, Nonce, AD, PlainText),
|
||||
|
||||
?assertMatch(CipherText, CipherText0),
|
||||
?assertMatch(MAC, MAC0),
|
||||
|
||||
<<PlainText0:PTLen/binary>> =
|
||||
enoise_crypto:decrypt('ChaChaPoly', Key, Nonce, AD, <<CipherText/binary, MAC/binary>>),
|
||||
znoise_crypto:decrypt('ChaChaPoly', Key, Nonce, AD, <<CipherText/binary, MAC/binary>>),
|
||||
|
||||
?assertMatch(PlainText, PlainText0),
|
||||
|
||||
Key1 = enoise_crypto:rekey('ChaChaPoly', Key),
|
||||
Key1 = znoise_crypto:rekey('ChaChaPoly', Key),
|
||||
<<CipherText1:CTLen/binary, MAC1:MACLen/binary>> =
|
||||
enoise_crypto:encrypt('ChaChaPoly', Key1, Nonce, AD, PlainText),
|
||||
znoise_crypto:encrypt('ChaChaPoly', Key1, Nonce, AD, PlainText),
|
||||
<<PlainText1:PTLen/binary>> =
|
||||
enoise_crypto:decrypt('ChaChaPoly', Key1, Nonce, AD, <<CipherText1/binary, MAC1/binary>>),
|
||||
znoise_crypto:decrypt('ChaChaPoly', Key1, Nonce, AD, <<CipherText1/binary, MAC1/binary>>),
|
||||
?assertMatch(PlainText, PlainText1),
|
||||
ok.
|
||||
|
||||
blake2b_test() ->
|
||||
Test = fun(#{ input := In, output := Out }) ->
|
||||
?assertMatch(Out, enoise_crypto:hash(blake2b, In))
|
||||
?assertMatch(Out, znoise_crypto:hash(blake2b, In))
|
||||
end,
|
||||
lists:foreach(Test, test_utils:blake2b_data()).
|
||||
|
||||
%% blake2s_test() ->
|
||||
%% #{ input := In, output := Out } = test_utils:blake2s_data(),
|
||||
%% ?assertMatch(Out, enoise_crypto:hash(blake2s, In)).
|
||||
%% ?assertMatch(Out, znoise_crypto:hash(blake2s, In)).
|
||||
|
||||
blake2b_hmac_test() ->
|
||||
Test = fun(#{ key := Key, data := Data, hmac := HMAC }) ->
|
||||
?assertMatch(HMAC, enoise_crypto:hmac(blake2b, Key, Data))
|
||||
?assertMatch(HMAC, znoise_crypto:hmac(blake2b, Key, Data))
|
||||
end,
|
||||
lists:foreach(Test, test_utils:blake2b_hmac_data()).
|
||||
|
||||
blake2b_hkdf_test() ->
|
||||
Test = fun(#{ key := Key, data := Data, out1 := Out1, out2 := Out2 }) ->
|
||||
?assertMatch([Out1, Out2, _], enoise_crypto:hkdf(blake2b, Key, Data))
|
||||
?assertMatch([Out1, Out2, _], znoise_crypto:hkdf(blake2b, Key, Data))
|
||||
end,
|
||||
lists:foreach(Test, test_utils:blake2b_hkdf_data()).
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
-module(enoise_hs_state_tests).
|
||||
-module(znoise_hs_state_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
@@ -18,7 +18,7 @@ noise_hs_test_() ->
|
||||
}.
|
||||
|
||||
noise_hs_test(V = #{ protocol_name := Name }) ->
|
||||
Protocol = enoise_protocol:from_name(Name),
|
||||
Protocol = znoise_protocol:from_name(Name),
|
||||
|
||||
FixK = fun(undefined) -> undefined;
|
||||
(Bin) -> test_utils:hex_str_to_bin("0x" ++ binary_to_list(Bin)) end,
|
||||
@@ -39,11 +39,11 @@ noise_hs_test(V = #{ protocol_name := Name }) ->
|
||||
ok.
|
||||
|
||||
noise_test(_Name, Protocol, Init, Resp, Messages, HSHash) ->
|
||||
DH = enoise_protocol:dh(Protocol),
|
||||
SecK = fun(undefined) -> undefined; (Sec) -> enoise_keypair:new(DH, Sec, undefined) end,
|
||||
PubK = fun(undefined) -> undefined; (Pub) -> enoise_keypair:new(DH, Pub) end,
|
||||
DH = znoise_protocol:dh(Protocol),
|
||||
SecK = fun(undefined) -> undefined; (Sec) -> znoise_keypair:new(DH, Sec, undefined) end,
|
||||
PubK = fun(undefined) -> undefined; (Pub) -> znoise_keypair:new(DH, Pub) end,
|
||||
HSInit = fun(P, R, #{ e := E, s := S, rs := RS, prologue := PL }) ->
|
||||
{ok, HS} = enoise_hs_state:init(P, R, PL, {SecK(S), SecK(E), PubK(RS), undefined}),
|
||||
{ok, HS} = znoise_hs_state:init(P, R, PL, {SecK(S), SecK(E), PubK(RS), undefined}),
|
||||
HS
|
||||
end,
|
||||
|
||||
@@ -57,16 +57,16 @@ noise_test(_Name, Protocol, Init, Resp, Messages, HSHash) ->
|
||||
noise_test([M = #{ payload := PL0, ciphertext := CT0 } | Msgs], SendHS, RecvHS, HSHash) ->
|
||||
PL = test_utils:hex_str_to_bin("0x" ++ binary_to_list(PL0)),
|
||||
CT = test_utils:hex_str_to_bin("0x" ++ binary_to_list(CT0)),
|
||||
case {enoise_hs_state:next_message(SendHS), enoise_hs_state:next_message(RecvHS)} of
|
||||
case {znoise_hs_state:next_message(SendHS), znoise_hs_state:next_message(RecvHS)} of
|
||||
{out, in} ->
|
||||
{ok, SendHS1, Message} = enoise_hs_state:write_message(SendHS, PL),
|
||||
{ok, SendHS1, Message} = znoise_hs_state:write_message(SendHS, PL),
|
||||
?assertEqual(CT, Message),
|
||||
{ok, RecvHS1, PL1} = enoise_hs_state:read_message(RecvHS, Message),
|
||||
{ok, RecvHS1, PL1} = znoise_hs_state:read_message(RecvHS, Message),
|
||||
?assertEqual(PL, PL1),
|
||||
noise_test(Msgs, RecvHS1, SendHS1, HSHash);
|
||||
{done, done} ->
|
||||
{ok, #{ rx := RX1, tx := TX1, hs_hash := HSHash1 }} = enoise_hs_state:finalize(SendHS),
|
||||
{ok, #{ rx := RX2, tx := TX2, hs_hash := HSHash2 }} = enoise_hs_state:finalize(RecvHS),
|
||||
{ok, #{ rx := RX1, tx := TX1, hs_hash := HSHash1 }} = znoise_hs_state:finalize(SendHS),
|
||||
{ok, #{ rx := RX2, tx := TX2, hs_hash := HSHash2 }} = znoise_hs_state:finalize(RecvHS),
|
||||
?assertEqual(RX1, TX2), ?assertEqual(RX2, TX1),
|
||||
?assertEqual(HSHash, HSHash1), ?assertEqual(HSHash, HSHash2),
|
||||
noise_test([M | Msgs], TX1, RX1);
|
||||
@@ -77,9 +77,9 @@ noise_test([], _, _) -> ok;
|
||||
noise_test([#{ payload := PL0, ciphertext := CT0 } | Msgs], CA, CB) ->
|
||||
PL = test_utils:hex_str_to_bin("0x" ++ binary_to_list(PL0)),
|
||||
CT = test_utils:hex_str_to_bin("0x" ++ binary_to_list(CT0)),
|
||||
{ok, CA1, CT1} = enoise_cipher_state:encrypt_with_ad(CA, <<>>, PL),
|
||||
{ok, CA1, CT1} = znoise_cipher_state:encrypt_with_ad(CA, <<>>, PL),
|
||||
?assertEqual(CT, CT1),
|
||||
{ok, CA2, PL1} = enoise_cipher_state:decrypt_with_ad(CA, <<>>, CT1),
|
||||
{ok, CA2, PL1} = znoise_cipher_state:decrypt_with_ad(CA, <<>>, CT1),
|
||||
?assertEqual(CA1, CA2),
|
||||
?assertEqual(PL, PL1),
|
||||
noise_test(Msgs, CB, CA1).
|
||||
@@ -2,7 +2,7 @@
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
-module(enoise_protocol_tests).
|
||||
-module(znoise_protocol_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
@@ -12,13 +12,13 @@ name_test() ->
|
||||
|
||||
name2_test() ->
|
||||
Name = "Noise_NXpsk2_25519_AESGCM_SHA512",
|
||||
?assertError({name_not_recognized, Name}, enoise_protocol:from_name(Name)).
|
||||
?assertError({name_not_recognized, Name}, znoise_protocol:from_name(Name)).
|
||||
|
||||
name_pattern_test() ->
|
||||
Pat = "XKfallback+psk0",
|
||||
RoundPat = enoise_protocol:to_name_pattern(enoise_protocol:from_name_pattern(Pat)),
|
||||
RoundPat = znoise_protocol:to_name_pattern(znoise_protocol:from_name_pattern(Pat)),
|
||||
?assertEqual(Pat, RoundPat).
|
||||
|
||||
roundtrip(Name) ->
|
||||
ExpectedName = iolist_to_binary(Name),
|
||||
?assertMatch(ExpectedName, enoise_protocol:to_name(enoise_protocol:from_name(Name))).
|
||||
?assertMatch(ExpectedName, znoise_protocol:to_name(znoise_protocol:from_name(Name))).
|
||||
@@ -0,0 +1,56 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
-module(znoise_sym_state_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
noise_XK_25519_ChaChaPoly_Blake2b_test() ->
|
||||
Protocol = znoise_protocol:from_name("Noise_XK_25519_ChaChaPoly_BLAKE2b"),
|
||||
|
||||
SSE0 = znoise_sym_state:init(Protocol),
|
||||
SSD0 = znoise_sym_state:init(Protocol),
|
||||
|
||||
Name = znoise_protocol:to_name(Protocol),
|
||||
PadName = znoise_crypto:pad(Name, znoise_crypto:hashlen(blake2b), 0),
|
||||
|
||||
?assertMatch(PadName, znoise_sym_state:h(SSE0)),
|
||||
?assertMatch(PadName, znoise_sym_state:ck(SSE0)),
|
||||
?assertMatch(false, znoise_cipher_state:has_key(znoise_sym_state:cipher_state(SSE0))),
|
||||
|
||||
TestBin = h2b("0x6162636465666768696A6B6C6D6E6F707172737475767778797A"),
|
||||
SSE1 = znoise_sym_state:mix_hash(SSE0, TestBin),
|
||||
SSD1 = znoise_sym_state:mix_hash(SSD0, TestBin),
|
||||
|
||||
ExpHash1 = znoise_crypto:hash(blake2b, <<PadName/binary, TestBin/binary>>),
|
||||
ExpHash2 = h2b("0x8DC23DE176F6B3581FB7E18F258A47B1E1A8090BF55978868F1AC88C672DC3918FA4D1828338FB5DF652F5C33D57C79537CB5D074057EF59C346D0B35A160F71"),
|
||||
?assertMatch(ExpHash1, znoise_sym_state:h(SSE1)),
|
||||
?assertMatch(ExpHash2, znoise_sym_state:h(SSD1)),
|
||||
|
||||
{ok, SSE2, TestBin} = znoise_sym_state:encrypt_and_hash(SSE1, TestBin),
|
||||
{ok, SSD2, TestBin} = znoise_sym_state:decrypt_and_hash(SSD1, TestBin),
|
||||
|
||||
SSE3 = znoise_sym_state:mix_key(SSE2, TestBin),
|
||||
SSD3 = znoise_sym_state:mix_key(SSD2, TestBin),
|
||||
|
||||
ExpEncrypt = h2b("0x24FB13758E6BA9901A4CEA117AE1D9AF757B02CAE96EFDFDA5ED3927BDD9FEA0239F7F673E924AAE81E6"),
|
||||
{ok, SSE4, Encrypt} = znoise_sym_state:encrypt_and_hash(SSE3, TestBin),
|
||||
?assertMatch(ExpEncrypt, Encrypt),
|
||||
{ok, SSD4, Decrypt} = znoise_sym_state:decrypt_and_hash(SSD3, ExpEncrypt),
|
||||
?assertMatch(TestBin, Decrypt),
|
||||
|
||||
Key1 = h2b("0x893FD190EDB611D9AF73868C8AB020F7A13C62F70F7F74C46859CF4A1E71BB74"),
|
||||
Key2 = h2b("0x492E210AD0181CE70BF9CE80308DE45EAE1FA76E1ACE22A829EF6F1A01C6E2C8"),
|
||||
|
||||
{CSE1, CSE2} = znoise_sym_state:split(SSE4),
|
||||
?assertMatch(Key1, znoise_cipher_state:key(CSE1)),
|
||||
?assertMatch(Key2, znoise_cipher_state:key(CSE2)),
|
||||
|
||||
{CSD1, CSD2} = znoise_sym_state:split(SSD4),
|
||||
?assertMatch(Key1, znoise_cipher_state:key(CSD1)),
|
||||
?assertMatch(Key2, znoise_cipher_state:key(CSD2)),
|
||||
|
||||
ok.
|
||||
|
||||
h2b(S) -> test_utils:hex_str_to_bin(S).
|
||||
@@ -2,7 +2,7 @@
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
-module(enoise_tests).
|
||||
-module(znoise_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
@@ -18,7 +18,7 @@ noise_interactive_test_() ->
|
||||
}.
|
||||
|
||||
noise_interactive(V = #{ protocol_name := Name }) ->
|
||||
Protocol = enoise_protocol:from_name(Name),
|
||||
Protocol = znoise_protocol:from_name(Name),
|
||||
|
||||
FixK = fun(undefined) -> undefined;
|
||||
(Bin) -> test_utils:hex_str_to_bin("0x" ++ binary_to_list(Bin)) end,
|
||||
@@ -39,12 +39,12 @@ noise_interactive(V = #{ protocol_name := Name }) ->
|
||||
ok.
|
||||
|
||||
noise_interactive(_Name, Protocol, Init, Resp, Messages, HSHash) ->
|
||||
DH = enoise_protocol:dh(Protocol),
|
||||
SecK = fun(undefined) -> undefined; (Sec) -> enoise_keypair:new(DH, Sec, undefined) end,
|
||||
DH = znoise_protocol:dh(Protocol),
|
||||
SecK = fun(undefined) -> undefined; (Sec) -> znoise_keypair:new(DH, Sec, undefined) end,
|
||||
|
||||
HSInit = fun(#{ e := E, s := S, rs := RS, prologue := PL }, R) ->
|
||||
Opts = [{noise, Protocol}, {s, SecK(S)}, {e, SecK(E)}, {rs, RS}, {prologue, PL}],
|
||||
enoise:handshake(Opts, R)
|
||||
znoise:handshake(Opts, R)
|
||||
end,
|
||||
{ok, InitHS} = HSInit(Init, initiator),
|
||||
{ok, RespHS} = HSInit(Resp, responder),
|
||||
@@ -54,16 +54,16 @@ noise_interactive(_Name, Protocol, Init, Resp, Messages, HSHash) ->
|
||||
noise_interactive([#{ payload := PL0, ciphertext := CT0 } | Msgs], SendHS, RecvHS, HSHash) ->
|
||||
PL = test_utils:hex_str_to_bin("0x" ++ binary_to_list(PL0)),
|
||||
CT = test_utils:hex_str_to_bin("0x" ++ binary_to_list(CT0)),
|
||||
case enoise_hs_state:next_message(SendHS) of
|
||||
case znoise_hs_state:next_message(SendHS) of
|
||||
out ->
|
||||
{ok, send, Message, SendHS1} = enoise:step_handshake(SendHS, {send, PL}),
|
||||
{ok, send, Message, SendHS1} = znoise:step_handshake(SendHS, {send, PL}),
|
||||
?assertEqual(CT, Message),
|
||||
{ok, rcvd, PL1, RecvHS1} = enoise:step_handshake(RecvHS, {rcvd, Message}),
|
||||
{ok, rcvd, PL1, RecvHS1} = znoise:step_handshake(RecvHS, {rcvd, Message}),
|
||||
?assertEqual(PL, PL1),
|
||||
noise_interactive(Msgs, RecvHS1, SendHS1, HSHash);
|
||||
done ->
|
||||
{ok, done, #{ rx := RX1, tx := TX1, hs_hash := HSHash1 }} = enoise:step_handshake(SendHS, done),
|
||||
{ok, done, #{ rx := RX2, tx := TX2, hs_hash := HSHash2 }} = enoise:step_handshake(RecvHS, done),
|
||||
{ok, done, #{ rx := RX1, tx := TX1, hs_hash := HSHash1 }} = znoise:step_handshake(SendHS, done),
|
||||
{ok, done, #{ rx := RX2, tx := TX2, hs_hash := HSHash2 }} = znoise:step_handshake(RecvHS, done),
|
||||
?assertEqual(RX1, TX2), ?assertEqual(RX2, TX1),
|
||||
?assertEqual(HSHash, HSHash1), ?assertEqual(HSHash, HSHash2)
|
||||
end.
|
||||
@@ -89,19 +89,19 @@ noise_monitor_test_() ->
|
||||
|
||||
setup_dh25519() ->
|
||||
%% Generate a static key-pair for Client and Server
|
||||
SrvKeyPair = enoise_keypair:new(dh25519),
|
||||
CliKeyPair = enoise_keypair:new(dh25519),
|
||||
SrvKeyPair = znoise_keypair:new(dh25519),
|
||||
CliKeyPair = znoise_keypair:new(dh25519),
|
||||
|
||||
#{ hs_pattern := Ps, hash := Hs, cipher := Cs } = enoise_protocol:supported(),
|
||||
Configurations = [ enoise_protocol:to_name(P, dh25519, C, H)
|
||||
#{ hs_pattern := Ps, hash := Hs, cipher := Cs } = znoise_protocol:supported(),
|
||||
Configurations = [ znoise_protocol:to_name(P, dh25519, C, H)
|
||||
|| P <- Ps, C <- Cs, H <- Hs ],
|
||||
%% Configurations = [ enoise_protocol:to_name(xk, dh25519, 'ChaChaPoly', blake2b) ],
|
||||
%% Configurations = [ znoise_protocol:to_name(xk, dh25519, 'ChaChaPoly', blake2b) ],
|
||||
{Configurations, SrvKeyPair, CliKeyPair}.
|
||||
|
||||
noise_test(Conf, SKP, CKP) ->
|
||||
#{econn := EConn, echo_srv := EchoSrv} = noise_test_run(Conf, SKP, CKP),
|
||||
enoise:close(EConn),
|
||||
enoise_utils:echo_srv_stop(EchoSrv),
|
||||
znoise:close(EConn),
|
||||
znoise_utils:echo_srv_stop(EchoSrv),
|
||||
ok.
|
||||
|
||||
noise_test_run(Conf, SKP, CKP) ->
|
||||
@@ -145,25 +145,25 @@ proxy_exec(P, F) when is_function(F, 0) ->
|
||||
end.
|
||||
|
||||
noise_test_run_(Conf, SKP, CKP) ->
|
||||
Protocol = enoise_protocol:from_name(Conf),
|
||||
Protocol = znoise_protocol:from_name(Conf),
|
||||
Port = 4556,
|
||||
|
||||
SrvOpts = [{echos, 2}, {cpub, enoise_keypair:pubkey(CKP)}],
|
||||
EchoSrv = enoise_utils:echo_srv_start(Port, Protocol, SKP, SrvOpts),
|
||||
SrvOpts = [{echos, 2}, {cpub, znoise_keypair:pubkey(CKP)}],
|
||||
EchoSrv = znoise_utils:echo_srv_start(Port, Protocol, SKP, SrvOpts),
|
||||
|
||||
{ok, TcpSock} = gen_tcp:connect("localhost", Port, [{active, once}, binary, {reuseaddr, true}], 100),
|
||||
|
||||
Opts = [{noise, Protocol}, {s, CKP}] ++ [{rs, enoise_keypair:pubkey(SKP)} || enoise_utils:need_rs(initiator, Conf) ],
|
||||
{ok, EConn, _} = enoise:connect(TcpSock, Opts),
|
||||
Opts = [{noise, Protocol}, {s, CKP}] ++ [{rs, znoise_keypair:pubkey(SKP)} || znoise_utils:need_rs(initiator, Conf) ],
|
||||
{ok, EConn, _} = znoise:connect(TcpSock, Opts),
|
||||
|
||||
ok = enoise:send(EConn, <<"Hello World!">>),
|
||||
ok = znoise:send(EConn, <<"Hello World!">>),
|
||||
receive
|
||||
{noise, _, <<"Hello World!">>} -> ok
|
||||
after 100 -> error(timeout) end,
|
||||
|
||||
enoise:set_active(EConn, once),
|
||||
znoise:set_active(EConn, once),
|
||||
|
||||
ok = enoise:send(EConn, <<"Goodbye!">>),
|
||||
ok = znoise:send(EConn, <<"Goodbye!">>),
|
||||
receive
|
||||
{noise, _, <<"Goodbye!">>} -> ok
|
||||
after 100 -> error(timeout) end,
|
||||
@@ -172,7 +172,7 @@ noise_test_run_(Conf, SKP, CKP) ->
|
||||
, echo_srv => EchoSrv }.
|
||||
|
||||
noise_monitor_test(Conf, SKP, CKP) ->
|
||||
#{ econn := {enoise, EConnPid}
|
||||
#{ econn := {znoise, EConnPid}
|
||||
, proxy := Proxy
|
||||
, tcp_sock := _TcpSock } = noise_test_run(Conf, SKP, CKP),
|
||||
try proxy_exec(Proxy, fun() -> exit(normal) end)
|
||||
@@ -185,7 +185,7 @@ noise_monitor_test(Conf, SKP, CKP) ->
|
||||
|
||||
%% Talks to local echo-server (noise-c)
|
||||
%% client_test() ->
|
||||
%% TestProtocol = enoise_protocol:from_name("Noise_XK_25519_ChaChaPoly_BLAKE2b"),
|
||||
%% TestProtocol = znoise_protocol:from_name("Noise_XK_25519_ChaChaPoly_BLAKE2b"),
|
||||
%% ClientPrivKey = <<64,168,119,119,151,194,94,141,86,245,144,220,78,53,243,231,168,216,66,199,49,148,202,117,98,40,61,109,170,37,133,122>>,
|
||||
%% ClientPubKey = <<115,39,86,77,44,85,192,176,202,11,4,6,194,144,127,123, 34,67,62,180,190,232,251,5,216,168,192,190,134,65,13,64>>,
|
||||
%% ServerPubKey = <<112,91,141,253,183,66,217,102,211,40,13,249,238,51,77,114,163,159,32,1,162,219,76,106,89,164,34,71,149,2,103,59>>,
|
||||
@@ -194,29 +194,29 @@ noise_monitor_test(Conf, SKP, CKP) ->
|
||||
%% gen_tcp:send(TcpSock, <<0,8,0,0,3>>), %% "Noise_XK_25519_ChaChaPoly_Blake2b"
|
||||
|
||||
%% Opts = [ {noise, TestProtocol}
|
||||
%% , {s, enoise_keypair:new(dh25519, ClientPrivKey, ClientPubKey)}
|
||||
%% , {rs, enoise_keypair:new(dh25519, ServerPubKey)}
|
||||
%% , {s, znoise_keypair:new(dh25519, ClientPrivKey, ClientPubKey)}
|
||||
%% , {rs, znoise_keypair:new(dh25519, ServerPubKey)}
|
||||
%% , {prologue, <<0,8,0,0,3>>}],
|
||||
|
||||
%% {ok, EConn} = enoise:connect(TcpSock, Opts),
|
||||
%% ok = enoise:send(EConn, <<"ok\n">>),
|
||||
%% {ok, EConn} = znoise:connect(TcpSock, Opts),
|
||||
%% ok = znoise:send(EConn, <<"ok\n">>),
|
||||
%% receive
|
||||
%% {noise, EConn, <<"ok\n">>} -> ok
|
||||
%% after 1000 -> error(timeout) end,
|
||||
%% %% {ok, <<"ok\n">>} = enoise:recv(EConn, 3, 1000),
|
||||
%% enoise:close(EConn).
|
||||
%% %% {ok, <<"ok\n">>} = znoise:recv(EConn, 3, 1000),
|
||||
%% znoise:close(EConn).
|
||||
|
||||
|
||||
%% Expects a call-in from a local echo-client (noise-c)
|
||||
%% server_test_() ->
|
||||
%% {timeout, 20, fun() ->
|
||||
%% TestProtocol = enoise_protocol:from_name("Noise_XK_25519_ChaChaPoly_Blake2b"),
|
||||
%% TestProtocol = znoise_protocol:from_name("Noise_XK_25519_ChaChaPoly_Blake2b"),
|
||||
|
||||
%% ServerPrivKey = <<200,81,196,192,228,196,182,200,181,83,169,255,242,54,99,113,8,49,129,92,225,220,99,50,93,96,253,250,116,196,137,103>>,
|
||||
%% ServerPubKey = <<112,91,141,253,183,66,217,102,211,40,13,249,238,51,77,114,163,159,32,1,162,219,76,106,89,164,34,71,149,2,103,59>>,
|
||||
|
||||
%% Opts = [ {noise, TestProtocol}
|
||||
%% , {s, enoise_keypair:new(dh25519, ServerPrivKey, ServerPubKey)}
|
||||
%% , {s, znoise_keypair:new(dh25519, ServerPrivKey, ServerPubKey)}
|
||||
%% , {prologue, <<0,8,0,0,3>>}],
|
||||
|
||||
%% {ok, LSock} = gen_tcp:listen(7891, [{reuseaddr, true}, binary]),
|
||||
@@ -226,12 +226,12 @@ noise_monitor_test(Conf, SKP, CKP) ->
|
||||
%% receive {tcp, TcpSock, <<0,8,0,0,3>>} -> ok
|
||||
%% after 1000 -> error(timeout) end,
|
||||
|
||||
%% {ok, EConn} = enoise:accept(TcpSock, Opts),
|
||||
%% {ok, EConn} = znoise:accept(TcpSock, Opts),
|
||||
|
||||
%% {EConn1, Msg} = enoise:recv(EConn),
|
||||
%% EConn2 = enoise:send(EConn1, Msg),
|
||||
%% {EConn1, Msg} = znoise:recv(EConn),
|
||||
%% EConn2 = znoise:send(EConn1, Msg),
|
||||
|
||||
%% enoise:close(EConn2)
|
||||
%% znoise:close(EConn2)
|
||||
%% end}.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
%%% @copyright (C) 2018, Aeternity Anstalt
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
-module(enoise_utils).
|
||||
-module(znoise_utils).
|
||||
|
||||
-compile([export_all, nowarn_export_all]).
|
||||
|
||||
@@ -25,7 +25,7 @@ echo_srv(Port, Protocol, SKP, SrvOpts) ->
|
||||
|
||||
AcceptRes =
|
||||
try
|
||||
enoise:accept(TcpSock, Opts)
|
||||
znoise:accept(TcpSock, Opts)
|
||||
catch _:R:S -> gen_tcp:close(TcpSock), {error, {R, S}} end,
|
||||
|
||||
gen_tcp:close(LSock),
|
||||
@@ -46,7 +46,7 @@ echo_srv_loop(EConn, SrvOpts) ->
|
||||
end;
|
||||
active ->
|
||||
fun() ->
|
||||
{ok, Msg} = enoise:recv(EConn, 0, 100),
|
||||
{ok, Msg} = znoise:recv(EConn, 0, 100),
|
||||
Msg
|
||||
end
|
||||
end,
|
||||
@@ -56,14 +56,14 @@ echo_srv_loop(EConn, SrvOpts) ->
|
||||
try
|
||||
[ begin
|
||||
Msg = Recv(),
|
||||
ok = enoise:send(EConn, Msg)
|
||||
ok = znoise:send(EConn, Msg)
|
||||
end || _ <- lists:seq(1, Echos) ],
|
||||
ok
|
||||
catch _:R -> {error, R} end,
|
||||
|
||||
srv_reply(Res, SrvOpts),
|
||||
|
||||
enoise:close(EConn),
|
||||
znoise:close(EConn),
|
||||
|
||||
Res.
|
||||
|
||||
@@ -74,8 +74,8 @@ srv_reply(Reply, SrvOpts) ->
|
||||
end.
|
||||
|
||||
need_rs(Role, Conf) when is_binary(Conf) ->
|
||||
need_rs(Role, enoise_protocol:from_name(Conf));
|
||||
need_rs(Role, znoise_protocol:from_name(Conf));
|
||||
need_rs(Role, Protocol) ->
|
||||
PreMsgs = enoise_protocol:pre_msgs(Role, Protocol),
|
||||
PreMsgs = znoise_protocol:pre_msgs(Role, Protocol),
|
||||
lists:member({in, [s]}, PreMsgs).
|
||||
|
||||
Reference in New Issue
Block a user