Slight cleanup

This commit is contained in:
2026-05-29 16:41:24 +09:00
parent 94de071520
commit a6397b64a5
+20 -22
View File
@@ -5,36 +5,34 @@
% X_Y_[Q_]ZZ = SecretKey
% Where
% X :: A (Alice) | B (Bob)
% Y :: P (Permanent) | A (Alternate) | E (Ephemeral)
% Y :: P (Permanent) | E (Ephemeral)
% Q :: E (ec25519) | X (x25519)
% 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) ->
{_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(<<>>),
{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(<<>>),
% {A_P_ID, A_P_E_KP = #{public := A_P_E_PK, secret := A_P_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_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],
{IPs, Port, Salt, ServiceIDs} = resolve(ContractID, ServiceIDs),
{_IPs, _Port, Salt, ServiceIDs} = resolve(ContractID, ServiceIDs),
Salt = <<"Notional Salt">>,
A_String = connect_string(A_A_E_PK, A_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,
_A_String = connect_string(A_E_E_PK),
_B_String = connect_string(B_P_E_PK, B_E_E_PK),
% Key conversion
% #{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 := 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),
A_InitSessionKey = session_key(a, A_A_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_A_X_PK, Version, Salt),
Version = proto_version(),
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.
connect_string(PK1) ->
<<(proto_name())/binary, ":", (proto_version())/binary, ":", PK1/binary>>.
connect_string(PK1, PK2) ->
<<(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}.
session_key(a, A_A_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_Ephemeral = crypto:compute_key(ecdh, B_E_X_PK, A_A_X_SK, x25519),
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_E_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);
session_key(b, B_P_X_SK, B_E_X_SK, A_A_X_PK, Version, Salt) ->
DH_Static = crypto:compute_key(ecdh, A_A_X_PK, B_P_X_SK, x25519),
DH_Ephemeral = crypto:compute_key(ecdh, A_A_X_PK, B_E_X_SK, x25519),
session_key(b, B_P_X_SK, B_E_X_SK, A_E_X_PK, Version, Salt) ->
DH_Static = crypto:compute_key(ecdh, A_E_X_PK, B_P_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) ->