Current section
Files
Jump to
Current section
Files
src/gose@algorithm.erl
-module(gose@algorithm).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gose/algorithm.gleam").
-export([aes_key_size/1, hmac_alg_key_size/1, content_alg_key_size/1, chacha20_kw_nonce_size/1]).
-export_type([aes_key_size/0, aes_kw_mode/0, cha_cha20_kw/0, hmac_alg/0, rsa_pkcs1_alg/0, rsa_pss_alg/0, ecdsa_alg/0, digital_signature_alg/0, mac_alg/0, signing_alg/0, rsa_encryption_alg/0, ecdh_es_alg/0, pbes2_alg/0, key_encryption_alg/0, content_alg/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.
?MODULEDOC(" Cryptographic algorithm definitions for signing and encryption.\n").
-type aes_key_size() :: aes128 | aes192 | aes256.
-type aes_kw_mode() :: aes_kw | aes_gcm_kw.
-type cha_cha20_kw() :: c20_p_kw | x_c20_p_kw.
-type hmac_alg() :: hmac_sha256 | hmac_sha384 | hmac_sha512.
-type rsa_pkcs1_alg() :: rsa_pkcs1_sha256 | rsa_pkcs1_sha384 | rsa_pkcs1_sha512.
-type rsa_pss_alg() :: rsa_pss_sha256 | rsa_pss_sha384 | rsa_pss_sha512.
-type ecdsa_alg() :: ecdsa_p256 | ecdsa_p384 | ecdsa_p521 | ecdsa_secp256k1.
-type digital_signature_alg() :: {rsa_pkcs1, rsa_pkcs1_alg()} |
{rsa_pss, rsa_pss_alg()} |
{ecdsa, ecdsa_alg()} |
eddsa.
-type mac_alg() :: {hmac, hmac_alg()}.
-type signing_alg() :: {digital_signature, digital_signature_alg()} |
{mac, mac_alg()}.
-type rsa_encryption_alg() :: rsa_pkcs1v15 | rsa_oaep_sha1 | rsa_oaep_sha256.
-type ecdh_es_alg() :: ecdh_es_direct |
{ecdh_es_aes_kw, aes_key_size()} |
{ecdh_es_cha_cha20_kw, cha_cha20_kw()}.
-type pbes2_alg() :: pbes2_sha256_aes128_kw |
pbes2_sha384_aes192_kw |
pbes2_sha512_aes256_kw.
-type key_encryption_alg() :: direct |
{aes_key_wrap, aes_kw_mode(), aes_key_size()} |
{cha_cha20_key_wrap, cha_cha20_kw()} |
{rsa_encryption, rsa_encryption_alg()} |
{ecdh_es, ecdh_es_alg()} |
{pbes2, pbes2_alg()}.
-type content_alg() :: {aes_gcm, aes_key_size()} |
{aes_cbc_hmac, aes_key_size()} |
cha_cha20_poly1305 |
x_cha_cha20_poly1305.
-file("src/gose/algorithm.gleam", 162).
?DOC(false).
-spec aes_key_size(aes_key_size()) -> integer().
aes_key_size(Size) ->
case Size of
aes128 ->
16;
aes192 ->
24;
aes256 ->
32
end.
-file("src/gose/algorithm.gleam", 171).
?DOC(false).
-spec hmac_alg_key_size(hmac_alg()) -> integer().
hmac_alg_key_size(Alg) ->
case Alg of
hmac_sha256 ->
32;
hmac_sha384 ->
48;
hmac_sha512 ->
64
end.
-file("src/gose/algorithm.gleam", 180).
?DOC(false).
-spec content_alg_key_size(content_alg()) -> integer().
content_alg_key_size(Enc) ->
case Enc of
{aes_gcm, Size} ->
aes_key_size(Size);
{aes_cbc_hmac, Size@1} ->
aes_key_size(Size@1) * 2;
cha_cha20_poly1305 ->
32;
x_cha_cha20_poly1305 ->
32
end.
-file("src/gose/algorithm.gleam", 190).
?DOC(false).
-spec chacha20_kw_nonce_size(cha_cha20_kw()) -> integer().
chacha20_kw_nonce_size(Variant) ->
case Variant of
c20_p_kw ->
12;
x_c20_p_kw ->
24
end.