Current section

Files

Jump to
ywt_core src ywt@algorithm.erl
Raw

src/ywt@algorithm.erl

-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()) -> EOK),
fun((ywt@internal@core:named_curve(), ywt@internal@core:digest_type()) -> EOK),
fun((ywt@internal@core:digest_type(), integer(), ywt@internal@core:padding()) -> EOK)
) -> EOK.
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.