Slight cleanup
This commit is contained in:
+20
-22
@@ -5,36 +5,34 @@
|
|||||||
% X_Y_[Q_]ZZ = SecretKey
|
% X_Y_[Q_]ZZ = SecretKey
|
||||||
% Where
|
% Where
|
||||||
% X :: A (Alice) | B (Bob)
|
% X :: A (Alice) | B (Bob)
|
||||||
% Y :: P (Permanent) | A (Alternate) | E (Ephemeral)
|
% Y :: P (Permanent) | E (Ephemeral)
|
||||||
% Q :: E (ec25519) | X (x25519)
|
% Q :: E (ec25519) | X (x25519)
|
||||||
% ZZ :: ID | PK (Public Key) | S (Secret Key)
|
% ZZ :: ID | PK (Public Key) | S (Secret Key)
|
||||||
%
|
|
||||||
% The Alternate key only applies to Alice and is an ephemeral stand-in for a permanent ID
|
|
||||||
% until the initial tunnel has already been established.
|
|
||||||
|
|
||||||
start(ContractID) ->
|
start(ContractID) ->
|
||||||
{_A_P_ID, _A_P_E_KP = #{public := _A_P_E_PK, secret := _A_P_E_SK}} = hz_key_master:make_key(<<>>),
|
% {A_P_ID, A_P_E_KP = #{public := A_P_E_PK, secret := A_P_E_SK}} = hz_key_master:make_key(<<>>),
|
||||||
{_A_A_ID, A_A_E_KP = #{public := A_A_E_PK, secret := A_A_E_SK}} = hz_key_master:make_key(<<>>),
|
{_A_E_ID, A_E_E_KP = #{public := A_E_E_PK, secret := _A_E_E_SK}} = hz_key_master:make_key(<<>>),
|
||||||
{_A_E_ID, A_E_E_KP = #{public := A_E_E_PK, secret := A_E_E_SK}} = hz_key_master:make_key(<<>>),
|
{B_P_ID, B_P_E_KP = #{public := B_P_E_PK, secret := _B_P_E_SK}} = hz_key_master:make_key(<<>>),
|
||||||
{B_P_ID, B_P_E_KP = #{public := B_P_E_PK, secret := B_P_E_SK}} = hz_key_master:make_key(<<>>),
|
{_B_E_ID, B_E_E_KP = #{public := B_E_E_PK, secret := _B_E_E_SK}} = hz_key_master:make_key(<<>>),
|
||||||
{_B_E_ID, B_E_E_KP = #{public := B_E_E_PK, secret := B_E_E_SK}} = hz_key_master:make_key(<<>>),
|
|
||||||
ServiceIDs = [B_P_ID],
|
ServiceIDs = [B_P_ID],
|
||||||
{IPs, Port, Salt, ServiceIDs} = resolve(ContractID, ServiceIDs),
|
{_IPs, _Port, Salt, ServiceIDs} = resolve(ContractID, ServiceIDs),
|
||||||
Salt = <<"Notional Salt">>,
|
Salt = <<"Notional Salt">>,
|
||||||
A_String = connect_string(A_A_E_PK, A_E_E_PK),
|
_A_String = connect_string(A_E_E_PK),
|
||||||
B_String = connect_string(B_P_E_PK, B_E_E_PK),
|
_B_String = connect_string(B_P_E_PK, B_E_E_PK),
|
||||||
<<"GajuExpress:", Version:3/binary, ":", A_A_E_PK:32/binary, A_E_E_PK:32/binary>> = A_String,
|
|
||||||
% Key conversion
|
% Key conversion
|
||||||
% #{public := A_P_X_PK, secret := A_P_X_SK} = convert(A_P_E_KP),
|
% #{public := A_P_X_PK, secret := A_P_X_SK} = convert(A_P_E_KP),
|
||||||
#{public := A_A_X_PK, secret := A_A_X_SK} = convert(A_A_E_KP),
|
|
||||||
#{public := A_E_X_PK, secret := A_E_X_SK} = convert(A_E_E_KP),
|
#{public := A_E_X_PK, secret := A_E_X_SK} = convert(A_E_E_KP),
|
||||||
#{public := B_P_X_PK, secret := B_P_X_SK} = convert(B_P_E_KP),
|
#{public := B_P_X_PK, secret := B_P_X_SK} = convert(B_P_E_KP),
|
||||||
#{public := B_E_X_PK, secret := B_E_X_SK} = convert(B_E_E_KP),
|
#{public := B_E_X_PK, secret := B_E_X_SK} = convert(B_E_E_KP),
|
||||||
A_InitSessionKey = session_key(a, A_A_X_SK, B_P_X_PK, B_E_X_PK, Version, Salt),
|
Version = proto_version(),
|
||||||
B_InitSessionKey = session_key(b, B_P_X_SK, B_E_X_SK, A_A_X_PK, Version, Salt),
|
A_InitSessionKey = session_key(a, A_E_X_SK, B_P_X_PK, B_E_X_PK, Version, Salt),
|
||||||
|
B_InitSessionKey = session_key(b, B_P_X_SK, B_E_X_SK, A_E_X_PK, Version, Salt),
|
||||||
A_InitSessionKey =:= B_InitSessionKey.
|
A_InitSessionKey =:= B_InitSessionKey.
|
||||||
|
|
||||||
|
|
||||||
|
connect_string(PK1) ->
|
||||||
|
<<(proto_name())/binary, ":", (proto_version())/binary, ":", PK1/binary>>.
|
||||||
|
|
||||||
connect_string(PK1, PK2) ->
|
connect_string(PK1, PK2) ->
|
||||||
<<(proto_name())/binary, ":", (proto_version())/binary, ":", PK1/binary, PK2/binary>>.
|
<<(proto_name())/binary, ":", (proto_version())/binary, ":", PK1/binary, PK2/binary>>.
|
||||||
|
|
||||||
@@ -93,13 +91,13 @@ ext_gcd(A, B) ->
|
|||||||
{G, Y1, X1 - (A div B) * Y1}.
|
{G, Y1, X1 - (A div B) * Y1}.
|
||||||
|
|
||||||
|
|
||||||
session_key(a, A_A_X_SK, B_P_X_PK, B_E_X_PK, Version, Salt) ->
|
session_key(a, A_E_X_SK, B_P_X_PK, B_E_X_PK, Version, Salt) ->
|
||||||
DH_Static = crypto:compute_key(ecdh, B_P_X_PK, A_A_X_SK, x25519),
|
DH_Static = crypto:compute_key(ecdh, B_P_X_PK, A_E_X_SK, x25519),
|
||||||
DH_Ephemeral = crypto:compute_key(ecdh, B_E_X_PK, A_A_X_SK, x25519),
|
DH_Ephemeral = crypto:compute_key(ecdh, B_E_X_PK, A_E_X_SK, x25519),
|
||||||
finalize_hkdf(DH_Static, DH_Ephemeral, Version, Salt);
|
finalize_hkdf(DH_Static, DH_Ephemeral, Version, Salt);
|
||||||
session_key(b, B_P_X_SK, B_E_X_SK, A_A_X_PK, Version, Salt) ->
|
session_key(b, B_P_X_SK, B_E_X_SK, A_E_X_PK, Version, Salt) ->
|
||||||
DH_Static = crypto:compute_key(ecdh, A_A_X_PK, B_P_X_SK, x25519),
|
DH_Static = crypto:compute_key(ecdh, A_E_X_PK, B_P_X_SK, x25519),
|
||||||
DH_Ephemeral = crypto:compute_key(ecdh, A_A_X_PK, B_E_X_SK, x25519),
|
DH_Ephemeral = crypto:compute_key(ecdh, A_E_X_PK, B_E_X_SK, x25519),
|
||||||
finalize_hkdf(DH_Static, DH_Ephemeral, Version, Salt).
|
finalize_hkdf(DH_Static, DH_Ephemeral, Version, Salt).
|
||||||
|
|
||||||
finalize_hkdf(DH_Static, DH_Ephemeral, Version, Salt) ->
|
finalize_hkdf(DH_Static, DH_Ephemeral, Version, Salt) ->
|
||||||
|
|||||||
Reference in New Issue
Block a user