Current section
Files
Jump to
Current section
Files
lib/crypto/ssl.ex
defmodule ExKits.Crypto.SSL do
@moduledoc false
defp decode_public(nil), do: nil
defp decode_public(pem) do
[{:Certificate, der_bin, :not_encrypted}] = :public_key.pem_decode(pem)
der_bin
end
defp decode_private(pem) do
[{type, der_bin, :not_encrypted}] = :public_key.pem_decode(pem)
{type, der_bin}
end
@spec load_ssl(Keyword.t()) :: [any()]
def load_ssl([]), do: []
def load_ssl(ssl) do
ssl = Enum.into(ssl, %{})
[
cacerts: ssl.ca_cert |> decode_public() |> List.wrap(),
cert: ssl.cert |> decode_public(),
key: ssl.key |> decode_private()
]
|> Enum.reject(fn {_k, v} -> v == nil end)
end
@spec load_pem(binary) :: term()
def load_pem(pem) do
pem
|> :public_key.pem_decode()
|> List.first()
|> :public_key.pem_entry_decode()
end
end