Skip to content

Commit 4d8b10e

Browse files
committed
ssl: Be explcit about negotiated params
Do not use undocumented OpenSSL "implicit param", rather be explicit about what PSS params that where negotiated.
1 parent ce81cfd commit 4d8b10e

File tree

1 file changed

+24
-17
lines changed

1 file changed

+24
-17
lines changed

lib/ssl/src/ssl_handshake.erl

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -388,15 +388,15 @@ certificate_verify(Signature, PublicKeyInfo, Version,
388388
%% Description: Checks that a public_key signature is valid.
389389
%%--------------------------------------------------------------------
390390
verify_signature(_, Msg, {HashAlgo, SignAlgo}, Signature,
391-
{_, PubKey, PubKeyParams}) when SignAlgo == rsa_pss_rsae;
392-
SignAlgo == rsa_pss_pss ->
393-
Options = verify_options(SignAlgo, HashAlgo, PubKeyParams),
391+
{_, PubKey, _}) when SignAlgo == rsa_pss_rsae;
392+
SignAlgo == rsa_pss_pss ->
393+
Options = verify_options(SignAlgo, HashAlgo),
394394
public_key:verify(Msg, HashAlgo, Signature, PubKey, Options);
395-
verify_signature(Version, Msg, {HashAlgo, SignAlgo}, Signature, {?rsaEncryption, PubKey, PubKeyParams})
395+
verify_signature(Version, Msg, {HashAlgo, SignAlgo}, Signature, {?rsaEncryption, PubKey, _})
396396
when ?TLS_GTE(Version, ?TLS_1_2) ->
397-
Options = verify_options(SignAlgo, HashAlgo, PubKeyParams),
397+
Options = verify_options(SignAlgo, HashAlgo),
398398
public_key:verify(Msg, HashAlgo, Signature, PubKey, Options);
399-
verify_signature(Version, {digest, Digest}, _HashAlgo, Signature, {?rsaEncryption, PubKey, _PubKeyParams})
399+
verify_signature(Version, {digest, Digest}, _HashAlgo, Signature, {?rsaEncryption, PubKey, _})
400400
when ?TLS_LTE(Version, ?TLS_1_1) ->
401401
case public_key:decrypt_public(Signature, PubKey,
402402
[{rsa_pad, rsa_pkcs1_padding}]) of
@@ -2172,25 +2172,32 @@ do_digitally_signed(_, Msg, HashAlgo, Key, SignAlgo) ->
21722172
Options = signature_options(SignAlgo, HashAlgo),
21732173
public_key:sign(Msg, HashAlgo, Key, Options).
21742174

2175-
signature_options(SignAlgo, HashAlgo) when SignAlgo =:= rsa_pss_rsae orelse
2176-
SignAlgo =:= rsa_pss_pss ->
2177-
pss_options(HashAlgo);
2175+
signature_options(rsa_pss_rsae, HashAlgo) ->
2176+
pss_options(HashAlgo, hash_algo_byte_size(HashAlgo));
2177+
signature_options(rsa_pss_pss, HashAlgo) ->
2178+
pss_options(HashAlgo, hash_algo_byte_size(HashAlgo));
21782179
signature_options(_, _) ->
21792180
[].
21802181

2181-
verify_options(SignAlgo, HashAlgo, _KeyParams)
2182-
when SignAlgo =:= rsa_pss_rsae orelse
2183-
SignAlgo =:= rsa_pss_pss ->
2184-
pss_options(HashAlgo);
2185-
verify_options(_, _, _) ->
2182+
verify_options(rsa_pss_rsae, HashAlgo) ->
2183+
pss_options(HashAlgo, hash_algo_byte_size(HashAlgo));
2184+
verify_options(rsa_pss_pss, HashAlgo) ->
2185+
pss_options(HashAlgo, hash_algo_byte_size(HashAlgo));
2186+
verify_options(_, _) ->
21862187
[].
21872188

2188-
pss_options(HashAlgo) ->
2189-
%% of the digest algorithm: rsa_pss_saltlen = -1
2189+
pss_options(HashAlgo, SaltLen) ->
21902190
[{rsa_padding, rsa_pkcs1_pss_padding},
2191-
{rsa_pss_saltlen, -1},
2191+
{rsa_pss_saltlen, SaltLen},
21922192
{rsa_mgf1_md, HashAlgo}].
21932193

2194+
hash_algo_byte_size(sha256) ->
2195+
32;
2196+
hash_algo_byte_size(sha384) ->
2197+
48;
2198+
hash_algo_byte_size(sha512) ->
2199+
64.
2200+
21942201
bad_key(#'DSAPrivateKey'{}) ->
21952202
unacceptable_dsa_key;
21962203
bad_key(#'RSAPrivateKey'{}) ->

0 commit comments

Comments
 (0)