EVP_SIGNATURE-RSA(7ossl)
π NAME π
okay so bestie, this page is EVP_SIGNATURE-RSA β the EVP_PKEY RSA signature implementation. that's it, that's the whole name. it lives in the OpenSSL 7ossl manual section and it's literally the glow-up guide for how RSA signing works under the hood. π
β¨ DESCRIPTION β¨
it's support for computing RSA signatures. periodt. π
if you need the tea on RSA keys themselves (like, the actual key objects, not the signing bit), that's a different page β go read EVP_PKEY-RSA(7). π¦
π Algorithm Names
okay so in this list, the names are grouped together to signify that they're the same algorithm just with multiple names. no cap. and yes β that grouping also includes the OID in canonical decimal form, which (fun fact) means you can totally fetch them if all your caller has is a bare OID that came out in this form after a call to OBJ_obj2txt(3). iykyk. π
"RSA","rsaEncryption","1.2.840.113549.1.1.1"β the base signature algorithm. it's supported explicitly fetched withEVP_PKEY_sign_init_ex2(3), and implicitly fetched (through RSA keys) withEVP_DigestSignInit(3)andEVP_DigestVerifyInit(3).
β οΈ heads up bestie β it can't be used with EVP_PKEY_sign_message_init(3). don't try it. π
"RSA-RIPEMD160","ripemd160WithRSA","1.3.36.3.3.1.2""RSA-SHA2-256","RSA-SHA256","sha256WithRSAEncryption","1.2.840.113549.1.1.11""RSA-SHA2-384","RSA-SHA384","sha384WithRSAEncryption","1.2.840.113549.1.1.12""RSA-SHA2-512","RSA-SHA512","sha512WithRSAEncryption","1.2.840.113549.1.1.13""RSA-SHA2-224","RSA-SHA224","sha224WithRSAEncryption","1.2.840.113549.1.1.14""RSA-SHA2-512/224","RSA-SHA512-224","sha512-224WithRSAEncryption","1.2.840.113549.1.1.15""RSA-SHA2-512/256","RSA-SHA512-256","sha512-256WithRSAEncryption","1.2.840.113549.1.1.16""RSA-SHA3-224","id-rsassa-pkcs1-v1_5-with-sha3-224","2.16.840.1.101.3.4.3.13""RSA-SHA3-256","id-rsassa-pkcs1-v1_5-with-sha3-256","2.16.840.1.101.3.4.3.14""RSA-SHA3-384","id-rsassa-pkcs1-v1_5-with-sha3-384","2.16.840.1.101.3.4.3.15""RSA-SHA3-512","id-rsassa-pkcs1-v1_5-with-sha3-512","2.16.840.1.101.3.4.3.16""RSA-SM3","sm3WithRSAEncryption","1.2.156.10197.1.504"
so those last batch β from "RSA-RIPEMD160" all the way down to "RSA-SM3" β are the PKCS#1 v1.5 RSA signature schemes with a whole diverse squad of message digest algorithms. π«Ά they are all supported explicitly fetched with EVP_PKEY_sign_init_ex2(3) and EVP_PKEY_sign_message_init(3). and they are all pre-set to use the pad mode "pkcs1".
π and that pad mode cannot be changed. it's giving "no notes, this is the final answer". don't come for it, it's not switching up for you. periodt.
π§ Signature Parameters
the following signature parameters can be set using EVP_PKEY_CTX_set_params(). πΈ
you can call this after EVP_PKEY_sign_init() or EVP_PKEY_verify_init(), and before calling EVP_PKEY_sign() or EVP_PKEY_verify(). you can also set them using EVP_PKEY_sign_init_ex() or EVP_PKEY_verify_init_ex(). so many doors, same room, love that for us. π
"digest"(OSSL_SIGNATURE_PARAM_DIGEST)<UTF8 string>"properties"(OSSL_SIGNATURE_PARAM_PROPERTIES)<UTF8 string>
btw these two are not supported with the RSA signature schemes that already include a message digest algorithm β go look back up at "Algorithm Names", bestie, it's right there. π
these common parameters are described in provider-signature(7).
"pad-mode"(OSSL_SIGNATURE_PARAM_PAD_MODE)<UTF8 string>β the type of padding to be used. its value can be one of these:"none"(OSSL_PKEY_RSA_PAD_MODE_NONE)"pkcs1"(OSSL_PKEY_RSA_PAD_MODE_PKCSV15)"x931"(OSSL_PKEY_RSA_PAD_MODE_X931)- β οΈ this padding mode is no longer supported by the FIPS provider for signature generation, but it may be used for signature verification for legacy use cases. (this is a FIPS 140-3 requirement β not us being dramatic, it's literally the rules.) π
"pss"(OSSL_PKEY_RSA_PAD_MODE_PSS)
"mgf1-digest"(OSSL_SIGNATURE_PARAM_MGF1_DIGEST)<UTF8 string>β the digest algorithm name to use for themaskGenAlgorithmused by"pss"mode. π"mgf1-properties"(OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES)<UTF8 string>β sets the name of the property query associated with the"mgf1-digest"algorithm.NULLis used if this optional value is not set. π¦"saltlen"(OSSL_SIGNATURE_PARAM_PSS_SALTLEN)<integer>or<UTF8 string>β the"pss"mode minimum salt length. the value can either be an integer, a string value representing a number, or one of these iconic string values:"digest"(OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST) β use the same length as the digest size. π"max"(OSSL_PKEY_RSA_PSS_SALT_LEN_MAX) β use the maximum salt length. π₯"auto"(OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO) β auto detect the salt length. β¨"auto-digestmax"(OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX) β auto detect the salt length when verifying. maximize the salt length up to the digest size when signing, to comply with FIPS 186-4 section 5.5. π
the OpenSSL FIPS provider also supports the following parameters, bestie, keep up:
"key-check"(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK)<integer>"digest-check"(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK)<integer>"sign-x931-pad-check"(OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK)<integer>
these parameters are described in provider-signature(7). π«Ά
"rsa-pss-saltlen-check"(OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK)<integer>β the default value of1causes an error during signature generation or verification if salt length (OSSL_SIGNATURE_PARAM_PSS_SALTLEN) is not between zero and the output block size of the digest function (inclusive). setting this to zero will ignore the error and set the approved"fips-indicator"to0.
π¨ and listen β this option breaks FIPS compliance if it causes the approved"fips-indicator"to return0. like, actually. not a vibe. be careful. π
the following signature parameters can be retrieved using EVP_PKEY_CTX_get_params(). π
"algorithm-id"(OSSL_SIGNATURE_PARAM_ALGORITHM_ID)<octet string>"fips-indicator"(OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR)<integer>"verify-message"(OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE <integer>
these common parameter are described in provider-signature(7). (yes, the original says "parameter" singular, we're leaving it, it's camp π
)
"digest"(OSSL_SIGNATURE_PARAM_DIGEST)<UTF8 string>"pad-mode"(OSSL_SIGNATURE_PARAM_PAD_MODE)<UTF8 string>"mgf1-digest"(OSSL_SIGNATURE_PARAM_MGF1_DIGEST)<UTF8 string>"saltlen"(OSSL_SIGNATURE_PARAM_PSS_SALTLEN)<integer>or<UTF8 string>
these parameters are as described above. β¬οΈ scroll up bestie, they're the same ones, we're just reading them back now. π
πΈ SEE ALSO πΈ
go read these next, they're all linked in the group chat:
π COPYRIGHT π
Copyright 2020-2026 The OpenSSL Project Authors. All Rights Reserved. π
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>. π
okay that's the whole page, you ate that. this was OpenSSL 3.5.6, dated 2026-04-07 β mwah, go sign something. π β¨π
π¦ where this page comes from
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms