generate_keys(File) ->
% Generate client keypair
{ClientSK, ClientPK} = enoise_crypto:dh_keypair(dh25519),
% Generate server keypair
{ServerSK, ServerPK} = enoise_crypto:dh_keypair(dh25519),
% Convert to hex strings for storage
ClientSKHex = bin_to_hex(ClientSK),
ClientPKHex = bin_to_hex(ClientPK),
ServerSKHex = bin_to_hex(ServerSK),
ServerPKHex = bin_to_hex(ServerPK),
Content = io_lib:format(
"%% Generated Noise keypairs~n"
"~n"
"%% Client keypair~n"
"{my_keys, #{~n"
" priv => \"~s\",~n"
" pub => \"~s\"~n"
"}}.~n"
"~n"
"%% Server's public key (for client verification)~n"
"{server_pk, \"~s\"}.~n"
"~n"
"%% Server keypair (server side)~n"
"{server_keys, #{~n"
" priv => \"~s\",~n"
" pub => \"~s\"~n"
"}}.~n",
[ClientSKHex, ClientPKHex, ServerPKHex, ServerSKHex, ServerPKHex]
),
case file:write_file(File, Content) of
ok ->
io:format("Keys generated and saved to ~s~n", [File]);
{error, Reason} ->
io:format("Failed to write keys to ~s: ~p~n", [File, Reason]),
halt(1)
end.
bin_to_hex(Bin) ->
lists:flatten([io_lib:format("~2.16.0B", [X]) || X <- binary_to_list(Bin)]).
%% -----------------------