Packages

An HTTP signature and digest header library for ActivityPub applications

Current section

Files

Jump to
hypersig src hypersig@key.erl
Raw

src/hypersig@key.erl

-module(hypersig@key).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/hypersig/key.gleam").
-export([decode_private/1, decode_public/1, encode_public/1, encode_private/1, generate_key_pair/0, sign/2, verify/3]).
-export_type([public_key/0, private_key/0, key_error/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type public_key() :: any().
-type private_key() :: any().
-type key_error() :: unexpected_key_format |
expected_public_key |
expected_private_key |
{runtime_error, binary()}.
-file("src/hypersig/key.gleam", 20).
-spec decode_private(binary()) -> {ok, private_key()} | {error, key_error()}.
decode_private(Pem) ->
public_key_ffi:decode_private_key(Pem).
-file("src/hypersig/key.gleam", 23).
-spec decode_public(binary()) -> {ok, public_key()} | {error, key_error()}.
decode_public(Pem) ->
public_key_ffi:decode_public_key(Pem).
-file("src/hypersig/key.gleam", 26).
-spec encode_public(public_key()) -> binary().
encode_public(Key) ->
public_key_ffi:encode_public_key(Key).
-file("src/hypersig/key.gleam", 29).
-spec encode_private(private_key()) -> binary().
encode_private(Key) ->
public_key_ffi:encode_private_key(Key).
-file("src/hypersig/key.gleam", 42).
-spec generate_key_pair() -> {ok, {public_key(), private_key()}} |
{error, key_error()}.
generate_key_pair() ->
public_key_ffi:generate_key_pair().
-file("src/hypersig/key.gleam", 45).
?DOC(" Signs a message and returns the signature in a base64 encoded string\n").
-spec sign(binary(), private_key()) -> {ok, binary()} | {error, key_error()}.
sign(Msg, Key) ->
_pipe = gleam_stdlib:identity(Msg),
_pipe@1 = public_key_ffi:do_sign(_pipe, Key),
gleam@result:map(
_pipe@1,
fun(_capture) -> gleam_stdlib:base64_encode(_capture, true) end
).
-file("src/hypersig/key.gleam", 54).
-spec verify(binary(), bitstring(), public_key()) -> {ok, boolean()} |
{error, key_error()}.
verify(Msg, Signature, Key) ->
Msg@1 = gleam_stdlib:identity(Msg),
public_key_ffi:do_verify(Msg@1, Signature, Key).