Current section

Files

Jump to
soda src soda.erl
Raw

src/soda.erl

%%% @doc Sweet Erlang bindings for libsodium
%%% @end.
-module(soda).
-export([nonce/1]).
-export([
aead_xchacha20poly1305_ietf_encrypt/4,
aead_xchacha20poly1305_ietf_decrypt/4,
aead_xchacha20poly1305_ietf_keygen/0,
aead_xchacha20poly1305_ietf_KEYBYTES/0,
aead_xchacha20poly1305_ietf_NPUBBYTES/0,
aead_xchacha20poly1305_ietf_ABYTES/0,
aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX/0
]).
-export([randombytes/1]).
-define(CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES, 24).
% Helper map for nonce/1
-define(NONCE_SIZES,
#{
aead_xchacha20poly1305_ietf => ?CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES
}
).
-spec nonce(atom()) -> binary() | {error, term()}.
nonce(NonceType) ->
case maps:get(NonceType, ?NONCE_SIZES, none) of
none -> {error, unknown_nonce};
Size -> randombytes(Size)
end.
-spec randombytes(non_neg_integer()) -> binary().
randombytes(N) ->
soda_nif:randombytes(N).
-spec aead_xchacha20poly1305_ietf_KEYBYTES() -> pos_integer().
aead_xchacha20poly1305_ietf_KEYBYTES() ->
soda_nif:crypto_aead_xchacha20poly1305_ietf_KEYBYTES().
-spec aead_xchacha20poly1305_ietf_NPUBBYTES() -> pos_integer().
aead_xchacha20poly1305_ietf_NPUBBYTES() ->
soda_nif:crypto_aead_xchacha20poly1305_ietf_NPUBBYTES().
-spec aead_xchacha20poly1305_ietf_ABYTES() -> pos_integer().
aead_xchacha20poly1305_ietf_ABYTES() ->
soda_nif:crypto_aead_xchacha20poly1305_ietf_ABYTES().
-spec aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX() -> pos_integer().
aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX() ->
soda_nif:crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX().
-spec aead_xchacha20poly1305_ietf_keygen() -> binary() | {error, term()}.
aead_xchacha20poly1305_ietf_keygen() ->
soda_nif:crypto_aead_xchacha20poly1305_ietf_keygen().
-spec aead_xchacha20poly1305_ietf_encrypt(binary(), binary(), binary(),
binary()) -> binary() | {error,
term()}.
aead_xchacha20poly1305_ietf_encrypt(Message, AD, Nonce, Key) ->
soda_nif:crypto_aead_xchacha20poly1305_ietf_encrypt(Message, AD, Nonce, Key).
-spec aead_xchacha20poly1305_ietf_decrypt(binary(), binary(), binary(),
binary()) -> binary() | {error,
term()}.
aead_xchacha20poly1305_ietf_decrypt(CT, AD, Nonce, Key) ->
soda_nif:crypto_aead_xchacha20poly1305_ietf_decrypt(CT, AD, Nonce, Key).