-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.