defmodule StarkInfra.Key do
@moduledoc """
Used to generate API-compatible key pairs
"""
alias EllipticCurve.PrivateKey
alias EllipticCurve.PublicKey
@doc """
Generates a secp256k1 ECDSA private/public key pair to be used in the API authentications
## Parameters (optional):
- `path` [string, default nil]: path to save the keys .pem files. No files will be saved if this parameter isn't provided.
"""
@spec create(any) :: {binary, binary}
def create(path \\ nil) do
private = PrivateKey.generate()
public = PrivateKey.getPublicKey(private)
private_pem = private |> PrivateKey.toPem()
public_pem = public |> PublicKey.toPem()
save_file(private_pem, path, "privateKey.pem")
save_file(public_pem, path, "publicKey.pem")
{private_pem, public_pem}
end
defp save_file(_pem, path, _suffix) when is_nil(path) do
end
defp save_file(pem, path, suffix) do
File.mkdir_p!(path)
file = File.open!(Path.join(path, suffix), [:write])
IO.binwrite(file, pem)
File.close(file)
end
end