@@ -388,15 +388,15 @@ certificate_verify(Signature, PublicKeyInfo, Version,
388388% % Description: Checks that a public_key signature is valid.
389389% %--------------------------------------------------------------------
390390verify_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 ));
21782179signature_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+
21942201bad_key (# 'DSAPrivateKey' {}) ->
21952202 unacceptable_dsa_key ;
21962203bad_key (# 'RSAPrivateKey' {}) ->
0 commit comments