Add EVP_pkey_rsa_pss_sha384 and EVP_pkey_rsa_pss_sha512 Bug: 384818542 Change-Id: I08807773ff9bc5b977cbc7d5cee249f7a4f97870 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/81989 Auto-Submit: David Benjamin <davidben@google.com> Reviewed-by: Lily Chen <chlily@google.com> Commit-Queue: Lily Chen <chlily@google.com>
diff --git a/crypto/evp/evp_test.cc b/crypto/evp/evp_test.cc index d5952e1..9ea4d8f 100644 --- a/crypto/evp/evp_test.cc +++ b/crypto/evp/evp_test.cc
@@ -95,6 +95,8 @@ static const std::map<std::string, AlgorithmInfo> kAllAlgorithms = { {"RSA", {EVP_pkey_rsa(), EVP_PKEY_RSA, true}}, {"RSA-PSS-SHA-256", {EVP_pkey_rsa_pss_sha256(), EVP_PKEY_RSA_PSS, false}}, + {"RSA-PSS-SHA-384", {EVP_pkey_rsa_pss_sha384(), EVP_PKEY_RSA_PSS, false}}, + {"RSA-PSS-SHA-512", {EVP_pkey_rsa_pss_sha512(), EVP_PKEY_RSA_PSS, false}}, {"EC-P-224", {EVP_pkey_ec_p224(), EVP_PKEY_EC, true}}, {"EC-P-256", {EVP_pkey_ec_p256(), EVP_PKEY_EC, true}}, {"EC-P-384", {EVP_pkey_ec_p384(), EVP_PKEY_EC, true}},
diff --git a/crypto/evp/internal.h b/crypto/evp/internal.h index 3cf0f9d..5d8b0fe 100644 --- a/crypto/evp/internal.h +++ b/crypto/evp/internal.h
@@ -273,13 +273,13 @@ extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meth; extern const EVP_PKEY_ASN1_METHOD ec_asn1_meth; extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD rsa_pss_sha256_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth; extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth; extern const EVP_PKEY_ASN1_METHOD x25519_asn1_meth; extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth; extern const EVP_PKEY_CTX_METHOD rsa_pkey_meth; -extern const EVP_PKEY_CTX_METHOD rsa_pss_sha256_pkey_meth; +extern const EVP_PKEY_CTX_METHOD rsa_pss_pkey_meth; extern const EVP_PKEY_CTX_METHOD ec_pkey_meth; extern const EVP_PKEY_CTX_METHOD ed25519_pkey_meth; extern const EVP_PKEY_CTX_METHOD x25519_pkey_meth;
diff --git a/crypto/evp/p_rsa.cc b/crypto/evp/p_rsa.cc index 0cdfa91..871bb77 100644 --- a/crypto/evp/p_rsa.cc +++ b/crypto/evp/p_rsa.cc
@@ -532,7 +532,7 @@ pkey_rsa_ctrl, }; -const EVP_PKEY_CTX_METHOD rsa_pss_sha256_pkey_meth = { +const EVP_PKEY_CTX_METHOD rsa_pss_pkey_meth = { EVP_PKEY_RSA_PSS, pkey_rsa_init, pkey_rsa_copy,
diff --git a/crypto/evp/p_rsa_asn1.cc b/crypto/evp/p_rsa_asn1.cc index 6598053..cc68849 100644 --- a/crypto/evp/p_rsa_asn1.cc +++ b/crypto/evp/p_rsa_asn1.cc
@@ -27,6 +27,12 @@ #include "internal.h" +namespace { + +struct EVP_PKEY_ALG_RSA_PSS : public EVP_PKEY_ALG { + rsa_pss_params_t pss_params; +}; + static int rsa_pub_encode(CBB *out, const EVP_PKEY *key) { // See RFC 3279, section 2.3.1. const RSA *rsa = reinterpret_cast<const RSA *>(key->pkey); @@ -123,9 +129,8 @@ return evp_decode_ok; } -static evp_decode_result_t rsa_decode_pss_params_sha256(CBS *params) { - // For now, we only support the SHA-256 parameter set. If we want to support - // more, we'll need to record a little more state in the |EVP_PKEY|. +static evp_decode_result_t rsa_decode_pss_params(rsa_pss_params_t expected, + CBS *params) { if (CBS_len(params) == 0) { return evp_decode_unsupported; } @@ -136,17 +141,16 @@ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); return evp_decode_error; } - return pss_params == rsa_pss_sha256 ? evp_decode_ok : evp_decode_unsupported; + return pss_params == expected ? evp_decode_ok : evp_decode_unsupported; } -static int rsa_pub_encode_pss_sha256(CBB *out, const EVP_PKEY *key) { +static int rsa_pub_encode_pss(CBB *out, const EVP_PKEY *key) { const RSA *rsa = reinterpret_cast<const RSA *>(key->pkey); CBB spki, algorithm, key_bitstring; if (!CBB_add_asn1(out, &spki, CBS_ASN1_SEQUENCE) || !CBB_add_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) || - !CBB_add_asn1_element(&algorithm, CBS_ASN1_OBJECT, - rsa_pss_sha256_asn1_meth.oid, - rsa_pss_sha256_asn1_meth.oid_len) || + !CBB_add_asn1_element(&algorithm, CBS_ASN1_OBJECT, rsa_pss_asn1_meth.oid, + rsa_pss_asn1_meth.oid_len) || !rsa_marshal_pss_params(&algorithm, rsa->pss_params) || !CBB_add_asn1(&spki, &key_bitstring, CBS_ASN1_BITSTRING) || !CBB_add_u8(&key_bitstring, 0 /* padding */) || @@ -159,10 +163,11 @@ return 1; } -static evp_decode_result_t rsa_pub_decode_pss_sha256(const EVP_PKEY_ALG *alg, +static evp_decode_result_t rsa_pub_decode_pss(const EVP_PKEY_ALG *alg, EVP_PKEY *out, CBS *params, CBS *key) { - evp_decode_result_t ret = rsa_decode_pss_params_sha256(params); + const auto *alg_pss = static_cast<const EVP_PKEY_ALG_RSA_PSS *>(alg); + evp_decode_result_t ret = rsa_decode_pss_params(alg_pss->pss_params, params); if (ret != evp_decode_ok) { return ret; } @@ -174,20 +179,19 @@ return evp_decode_error; } - rsa->pss_params = rsa_pss_sha256; - evp_pkey_set0(out, &rsa_pss_sha256_asn1_meth, rsa.release()); + rsa->pss_params = alg_pss->pss_params; + evp_pkey_set0(out, &rsa_pss_asn1_meth, rsa.release()); return evp_decode_ok; } -static int rsa_priv_encode_pss_sha256(CBB *out, const EVP_PKEY *key) { +static int rsa_priv_encode_pss(CBB *out, const EVP_PKEY *key) { const RSA *rsa = reinterpret_cast<const RSA *>(key->pkey); CBB pkcs8, algorithm, private_key; if (!CBB_add_asn1(out, &pkcs8, CBS_ASN1_SEQUENCE) || !CBB_add_asn1_uint64(&pkcs8, 0 /* version */) || !CBB_add_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) || - !CBB_add_asn1_element(&algorithm, CBS_ASN1_OBJECT, - rsa_pss_sha256_asn1_meth.oid, - rsa_pss_sha256_asn1_meth.oid_len) || + !CBB_add_asn1_element(&algorithm, CBS_ASN1_OBJECT, rsa_pss_asn1_meth.oid, + rsa_pss_asn1_meth.oid_len) || !rsa_marshal_pss_params(&algorithm, rsa->pss_params) || !CBB_add_asn1(&pkcs8, &private_key, CBS_ASN1_OCTETSTRING) || !RSA_marshal_private_key(&private_key, rsa) || // @@ -199,10 +203,11 @@ return 1; } -static evp_decode_result_t rsa_priv_decode_pss_sha256(const EVP_PKEY_ALG *alg, - EVP_PKEY *out, - CBS *params, CBS *key) { - evp_decode_result_t ret = rsa_decode_pss_params_sha256(params); +static evp_decode_result_t rsa_priv_decode_pss(const EVP_PKEY_ALG *alg, + EVP_PKEY *out, CBS *params, + CBS *key) { + const auto *alg_pss = static_cast<const EVP_PKEY_ALG_RSA_PSS *>(alg); + evp_decode_result_t ret = rsa_decode_pss_params(alg_pss->pss_params, params); if (ret != evp_decode_ok) { return ret; } @@ -214,8 +219,8 @@ return evp_decode_error; } - rsa->pss_params = rsa_pss_sha256; - evp_pkey_set0(out, &rsa_pss_sha256_asn1_meth, rsa.release()); + rsa->pss_params = alg_pss->pss_params; + evp_pkey_set0(out, &rsa_pss_asn1_meth, rsa.release()); return evp_decode_ok; } @@ -239,6 +244,8 @@ pkey->pkey = NULL; } +} // namespace + const EVP_PKEY_ASN1_METHOD rsa_asn1_meth = { EVP_PKEY_RSA, // 1.2.840.113549.1.1.1 @@ -273,20 +280,20 @@ int_rsa_free, }; -const EVP_PKEY_ASN1_METHOD rsa_pss_sha256_asn1_meth = { +const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = { EVP_PKEY_RSA_PSS, // 1.2.840.113549.1.1.10 {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0a}, 9, - &rsa_pss_sha256_pkey_meth, + &rsa_pss_pkey_meth, - rsa_pub_decode_pss_sha256, - rsa_pub_encode_pss_sha256, + rsa_pub_decode_pss, + rsa_pub_encode_pss, rsa_pub_cmp, - rsa_priv_decode_pss_sha256, - rsa_priv_encode_pss_sha256, + rsa_priv_decode_pss, + rsa_priv_encode_pss, /*set_priv_raw=*/nullptr, /*set_pub_raw=*/nullptr, @@ -314,7 +321,20 @@ } const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha256(void) { - static const EVP_PKEY_ALG kAlg = {&rsa_pss_sha256_asn1_meth}; + static const EVP_PKEY_ALG_RSA_PSS kAlg = {{&rsa_pss_asn1_meth}, + rsa_pss_sha256}; + return &kAlg; +} + +const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha384(void) { + static const EVP_PKEY_ALG_RSA_PSS kAlg = {{&rsa_pss_asn1_meth}, + rsa_pss_sha384}; + return &kAlg; +} + +const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha512(void) { + static const EVP_PKEY_ALG_RSA_PSS kAlg = {{&rsa_pss_asn1_meth}, + rsa_pss_sha512}; return &kAlg; }
diff --git a/crypto/evp/test/rsa_tests.txt b/crypto/evp/test/rsa_tests.txt index 451a69d..d80d012 100644 --- a/crypto/evp/test/rsa_tests.txt +++ b/crypto/evp/test/rsa_tests.txt
@@ -70,23 +70,23 @@ Input = 30820120300b06092a864886f70d01010a0382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001 Error = UNSUPPORTED_ALGORITHM -# The same key but constrained to PSS, SHA-384, and salt length >= 48 (not supported) +# The same key but constrained to PSS, SHA-384, and salt length >= 48 PrivateKey = RSA-2048-PSS-SHA384 Input = 308204f0020100304106092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a203020130048204a6308204a20201000282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f02030100010282010060297ac7991b167a06d6b24758b8cbe208beb9b2d9ec9738bd80f90a2e35005dd7ce292d9e29ba885bd316fef1f20913bc0ac90d6b0808b2414d82104441d8624a33ce0233c8f780a48b375aff02d76712228a702484db3f9ebecccfbbee1709dba182800d949e9e4216e0bff3558388f8bd90da373a1d82743ec3fbdd1427fd16825a657a316912e8695365117ca2f845c909405fcac55f895fc15d20386c26ee78c9e99075029a178a6c1e4cf0c200e8a9cfb27e9d156f86e6c2adc22b1a84a1cd5ca5b2790875d79407c84b352395cb81cc3fed5bb043b69ede0c07204550025cee8c5f440170b6120bb48e0f747bcd8f522110850df043c428dfd187053102818100f6f961b47cbc035d3aedebc7de850a956b65ecdb9cf60764063f15aa48553c58d972fe6675056e35ddfdc37bf3b9f2f622ee271337256849c9bef2176fe8f7c3f8bb91ba374dd53baf3dec814d2bdec10c1fdc88cdd16876f26b1edfa3f094197edf4d42ff1fb2971103b898ca859c427287086a842ab410bb69cf2d35af6be302818100d47e724a7ff41048b270c2524a4101878b73159bb73d3dbc187b220e635b3534f96e243a184d93f860b6bfbb6b71c1ed9a1e1f458583023c301e96a692c1a08b53d0ec9ca910100d80451e3b7dc6a01bac4aecef8df798846bc235a08cbba2cf4c06804cc11219e95608c714e3f1430d491fadbba32a5751a04f97745834c9a502818021f2452bb9b95dfd028c914bf799f1ca77e89a95d50d3c16d384f8455f8bd7af9eb3dfa3d591d9842def235f7630a8e48c088ff6642e101794535a933e1e976fa8509fc728b2da0c4a1a08d7fcf37abaae1ff3001aca1dc1bbb05d9dffbaa1a09f7fb1eef38237d9ebccc722b9338436dde7119112798c26809c1a8dec4320610281801f7510aa62c2d8de4a3c53282781f41e02d0e8b402ae78432e449c48110161a11403f02d01880a8dcc938152d79721a4711a607ac4471ebf964810f95be47a45e60499e29f4c9773c83773404f606637728c2d0351bb03c326c8bb73a721e7fa5440ea2172bba1465fcc30dcb0d9f89930e815aa1f7f9729a857e00e0338dd590281804d1f0d756fe77e01099a652f50a88b7b685dc5bf00981d5d2376fd0c6fe29cd5b638734479305a73ad3c1599d39eae3bae035fbd6fed07c28de705933879a06e48e6a603686ed8e2560a5f6af1f2c24faf4aa960e382186f15eedce9a2491ae730680dd4cf778b70faa86826ab3223477cc91377b19a6d5a2eaea219760beed5 -Error = UNSUPPORTED_ALGORITHM +Algorithm = RSA-PSS-SHA-384 PublicKey = RSA-2048-SPKI-PSS-SHA384 Input = 30820156304106092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a2030201300382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001 -Error = UNSUPPORTED_ALGORITHM +Algorithm = RSA-PSS-SHA-384 -# The same key but constrained to PSS, SHA-512, and salt length >= 64 (not supported) +# The same key but constrained to PSS, SHA-512, and salt length >= 64 PrivateKey = RSA-2048-PSS-SHA512 Input = 308204f0020100304106092a864886f70d01010a3034a00f300d06096086480165030402030500a11c301a06092a864886f70d010108300d06096086480165030402030500a203020140048204a6308204a20201000282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f02030100010282010060297ac7991b167a06d6b24758b8cbe208beb9b2d9ec9738bd80f90a2e35005dd7ce292d9e29ba885bd316fef1f20913bc0ac90d6b0808b2414d82104441d8624a33ce0233c8f780a48b375aff02d76712228a702484db3f9ebecccfbbee1709dba182800d949e9e4216e0bff3558388f8bd90da373a1d82743ec3fbdd1427fd16825a657a316912e8695365117ca2f845c909405fcac55f895fc15d20386c26ee78c9e99075029a178a6c1e4cf0c200e8a9cfb27e9d156f86e6c2adc22b1a84a1cd5ca5b2790875d79407c84b352395cb81cc3fed5bb043b69ede0c07204550025cee8c5f440170b6120bb48e0f747bcd8f522110850df043c428dfd187053102818100f6f961b47cbc035d3aedebc7de850a956b65ecdb9cf60764063f15aa48553c58d972fe6675056e35ddfdc37bf3b9f2f622ee271337256849c9bef2176fe8f7c3f8bb91ba374dd53baf3dec814d2bdec10c1fdc88cdd16876f26b1edfa3f094197edf4d42ff1fb2971103b898ca859c427287086a842ab410bb69cf2d35af6be302818100d47e724a7ff41048b270c2524a4101878b73159bb73d3dbc187b220e635b3534f96e243a184d93f860b6bfbb6b71c1ed9a1e1f458583023c301e96a692c1a08b53d0ec9ca910100d80451e3b7dc6a01bac4aecef8df798846bc235a08cbba2cf4c06804cc11219e95608c714e3f1430d491fadbba32a5751a04f97745834c9a502818021f2452bb9b95dfd028c914bf799f1ca77e89a95d50d3c16d384f8455f8bd7af9eb3dfa3d591d9842def235f7630a8e48c088ff6642e101794535a933e1e976fa8509fc728b2da0c4a1a08d7fcf37abaae1ff3001aca1dc1bbb05d9dffbaa1a09f7fb1eef38237d9ebccc722b9338436dde7119112798c26809c1a8dec4320610281801f7510aa62c2d8de4a3c53282781f41e02d0e8b402ae78432e449c48110161a11403f02d01880a8dcc938152d79721a4711a607ac4471ebf964810f95be47a45e60499e29f4c9773c83773404f606637728c2d0351bb03c326c8bb73a721e7fa5440ea2172bba1465fcc30dcb0d9f89930e815aa1f7f9729a857e00e0338dd590281804d1f0d756fe77e01099a652f50a88b7b685dc5bf00981d5d2376fd0c6fe29cd5b638734479305a73ad3c1599d39eae3bae035fbd6fed07c28de705933879a06e48e6a603686ed8e2560a5f6af1f2c24faf4aa960e382186f15eedce9a2491ae730680dd4cf778b70faa86826ab3223477cc91377b19a6d5a2eaea219760beed5 -Error = UNSUPPORTED_ALGORITHM +Algorithm = RSA-PSS-SHA-512 PublicKey = RSA-2048-SPKI-PSS-SHA512 Input = 30820156304106092a864886f70d01010a3034a00f300d06096086480165030402030500a11c301a06092a864886f70d010108300d06096086480165030402030500a2030201400382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001 -Error = UNSUPPORTED_ALGORITHM +Algorithm = RSA-PSS-SHA-512 # The PSS parameter parser should accept both explicit and missing NULL. See # Section 2.1 of RFC 4055. This encoding does not round-trip. When re-encoded, @@ -524,6 +524,48 @@ Input = "0123456789ABCDEF0123456789ABCDEF" Error = INVALID_MGF1_MD +Sign = RSA-2048-PSS-SHA384 +RSAPadding = PSS +PSSSaltLength = 48 +Digest = SHA384 +Input = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" +CheckVerify + +Sign = RSA-2048-PSS-SHA384 +RSAPadding = PSS +PSSSaltLength = 49 +Digest = SHA384 +Input = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" +CheckVerify + +Sign = RSA-2048-PSS-SHA384 +RSAPadding = PSS +PSSSaltLength = 47 +Digest = SHA384 +Input = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" +Error = INVALID_PSS_SALTLEN + +Sign = RSA-2048-PSS-SHA512 +RSAPadding = PSS +PSSSaltLength = 64 +Digest = SHA512 +Input = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" +CheckVerify + +Sign = RSA-2048-PSS-SHA512 +RSAPadding = PSS +PSSSaltLength = 65 +Digest = SHA512 +Input = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" +CheckVerify + +Sign = RSA-2048-PSS-SHA512 +RSAPadding = PSS +PSSSaltLength = 63 +Digest = SHA512 +Input = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" +Error = INVALID_PSS_SALTLEN + # A constrained PSS key defaults to its constraints. Sign = RSA-2048-PSS-SHA256 Input = "0123456789ABCDEF0123456789ABCDEF"
diff --git a/include/openssl/evp.h b/include/openssl/evp.h index 91d7c89..b4f2252 100644 --- a/include/openssl/evp.h +++ b/include/openssl/evp.h
@@ -172,13 +172,13 @@ // request |EVP_pkey_dsa|, we could change that. OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_dsa(void); -// EVP_pkey_rsa_pss_sha256 implements RSASSA-PSS keys, encoded as id-RSASSA-PSS -// (RFC 4055, Section 3.1). The |EVP_PKEY_id| value is |EVP_PKEY_RSA_PSS|. This +// EVP_pkey_rsa_pss_* implements RSASSA-PSS keys, encoded as id-RSASSA-PSS +// (RFC 4055, Section 3.1). The |EVP_PKEY_id| value is |EVP_PKEY_RSA_PSS|. Each // |EVP_PKEY_ALG| only accepts keys whose parameters specify: // -// - A hashAlgorithm of SHA-256 -// - A maskGenAlgorithm of MGF1 with SHA-256 -// - A minimum saltLength of 32 +// - A hashAlgorithm of the specified hash +// - A maskGenAlgorithm of MGF1 with the specified hash +// - A minimum saltLength of the specified hash's digest length // - A trailerField of one (must be omitted in the encoding) // // Keys of this type will only be usable with RSASSA-PSS with matching signature @@ -208,6 +208,8 @@ // these keys. Callers that require this functionality should contact the // BoringSSL team. OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha256(void); +OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha384(void); +OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha512(void); // Getting and setting concrete key types.
diff --git a/include/openssl/rsa.h b/include/openssl/rsa.h index 71ce444..8fbb1ae 100644 --- a/include/openssl/rsa.h +++ b/include/openssl/rsa.h
@@ -767,9 +767,9 @@ // id-RSASSA-PSS key encoding by default. // // WARNING: BoringSSL does support id-RSASSA-PSS parameters when callers opt in -// (see |EVP_pkey_rsa_pss_sha256|). We currently assume such callers do not need -// this function. Callers that opt into id-RSASSA-PSS support and require this -// functionality should contact the BoringSSL team. +// (see |EVP_pkey_rsa_pss_sha256| and others). We currently assume such callers +// do not need this function. Callers that opt into id-RSASSA-PSS support and +// require this functionality should contact the BoringSSL team. OPENSSL_EXPORT const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *rsa); // RSA_new_method_no_e returns a newly-allocated |RSA| object backed by