diff options
author | Ingela Anderton Andin <[email protected]> | 2017-11-10 14:48:42 +0100 |
---|---|---|
committer | Ingela Anderton Andin <[email protected]> | 2017-11-10 14:48:42 +0100 |
commit | e21f3eb30a384fab1db839ac6a21a6f2055cfb6f (patch) | |
tree | 0ff2f3894d3e8e0b372c9eb22b05fc2c23199788 /lib/ssl/src/ssl_handshake.erl | |
parent | 4d9d6776aadee9e0d27b34460fa5269a6b6988aa (diff) | |
parent | 7a0a2e9fa132cba32f4a287d03c04e9ff78a44ec (diff) | |
download | otp-e21f3eb30a384fab1db839ac6a21a6f2055cfb6f.tar.gz otp-e21f3eb30a384fab1db839ac6a21a6f2055cfb6f.tar.bz2 otp-e21f3eb30a384fab1db839ac6a21a6f2055cfb6f.zip |
Merge branch 'ingela/ssl/engine-API/OTP-14448' into maint
* ingela/ssl/engine-API/OTP-14448:
ssl: Add private key configuration for crypto engine
Diffstat (limited to 'lib/ssl/src/ssl_handshake.erl')
-rw-r--r-- | lib/ssl/src/ssl_handshake.erl | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl index 0ee9ee3322..b47a11dc0d 100644 --- a/lib/ssl/src/ssl_handshake.erl +++ b/lib/ssl/src/ssl_handshake.erl @@ -1646,14 +1646,20 @@ digitally_signed(Version, Hashes, HashAlgo, PrivateKey) -> error:badkey-> throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, bad_key(PrivateKey))) end. - +do_digitally_signed({3, Minor}, Hash, HashAlgo, #{algorithm := Alg} = Engine) + when Minor >= 3 -> + crypto:sign(Alg, HashAlgo, {digest, Hash}, maps:remove(algorithm, Engine)); do_digitally_signed({3, Minor}, Hash, HashAlgo, Key) when Minor >= 3 -> public_key:sign({digest, Hash}, HashAlgo, Key); -do_digitally_signed(_Version, Hash, HashAlgo, #'DSAPrivateKey'{} = Key) -> - public_key:sign({digest, Hash}, HashAlgo, Key); do_digitally_signed(_Version, Hash, _HashAlgo, #'RSAPrivateKey'{} = Key) -> public_key:encrypt_private(Hash, Key, [{rsa_pad, rsa_pkcs1_padding}]); +do_digitally_signed({3, _}, Hash, _, + #{algorithm := rsa} = Engine) -> + crypto:private_encrypt(rsa, Hash, maps:remove(algorithm, Engine), + rsa_pkcs1_padding); +do_digitally_signed({3, _}, Hash, HashAlgo, #{algorithm := Alg} = Engine) -> + crypto:sign(Alg, HashAlgo, {digest, Hash}, maps:remove(algorithm, Engine)); do_digitally_signed(_Version, Hash, HashAlgo, Key) -> public_key:sign({digest, Hash}, HashAlgo, Key). |