From a6397b64a558e529495dbba63cc33d6b55c1cd24 Mon Sep 17 00:00:00 2001 From: Craig Everett Date: Fri, 29 May 2026 16:41:24 +0900 Subject: [PATCH] Slight cleanup --- src/shake.erl | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/shake.erl b/src/shake.erl index c86282a..685a1f3 100644 --- a/src/shake.erl +++ b/src/shake.erl @@ -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) ->