-module(ywt@algorithm). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/ywt/algorithm.gleam"). -export([decoder/0, to_json/1, digest_type/1, padding/1, generate_key/4]). -export_type([algorithm/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. -opaque algorithm() :: hs256 | hs384 | hs512 | es256 | es384 | es512 | rs256 | rs384 | rs512 | ps256 | ps384 | ps512. -file("src/ywt/algorithm.gleam", 81). ?DOC(false). -spec decoder() -> gleam@dynamic@decode:decoder(algorithm()). decoder() -> gleam@dynamic@decode:then( {decoder, fun gleam@dynamic@decode:decode_string/1}, fun(Variant) -> case Variant of <<"HS256"/utf8>> -> gleam@dynamic@decode:success(hs256); <<"HS384"/utf8>> -> gleam@dynamic@decode:success(hs384); <<"HS512"/utf8>> -> gleam@dynamic@decode:success(hs512); <<"ES256"/utf8>> -> gleam@dynamic@decode:success(es256); <<"ES384"/utf8>> -> gleam@dynamic@decode:success(es384); <<"ES512"/utf8>> -> gleam@dynamic@decode:success(es512); <<"RS256"/utf8>> -> gleam@dynamic@decode:success(rs256); <<"RS384"/utf8>> -> gleam@dynamic@decode:success(rs384); <<"RS512"/utf8>> -> gleam@dynamic@decode:success(rs512); <<"PS256"/utf8>> -> gleam@dynamic@decode:success(ps256); <<"PS384"/utf8>> -> gleam@dynamic@decode:success(ps384); <<"PS512"/utf8>> -> gleam@dynamic@decode:success(ps512); _ -> gleam@dynamic@decode:failure(hs256, <<"alg"/utf8>>) end end ). -file("src/ywt/algorithm.gleam", 101). ?DOC(false). -spec to_json(algorithm()) -> gleam@json:json(). to_json(Alg) -> case Alg of hs256 -> gleam@json:string(<<"HS256"/utf8>>); hs384 -> gleam@json:string(<<"HS384"/utf8>>); hs512 -> gleam@json:string(<<"HS512"/utf8>>); es256 -> gleam@json:string(<<"ES256"/utf8>>); es384 -> gleam@json:string(<<"ES384"/utf8>>); es512 -> gleam@json:string(<<"ES512"/utf8>>); rs256 -> gleam@json:string(<<"RS256"/utf8>>); rs384 -> gleam@json:string(<<"RS384"/utf8>>); rs512 -> gleam@json:string(<<"RS512"/utf8>>); ps256 -> gleam@json:string(<<"PS256"/utf8>>); ps384 -> gleam@json:string(<<"PS384"/utf8>>); ps512 -> gleam@json:string(<<"PS512"/utf8>>) end. -file("src/ywt/algorithm.gleam", 119). ?DOC(false). -spec digest_type(algorithm()) -> ywt@internal@core:digest_type(). digest_type(Alg) -> case Alg of hs256 -> sha256; es256 -> sha256; rs256 -> sha256; ps256 -> sha256; hs384 -> sha384; es384 -> sha384; rs384 -> sha384; ps384 -> sha384; hs512 -> sha512; es512 -> sha512; rs512 -> sha512; ps512 -> sha512 end. -file("src/ywt/algorithm.gleam", 128). ?DOC(false). -spec padding(algorithm()) -> {ok, ywt@internal@core:padding()} | {error, nil}. padding(Alg) -> case Alg of rs256 -> {ok, rsa_pkcs1_padding}; rs384 -> {ok, rsa_pkcs1_padding}; rs512 -> {ok, rsa_pkcs1_padding}; ps256 -> {ok, rsa_pkcs1_pss_padding}; ps384 -> {ok, rsa_pkcs1_pss_padding}; ps512 -> {ok, rsa_pkcs1_pss_padding}; _ -> {error, nil} end. -file("src/ywt/algorithm.gleam", 137). ?DOC(false). -spec generate_key( algorithm(), fun((ywt@internal@core:digest_type()) -> EIX), fun((ywt@internal@core:named_curve(), ywt@internal@core:digest_type()) -> EIX), fun((ywt@internal@core:digest_type(), integer(), ywt@internal@core:padding()) -> EIX) ) -> EIX. generate_key(Alg, Generate_hmac, Generate_ecdsa, Generate_rsa) -> case Alg of es256 -> Generate_ecdsa(secp256r1, sha256); es384 -> Generate_ecdsa(secp384r1, sha384); es512 -> Generate_ecdsa(secp521r1, sha512); hs256 -> Generate_hmac(sha256); hs384 -> Generate_hmac(sha384); hs512 -> Generate_hmac(sha512); ps256 -> Generate_rsa(sha256, 4096, rsa_pkcs1_pss_padding); ps384 -> Generate_rsa(sha384, 4096, rsa_pkcs1_pss_padding); ps512 -> Generate_rsa(sha512, 4096, rsa_pkcs1_pss_padding); rs256 -> Generate_rsa(sha256, 4096, rsa_pkcs1_padding); rs384 -> Generate_rsa(sha384, 4096, rsa_pkcs1_padding); rs512 -> Generate_rsa(sha512, 4096, rsa_pkcs1_padding) end.