2019-09-29 22:30:59 +00:00
|
|
|
defmodule Clacks.Keys do
|
|
|
|
def generate_rsa_pem() do
|
|
|
|
key = :public_key.generate_key({:rsa, 2048, 65_537})
|
|
|
|
entry = :public_key.pem_entry_encode(:RSAPrivateKey, key)
|
|
|
|
pem = :public_key.pem_encode([entry]) |> String.trim_trailing()
|
|
|
|
{:ok, pem}
|
|
|
|
end
|
|
|
|
|
2019-10-01 22:39:17 +00:00
|
|
|
def keys_from_private_key_pem(pem) do
|
2019-09-29 22:30:59 +00:00
|
|
|
with [private_key_code] <- :public_key.pem_decode(pem),
|
|
|
|
private_key <- :public_key.pem_entry_decode(private_key_code),
|
|
|
|
{:RSAPrivateKey, _, modulus, exponent, _, _, _, _, _, _, _} <- private_key do
|
|
|
|
{:ok, private_key, {:RSAPublicKey, modulus, exponent}}
|
|
|
|
else
|
|
|
|
error ->
|
|
|
|
{:error, error}
|
|
|
|
end
|
|
|
|
end
|
2019-10-01 02:23:32 +00:00
|
|
|
|
2019-10-01 22:39:17 +00:00
|
|
|
def key_from_pem(pem) do
|
|
|
|
with [entry] <- :public_key.pem_decode(pem),
|
|
|
|
key <- :public_key.pem_entry_decode(entry) do
|
|
|
|
{:ok, key}
|
|
|
|
else
|
|
|
|
error ->
|
|
|
|
{:error, error}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-10-01 02:23:32 +00:00
|
|
|
def public_key_pem({:RSAPublicKey, _, _} = key) do
|
|
|
|
entry = :public_key.pem_entry_encode(:SubjectPublicKeyInfo, key)
|
|
|
|
pem = :public_key.pem_encode([entry])
|
|
|
|
{:ok, pem}
|
|
|
|
end
|
2019-09-29 22:30:59 +00:00
|
|
|
end
|