Files
self f8e2bfaada refactor: use chat capability surfaces
Move Sender modules under TribeOne.TribesPlugin.Sender and replace the Aether-specific chat integration with the public chat@1 surface contract.
2026-05-26 01:13:38 +02:00

32 lines
775 B
Elixir

defmodule TribeOne.TribesPlugin.Sender.Streaming.StreamKeys do
@moduledoc """
Helpers for generating and verifying RTMP stream keys.
"""
@key_bytes 32
@spec generate_key() :: String.t()
def generate_key do
@key_bytes
|> :crypto.strong_rand_bytes()
|> Base.url_encode64(padding: false)
end
@spec hash_key(String.t()) :: String.t()
def hash_key(key) when is_binary(key) do
digest =
key
|> then(&:crypto.hash(:sha256, &1))
|> Base.encode16(case: :lower)
"sha256:" <> digest
end
@spec verify_key?(String.t(), String.t()) :: boolean()
def verify_key?(key, "sha256:" <> _digest = hash) when is_binary(key) do
Plug.Crypto.secure_compare(hash_key(key), hash)
end
def verify_key?(_key, _hash), do: false
end