lib/hustle/vapid.ex

defmodule Hustle.Vapid do
  @moduledoc """
  Generates VAPID or Voluntary Application Server Identification
  public and private key pairs.
  """

  @doc """
  Generate a new VAPID (Voluntary Application Server Identification)
  """
  @spec generate :: {public :: binary(), private :: binary()}
  def generate do
    {public, private} = :crypto.generate_key(:ecdh, :prime256v1)

    {
      Base.url_encode64(public, padding: false),
      Base.url_encode64(private, padding: false)
    }
  end
end