defmodule Mobilizon.Crypto do @moduledoc """ Utility module which contains cryptography related functions. """ @doc """ Returns random byte sequence of the length encoded to Base64. """ @spec random_string(integer) :: String.t() def random_string(length) do length |> :crypto.strong_rand_bytes() |> Base.url_encode64() end @doc """ Generate RSA 2048-bit private key. """ @spec generate_rsa_2048_private_key :: String.t() def generate_rsa_2048_private_key do key = :public_key.generate_key({:rsa, 2048, 65_537}) entry = :public_key.pem_entry_encode(:RSAPrivateKey, key) [entry] |> :public_key.pem_encode() |> String.trim_trailing() end end