Skip to content

Commit 766d83c

Browse files
committed
ssl: Add SLH-DSA support
Also remove white space errors and too long lines and no longer needed deprecation supressions.
1 parent ba7a3c4 commit 766d83c

File tree

11 files changed

+728
-327
lines changed

11 files changed

+728
-327
lines changed

lib/ssl/src/ssl.erl

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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 """
444452
This is only used for certificate signatures if TLS-1.2 is negotiated,
@@ -3051,19 +3059,21 @@ rsa_pss_rsae_sha512,rsa_pss_rsae_sha384,rsa_pss_rsae_sha256]
30513059
%%--------------------------------------------------------------------
30523060

30533061
signature_algs(default, 'tlsv1.3') ->
3054-
tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.3'),
3062+
tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.3'),
30553063
tls_record:protocol_version_name('tlsv1.2')]);
30563064
signature_algs(default, 'tlsv1.2') ->
30573065
tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.2')]);
30583066
signature_algs(all, 'tlsv1.3') ->
30593067
tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.3'),
30603068
tls_record:protocol_version_name('tlsv1.2')]) ++
3061-
[ecdsa_sha1, rsa_pkcs1_sha1 | tls_v1:legacy_signature_algs_pre_13()] -- [{sha, ecdsa}, {sha, rsa}];
3069+
[ecdsa_sha1, rsa_pkcs1_sha1 | tls_v1:legacy_signature_algs_pre_13()] --
3070+
[{sha, ecdsa}, {sha, rsa}];
30623071
signature_algs(all, 'tlsv1.2') ->
3063-
tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.2')]) ++
3072+
tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.2')]) ++
30643073
tls_v1:legacy_signature_algs_pre_13();
30653074
signature_algs(exclusive, 'tlsv1.3') ->
3066-
tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.3')]);
3075+
tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.3')] ++
3076+
tls_v1:slh_dsa_schemes());
30673077
signature_algs(exclusive, 'tlsv1.2') ->
30683078
Algs = tls_v1:default_signature_algs([tls_record:protocol_version_name('tlsv1.2')]),
30693079
Algs ++ tls_v1:legacy_signature_algs_pre_13();

lib/ssl/src/ssl_certificate.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ available_cert_key_pairs(CertKeyGroups) ->
361361
%% Create the prioritized list of cert key pairs that
362362
%% are availble for use in the negotiated version
363363
available_cert_key_pairs(CertKeyGroups, ?TLS_1_3) ->
364-
RevAlgos = [mldsa, rsa, rsa_pss_pss, ecdsa, eddsa],
364+
RevAlgos = [slhdsa, mldsa, rsa, rsa_pss_pss, ecdsa, eddsa],
365365
cert_key_group_to_list(RevAlgos, CertKeyGroups, []);
366366
available_cert_key_pairs(CertKeyGroups, ?TLS_1_2) ->
367367
RevAlgos = [dsa, rsa, rsa_pss_pss, ecdsa],

lib/ssl/src/ssl_cipher.erl

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,18 @@ signature_scheme(ecdsa_sha1) -> ?ECDSA_SHA1;
599599
signature_scheme(mldsa44) -> ?MLDSA44;
600600
signature_scheme(mldsa65) -> ?MLDSA65;
601601
signature_scheme(mldsa87) -> ?MLDSA87;
602+
signature_scheme(slh_dsa_sha2_128f) -> ?SLHDSA_SHA2_128F;
603+
signature_scheme(slh_dsa_sha2_128s) -> ?SLHDSA_SHA2_128S;
604+
signature_scheme(slh_dsa_sha2_192f) -> ?SLHDSA_SHA2_192F;
605+
signature_scheme(slh_dsa_sha2_192s) -> ?SLHDSA_SHA2_192S;
606+
signature_scheme(slh_dsa_sha2_256f) -> ?SLHDSA_SHA2_256F;
607+
signature_scheme(slh_dsa_sha2_256s) -> ?SLHDSA_SHA2_256S;
608+
signature_scheme(slh_dsa_shake_128f) -> ?SLHDSA_SHAKE_128F;
609+
signature_scheme(slh_dsa_shake_128s) -> ?SLHDSA_SHAKE_128S;
610+
signature_scheme(slh_dsa_shake_192f) -> ?SLHDSA_SHAKE_192F;
611+
signature_scheme(slh_dsa_shake_192s) -> ?SLHDSA_SHAKE_192S;
612+
signature_scheme(slh_dsa_shake_256f) -> ?SLHDSA_SHAKE_256F;
613+
signature_scheme(slh_dsa_shake_256s) -> ?SLHDSA_SHAKE_256S;
602614

603615
%% New algorithms on legacy format
604616
signature_scheme({sha512, rsa_pss_pss}) ->
@@ -641,6 +653,18 @@ signature_scheme(?ECDSA_SHA1) -> ecdsa_sha1;
641653
signature_scheme(?MLDSA44) -> mldsa44;
642654
signature_scheme(?MLDSA65) -> mldsa65;
643655
signature_scheme(?MLDSA87) -> mldsa87;
656+
signature_scheme(?SLHDSA_SHA2_128F) -> slh_dsa_sha2_128f;
657+
signature_scheme(?SLHDSA_SHA2_128S) -> slh_dsa_sha2_128s;
658+
signature_scheme(?SLHDSA_SHA2_192F) -> slh_dsa_sha2_192f;
659+
signature_scheme(?SLHDSA_SHA2_192S) -> slh_dsa_sha2_192s;
660+
signature_scheme(?SLHDSA_SHA2_256F) -> slh_dsa_sha2_256f;
661+
signature_scheme(?SLHDSA_SHA2_256S) -> slh_dsa_sha2_256s;
662+
signature_scheme(?SLHDSA_SHAKE_128F) -> slh_dsa_shake_128f;
663+
signature_scheme(?SLHDSA_SHAKE_128S) -> slh_dsa_shake_128s;
664+
signature_scheme(?SLHDSA_SHAKE_192F) -> slh_dsa_shake_192f;
665+
signature_scheme(?SLHDSA_SHAKE_192S) -> slh_dsa_shake_192s;
666+
signature_scheme(?SLHDSA_SHAKE_256F) -> slh_dsa_shake_256f;
667+
signature_scheme(?SLHDSA_SHAKE_256S) -> slh_dsa_shake_256s;
644668

645669
%% Handling legacy signature algorithms for logging purposes. These algorithms
646670
%% cannot be used in TLS 1.3 handshakes.
@@ -712,6 +736,18 @@ scheme_to_components(ecdsa_sha1) -> {sha, ecdsa, undefined};
712736
scheme_to_components(mldsa44) -> {none, mldsa44, undefined};
713737
scheme_to_components(mldsa65) -> {none, mldsa65, undefined};
714738
scheme_to_components(mldsa87) -> {none, mldsa87, undefined};
739+
scheme_to_components(slh_dsa_sha2_128f = Scheme) -> {Scheme, slhdsa, undefined};
740+
scheme_to_components(slh_dsa_sha2_128s = Scheme) -> {Scheme, slhdsa, undefined};
741+
scheme_to_components(slh_dsa_sha2_192f = Scheme) -> {Scheme, slhdsa, undefined};
742+
scheme_to_components(slh_dsa_sha2_192s = Scheme) -> {Scheme, slhdsa, undefined};
743+
scheme_to_components(slh_dsa_sha2_256f = Scheme) -> {Scheme, slhdsa, undefined};
744+
scheme_to_components(slh_dsa_sha2_256s = Scheme) -> {Scheme, slhdsa, undefined};
745+
scheme_to_components(slh_dsa_shake_128f = Scheme) -> {Scheme, slhdsa, undefined};
746+
scheme_to_components(slh_dsa_shake_128s = Scheme) -> {Scheme, slhdsa, undefined};
747+
scheme_to_components(slh_dsa_shake_192f = Scheme) -> {Scheme, slhdsa, undefined};
748+
scheme_to_components(slh_dsa_shake_192s = Scheme) -> {Scheme, slhdsa, undefined};
749+
scheme_to_components(slh_dsa_shake_256f = Scheme) -> {Scheme, slhdsa, undefined};
750+
scheme_to_components(slh_dsa_shake_256s = Scheme) -> {Scheme, slhdsa, undefined};
715751
%% Handling legacy signature algorithms
716752
scheme_to_components({Hash,Sign}) -> {Hash, Sign, undefined}.
717753

@@ -890,6 +926,30 @@ signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-ml-dsa-65'}
890926
mldsa65;
891927
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-ml-dsa-87'}) ->
892928
mldsa87;
929+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-shake-256f'}) ->
930+
slh_dsa_shake_256f;
931+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-shake-192f'}) ->
932+
slh_dsa_shake_192f;
933+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-shake-128f'}) ->
934+
slh_dsa_shake_128f;
935+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-shake-256s'}) ->
936+
slh_dsa_shake_256s;
937+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-shake-192s'}) ->
938+
slh_dsa_shake_192s;
939+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-shake-128s'}) ->
940+
slh_dsa_shake_128s;
941+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-sha2-256f'}) ->
942+
slh_dsa_sha2_256f;
943+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-sha2-192f'}) ->
944+
slh_dsa_sha2_192f;
945+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-sha2-128f'}) ->
946+
slh_dsa_sha2_128f;
947+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-sha2-256s'}) ->
948+
slh_dsa_sha2_256s;
949+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-sha2-192s'}) ->
950+
slh_dsa_sha2_192s;
951+
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?'id-slh-dsa-sha2-128s'}) ->
952+
slh_dsa_sha2_128s;
893953
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?sha256WithRSAEncryption}) ->
894954
rsa_pkcs1_sha256;
895955
signature_algorithm_to_scheme(#'SignatureAlgorithm'{algorithm = ?sha384WithRSAEncryption}) ->

lib/ssl/src/ssl_config.erl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ group_pairs([#{certs := []}]) ->
162162
rsa_pss_pss => [],
163163
rsa => [],
164164
mldsa => [],
165+
slhdsa => [],
165166
dsa => []
166167
};
167168
group_pairs(Pairs) ->
@@ -170,6 +171,7 @@ group_pairs(Pairs) ->
170171
rsa_pss_pss => [],
171172
rsa => [],
172173
mldsa => [],
174+
slhdsa => [],
173175
dsa => []
174176
}).
175177

@@ -188,6 +190,8 @@ group_pairs([#{private_key := #'RSAPrivateKey'{}} = Pair | Rest], #{rsa := RSA}
188190
group_pairs(Rest, Group#{rsa => [Pair | RSA]});
189191
group_pairs([#{private_key := #'ML-DSAPrivateKey'{}} = Pair | Rest], #{mldsa := MLDSA} = Group) ->
190192
group_pairs(Rest, Group#{mldsa => [Pair | MLDSA]});
193+
group_pairs([#{private_key := #'SLH-DSAPrivateKey'{}} = Pair | Rest], #{slhdsa := SLHDSA} = Group) ->
194+
group_pairs(Rest, Group#{slhdsa => [Pair | SLHDSA]});
191195
group_pairs([#{private_key := #'DSAPrivateKey'{}} = Pair | Rest], #{dsa := DSA} = Group) ->
192196
group_pairs(Rest, Group#{dsa => [Pair | DSA]});
193197
group_pairs([#{private_key := #{algorithm := dss, engine := _}} = Pair | Rest], Group) ->
@@ -207,13 +211,15 @@ prioritize_groups(#{eddsa := EDDSA,
207211
rsa_pss_pss := RSAPSS,
208212
rsa := RSA,
209213
mldsa := MLDSA,
214+
slhdsa := SLHDSA,
210215
dsa := DSA} = CertKeyGroups, Opts) ->
211216
EC = ecdsa_support(Opts),
212217
CertKeyGroups#{eddsa => prio_eddsa(EDDSA),
213218
ecdsa => prio_ecdsa(ECDSA, EC),
214219
rsa_pss_pss => prio_rsa_pss(RSAPSS),
215220
rsa => prio_rsa(RSA),
216221
mldsa => prio_mldsa(MLDSA),
222+
slhdsa => prio_slhdsa(SLHDSA),
217223
dsa => prio_dsa(DSA)}.
218224
prio_eddsa(EDDSA) ->
219225
%% Engine not supported yet
@@ -276,6 +282,12 @@ prio_mldsa(MLDSA) ->
276282
SignFunPairs
277283
++ lists:keysort(#'ML-DSAPrivateKey'.algorithm, MLDSA -- SignFunPairs).
278284

285+
prio_slhdsa(SLHDSA) ->
286+
%% Engine not supported yet
287+
SignFunPairs = [Pair || Pair = #{private_key := #{sign_fun := _}} <- SLHDSA],
288+
SignFunPairs
289+
++ lists:keysort(#'SLH-DSAPrivateKey'.algorithm, SLHDSA -- SignFunPairs).
290+
279291
prio_dsa(DSA) ->
280292
Order = fun(#{key := #'DSAPrivateKey'{q = N}},
281293
#{key := #'DSAPrivateKey'{q = M}}) when M > N ->
@@ -309,6 +321,22 @@ private_key(#'PrivateKeyInfo'{privateKeyAlgorithm =
309321
#'PrivateKeyInfo_privateKeyAlgorithm'{algorithm = ?'id-ml-dsa-87'},
310322
privateKey = DerKey}) ->
311323
mldsa_priv_key_dec('ML-DSA-87-PrivateKey', DerKey, #'ML-DSAPrivateKey'{algorithm = mldsa87});
324+
private_key(#'PrivateKeyInfo'{privateKeyAlgorithm =
325+
#'PrivateKeyInfo_privateKeyAlgorithm'{
326+
algorithm = Algorithm},
327+
privateKey = DerKey}) when Algorithm == ?'id-slh-dsa-sha2-128f';
328+
Algorithm == ?'id-slh-dsa-sha2-128s';
329+
Algorithm == ?'id-slh-dsa-sha2-192f';
330+
Algorithm == ?'id-slh-dsa-sha2-192s';
331+
Algorithm == ?'id-slh-dsa-sha2-256f';
332+
Algorithm == ?'id-slh-dsa-sha2-256s';
333+
Algorithm == ?'id-slh-dsa-shake-128f';
334+
Algorithm == ?'id-slh-dsa-shake-128s';
335+
Algorithm == ?'id-slh-dsa-shake-192f';
336+
Algorithm == ?'id-slh-dsa-shake-192s';
337+
Algorithm == ?'id-slh-dsa-shake-256f';
338+
Algorithm == ?'id-slh-dsa-shake-256s' ->
339+
public_key:der_decode('SLH-DSA-PrivateKey', DerKey);
312340
private_key(#'PrivateKeyInfo'{privateKeyAlgorithm =
313341
#'PrivateKeyInfo_privateKeyAlgorithm'{algorithm = ?'id-ecPublicKey',
314342
parameters = {asn1_OPENTYPE, Parameters}},
@@ -2240,6 +2268,8 @@ check_key(#'ECPrivateKey'{}) ->
22402268
ok;
22412269
check_key(#'ML-DSAPrivateKey'{}) ->
22422270
ok;
2271+
check_key(#'SLH-DSAPrivateKey'{}) ->
2272+
ok;
22432273
check_key(NotKey) ->
22442274
{error, {unexpected_content, NotKey}}.
22452275

lib/ssl/src/ssl_handshake.erl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,6 @@
5050
#client_key_exchange{} | #finished{} | #certificate_verify{} |
5151
#hello_request{} | #next_protocol{} | #end_of_early_data{}.
5252

53-
%% Needed for legacy TLS-1.0 and TLS-1.1 functionality
54-
-compile({nowarn_deprecated_function, [{crypto, private_encrypt, 4},
55-
{crypto, private_decrypt, 4},
56-
{public_key, encrypt_private, 3},
57-
{public_key, decrypt_private, 3},
58-
{public_key, encrypt_public, 3},
59-
{public_key, decrypt_public, 3}
60-
]}).
61-
6253
%% Create handshake messages
6354
-export([hello_request/0,
6455
server_hello/4,
@@ -462,6 +453,8 @@ verify_signature(?TLS_1_3, Msg, {_, mldsa65}, Signature,
462453
verify_signature(?TLS_1_3, Msg, {_, mldsa87}, Signature,
463454
{?'id-ml-dsa-87', #'ML-DSAPublicKey'{algorithm = mldsa87} = PubKey,_}) ->
464455
public_key:verify(Msg, none, Signature, PubKey);
456+
verify_signature(?TLS_1_3, Msg, {_ , slhdsa}, Signature, {_, #'SLH-DSAPublicKey'{} = PubKey,_}) ->
457+
public_key:verify(Msg, none, Signature, PubKey);
465458
verify_signature(?TLS_1_3, Msg, {_, eddsa}, Signature, {?'id-Ed25519', PubKey, PubKeyParams}) ->
466459
public_key:verify(Msg, none, Signature, {PubKey, PubKeyParams});
467460
verify_signature(?TLS_1_3, Msg, {_, eddsa}, Signature, {?'id-Ed448', PubKey, PubKeyParams}) ->
@@ -2220,6 +2213,11 @@ do_digitally_signed(Version, Msg, HashAlgo, #'ML-DSAPrivateKey'{}= Key,
22202213
SignAlgo == mldsa65 orelse
22212214
SignAlgo == mldsa87) ->
22222215
public_key:sign(Msg, HashAlgo, Key);
2216+
do_digitally_signed(Version, Msg, _, #'SLH-DSAPrivateKey'{}= Key,
2217+
slhdsa) when ?TLS_GTE(Version, ?TLS_1_3) ->
2218+
%% HashAlgo will in this case be the full scheme that public_key/crypto deduces from the key.
2219+
%% and none should be used for second argument.
2220+
public_key:sign(Msg, none, Key);
22232221
do_digitally_signed(Version, Msg, HashAlgo, {#'RSAPrivateKey'{} = Key,
22242222
#'RSASSA-PSS-params'{}},
22252223
SignAlgo) when ?TLS_GTE(Version, ?TLS_1_2) ->
@@ -2286,6 +2284,8 @@ bad_key(#'ECPrivateKey'{}) ->
22862284
unacceptable_ecdsa_key;
22872285
bad_key(#'ML-DSAPrivateKey'{}) ->
22882286
unacceptable_mldsa_key;
2287+
bad_key(#'SLH-DSAPrivateKey'{}) ->
2288+
unacceptable_slhdsa_key;
22892289
bad_key(#{algorithm := rsa}) ->
22902290
unacceptable_rsa_key;
22912291
bad_key(#{algorithm := rsa_pss_pss}) ->

lib/ssl/src/tls_handshake_1_3.erl

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1594,22 +1594,19 @@ select_sign_algo(_, _RSAKeySize, [], _, _) ->
15941594
select_sign_algo(_, _RSAKeySize, undefined, _OwnSignAlgs, _) ->
15951595
{error, ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_public_key)};
15961596
select_sign_algo(PublicKeyAlgo, RSAKeySize, [CertSignAlg|CertSignAlgs], OwnSignAlgs, Curve) ->
1597-
{_, S, _} = ssl_cipher:scheme_to_components(CertSignAlg),
1597+
Sign = case ssl_cipher:scheme_to_components(CertSignAlg) of
1598+
{S, slhdsa, _} ->
1599+
S;
1600+
{_, S, _} ->
1601+
S
1602+
end,
15981603
%% RSASSA-PKCS1-v1_5 and Legacy algorithms are not defined for use in signed
1599-
%% TLS handshake messages: filter sha-1 and rsa_pkcs1.
1604+
%% TLS handshake messages: Has been filtered out in get_signature_scheme_list
16001605
%%
16011606
%% RSASSA-PSS RSAE algorithms: If the public key is carried in an X.509
16021607
%% certificate, it MUST use the rsaEncryption OID.
1603-
%% RSASSA-PSS PSS algorithms: If the public key is carried in an X.509 certificate,
1604-
%% it MUST use the RSASSA-PSS OID.
1605-
case ((PublicKeyAlgo =:= rsa andalso S =:= rsa_pss_rsae)
1606-
orelse (PublicKeyAlgo =:= rsa_pss_pss andalso S =:= rsa_pss_pss)
1607-
orelse (PublicKeyAlgo =:= ecdsa andalso S =:= ecdsa)
1608-
orelse (PublicKeyAlgo =:= eddsa andalso S =:= eddsa)
1609-
orelse (PublicKeyAlgo =:= mldsa44 andalso S =:= mldsa44)
1610-
orelse (PublicKeyAlgo =:= mldsa65 andalso S =:= mldsa65)
1611-
orelse (PublicKeyAlgo =:= mldsa87 andalso S =:= mldsa87)
1612-
)
1608+
case ((PublicKeyAlgo =:= rsa andalso Sign =:= rsa_pss_rsae)
1609+
orelse (PublicKeyAlgo =:= Sign))
16131610
andalso
16141611
lists:member(CertSignAlg, OwnSignAlgs) of
16151612
true ->
@@ -1685,6 +1682,8 @@ compare_sign_algos(rsa, Hash, Algo, Hash)
16851682
when Algo =:= rsa_pss_rsae orelse
16861683
Algo =:= rsa_pkcs1 ->
16871684
true;
1685+
compare_sign_algos(Algo, none, slhdsa, Algo) ->
1686+
true;
16881687
compare_sign_algos(Algo, Hash, Algo, Hash) ->
16891688
true;
16901689
compare_sign_algos(_, _, _, _) ->
@@ -1705,25 +1704,17 @@ oids_to_atoms(?'id-RSASSA-PSS', #'RSASSA-PSS-params'{maskGenAlgorithm =
17051704
oids_to_atoms(SignAlgo, _) ->
17061705
public_key:pkix_sign_types(SignAlgo).
17071706

1708-
%% Note: copied from ssl_handshake
17091707
public_key_algo(?'id-RSASSA-PSS') ->
17101708
rsa_pss_pss;
17111709
public_key_algo(?rsaEncryption) ->
17121710
rsa;
17131711
public_key_algo(?'id-ecPublicKey') ->
17141712
ecdsa;
1715-
public_key_algo(?'id-Ed25519') ->
1716-
eddsa;
1717-
public_key_algo(?'id-Ed448') ->
1718-
eddsa;
1719-
public_key_algo(?'id-ml-dsa-44') ->
1720-
mldsa44;
1721-
public_key_algo(?'id-ml-dsa-65') ->
1722-
mldsa65;
1723-
public_key_algo(?'id-ml-dsa-87') ->
1724-
mldsa87;
17251713
public_key_algo(?'id-dsa') ->
1726-
dsa.
1714+
dsa;
1715+
public_key_algo(Oid) ->
1716+
{_, Algo } =public_key:pkix_sign_types(Oid),
1717+
Algo.
17271718

17281719
get_signature_scheme_list(undefined) ->
17291720
undefined;

lib/ssl/src/tls_handshake_1_3.hrl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,20 @@
166166
-define(MLDSA65, 16#0905).
167167
-define(MLDSA87, 16#0906).
168168

169+
%% SLH-DSA
170+
-define(SLHDSA_SHA2_128S, 16#0911).
171+
-define(SLHDSA_SHA2_128F, 16#0912).
172+
-define(SLHDSA_SHA2_192S, 16#0913).
173+
-define(SLHDSA_SHA2_192F, 16#0914).
174+
-define(SLHDSA_SHA2_256S, 16#0915).
175+
-define(SLHDSA_SHA2_256F, 16#0916).
176+
-define(SLHDSA_SHAKE_128S, 16#0917).
177+
-define(SLHDSA_SHAKE_128F, 16#0918).
178+
-define(SLHDSA_SHAKE_192S, 16#0919).
179+
-define(SLHDSA_SHAKE_192F, 16#091A).
180+
-define(SLHDSA_SHAKE_256S, 16#091B).
181+
-define(SLHDSA_SHAKE_256F, 16#091C).
182+
169183
%% Legacy algorithms
170184
-define(RSA_PKCS1_SHA1, 16#201).
171185
-define(ECDSA_SHA1, 16#0203).

0 commit comments

Comments
 (0)