@@ -424,6 +424,7 @@ still disallow sha1 use in the TLS protocol, since 27.0.1 and 26.2.5.2.
424424 | ecdsa_brainpoolP512r1tls13_sha512
425425 | ecdsa_brainpoolP384r1tls13_sha384
426426 | ecdsa_brainpoolP256r1tls13_sha256
427+ | post_quantum_schemes ()
427428 | rsassa_pss_scheme ()
428429 | legacy_sign_scheme () . % exported
429430
@@ -439,6 +440,13 @@ Supported in TLS-1.3 and TLS-1.2.
439440 | rsa_pss_pss_sha384
440441 | rsa_pss_pss_sha256 .
441442
443+ -doc (#{group => <<" Algorithms" >>}).
444+ -doc """
445+ Supported in TLS-1.3 only. ML-DSA since 28.1, SLH-DSA since 28.3.
446+ """ .
447+ -type post_quantum_schemes () :: crypto :mldsa () | crypto :slh_dsa ().
448+
449+
442450-doc (#{group => <<" Algorithms Legacy" >>}).
443451-doc """
444452This is only used for certificate signatures if TLS-1.2 is negotiated,
@@ -3006,33 +3014,45 @@ Example:
30063014```erlang
300730151> ssl:signature_algs(default, 'tlsv1.3').
30083016[eddsa_ed25519,eddsa_ed448,ecdsa_secp521r1_sha512,
3009- ecdsa_secp384r1_sha384,ecdsa_secp256r1_sha256,
3010- rsa_pss_pss_sha512,rsa_pss_pss_sha384,rsa_pss_pss_sha256,
3011- rsa_pss_rsae_sha512,rsa_pss_rsae_sha384,rsa_pss_rsae_sha256,
3012- rsa_pkcs1_sha512,rsa_pkcs1_sha384,rsa_pkcs1_sha256,
3013- {sha512,ecdsa},
3014- {sha384,ecdsa},
3015- {sha256,ecdsa}]
3017+ ecdsa_secp384r1_sha384,ecdsa_secp256r1_sha256,
3018+ ecdsa_brainpoolP512r1tls13_sha512,
3019+ ecdsa_brainpoolP384r1tls13_sha384,
3020+ ecdsa_brainpoolP256r1tls13_sha256,rsa_pss_pss_sha512,
3021+ rsa_pss_pss_sha384,rsa_pss_pss_sha256,rsa_pss_rsae_sha512,
3022+ rsa_pss_rsae_sha384,rsa_pss_rsae_sha256,mldsa44,mldsa65,
3023+ mldsa87,rsa_pkcs1_sha512,rsa_pkcs1_sha384,rsa_pkcs1_sha256,
3024+ {sha512,ecdsa},
3025+ {sha384,ecdsa},
3026+ {sha256,ecdsa}]
30163027
301730282> ssl:signature_algs(all, 'tlsv1.3').
3018- [eddsa_ed25519,eddsa_ed448,ecdsa_secp521r1_sha512,
3019- ecdsa_secp384r1_sha384,ecdsa_secp256r1_sha256,
3020- rsa_pss_pss_sha512,rsa_pss_pss_sha384,rsa_pss_pss_sha256,
3021- rsa_pss_rsae_sha512,rsa_pss_rsae_sha384,rsa_pss_rsae_sha256,
3022- rsa_pkcs1_sha512,rsa_pkcs1_sha384,rsa_pkcs1_sha256,
3023- {sha512,ecdsa},
3024- {sha384,ecdsa},
3025- {sha256,ecdsa},
3026- {sha224,ecdsa},
3027- {sha224,rsa},
3028- {sha,rsa},
3029- {sha,dsa}]
3030-
3031- 3> ssl:signature_algs(exclusive, 'tlsv1.3').
3032- [eddsa_ed25519,eddsa_ed448,ecdsa_secp521r1_sha512,
3033- ecdsa_secp384r1_sha384,ecdsa_secp256r1_sha256,
3034- rsa_pss_pss_sha512,rsa_pss_pss_sha384,rsa_pss_pss_sha256,
3035- rsa_pss_rsae_sha512,rsa_pss_rsae_sha384,rsa_pss_rsae_sha256]
3029+ [eddsa_ed25519,eddsa_ed448,ecdsa_secp521r1_sha512,ecdsa_secp384r1_sha384,
3030+ ecdsa_secp256r1_sha256,ecdsa_brainpoolP512r1tls13_sha512,
3031+ ecdsa_brainpoolP384r1tls13_sha384,ecdsa_brainpoolP256r1tls13_sha256,
3032+ rsa_pss_pss_sha512,rsa_pss_pss_sha384,rsa_pss_pss_sha256,rsa_pss_rsae_sha512,
3033+ rsa_pss_rsae_sha384,rsa_pss_rsae_sha256,mldsa44,mldsa65,mldsa87,
3034+ rsa_pkcs1_sha512,rsa_pkcs1_sha384,rsa_pkcs1_sha256,
3035+ {sha512,ecdsa},
3036+ {sha384,ecdsa},
3037+ {sha256,ecdsa},
3038+ slh_dsa_shake_256f,slh_dsa_shake_256s,slh_dsa_sha2_256f,slh_dsa_sha2_256s,
3039+ slh_dsa_shake_192f,slh_dsa_shake_192s,slh_dsa_sha2_192f,slh_dsa_sha2_192s,
3040+ slh_dsa_shake_128f,slh_dsa_shake_128s,slh_dsa_sha2_128f,slh_dsa_sha2_128s,
3041+ ecdsa_sha1,rsa_pkcs1_sha1,
3042+ {sha224,ecdsa},
3043+ {sha224,rsa},
3044+ {sha,dsa}]
3045+
3046+ 3> [ssl:signature_algs(exclusive, 'tlsv1.3').
3047+ [eddsa_ed25519,eddsa_ed448,ecdsa_secp521r1_sha512,ecdsa_secp384r1_sha384,
3048+ ecdsa_secp256r1_sha256,ecdsa_brainpoolP512r1tls13_sha512,
3049+ ecdsa_brainpoolP384r1tls13_sha384,ecdsa_brainpoolP256r1tls13_sha256,
3050+ rsa_pss_pss_sha512,rsa_pss_pss_sha384,rsa_pss_pss_sha256,rsa_pss_rsae_sha512,
3051+ rsa_pss_rsae_sha384,rsa_pss_rsae_sha256,mldsa44,mldsa65,mldsa87,
3052+ rsa_pkcs1_sha512,rsa_pkcs1_sha384,rsa_pkcs1_sha256,slh_dsa_shake_256f,
3053+ slh_dsa_shake_256s,slh_dsa_sha2_256f,slh_dsa_sha2_256s,slh_dsa_shake_192f,
3054+ slh_dsa_shake_192s,slh_dsa_sha2_192f,slh_dsa_sha2_192s,slh_dsa_shake_128f,
3055+ slh_dsa_shake_128s,slh_dsa_sha2_128f,slh_dsa_sha2_128s]
30363056```
30373057
30383058> #### Note {: .info }
@@ -3051,19 +3071,22 @@ rsa_pss_rsae_sha512,rsa_pss_rsae_sha384,rsa_pss_rsae_sha256]
30513071% %--------------------------------------------------------------------
30523072
30533073signature_algs (default , 'tlsv1.3' ) ->
3054- tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.3' ),
3074+ tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.3' ),
30553075 tls_record :protocol_version_name ('tlsv1.2' )]);
30563076signature_algs (default , 'tlsv1.2' ) ->
30573077 tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.2' )]);
30583078signature_algs (all , 'tlsv1.3' ) ->
30593079 tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.3' ),
30603080 tls_record :protocol_version_name ('tlsv1.2' )]) ++
3061- [ecdsa_sha1 , rsa_pkcs1_sha1 | tls_v1 :legacy_signature_algs_pre_13 ()] -- [{sha , ecdsa }, {sha , rsa }];
3081+ tls_v1 :slh_dsa_schemes () ++
3082+ [ecdsa_sha1 , rsa_pkcs1_sha1 | tls_v1 :legacy_signature_algs_pre_13 ()] --
3083+ [{sha , ecdsa }, {sha , rsa }];
30623084signature_algs (all , 'tlsv1.2' ) ->
3063- tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.2' )]) ++
3085+ tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.2' )]) ++
30643086 tls_v1 :legacy_signature_algs_pre_13 ();
30653087signature_algs (exclusive , 'tlsv1.3' ) ->
3066- tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.3' )]);
3088+ tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.3' )]) ++
3089+ tls_v1 :slh_dsa_schemes ();
30673090signature_algs (exclusive , 'tlsv1.2' ) ->
30683091 Algs = tls_v1 :default_signature_algs ([tls_record :protocol_version_name ('tlsv1.2' )]),
30693092 Algs ++ tls_v1 :legacy_signature_algs_pre_13 ();
0 commit comments