diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2017-06-06 13:37:41 +0100 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2017-06-06 13:37:41 +0100 |
commit | bf0d560938f133df2ebd2026ff80fe3f51f07b40 (patch) | |
tree | 3597b90d4cac65be52d158e9c9a5e75a329d6e0e /doc/man7/RSA-PSS.pod | |
parent | ccd0aeac9f7f9f82e07f0a396c392887ea8fc02d (diff) |
Move and update RSA-PSS documentation.
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3621)
Diffstat (limited to 'doc/man7/RSA-PSS.pod')
-rw-r--r-- | doc/man7/RSA-PSS.pod | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/doc/man7/RSA-PSS.pod b/doc/man7/RSA-PSS.pod new file mode 100644 index 0000000000..719789aec3 --- /dev/null +++ b/doc/man7/RSA-PSS.pod @@ -0,0 +1,111 @@ +=pod + +=head1 NAME + +RSA-PSS - EVP_PKEY RSA-PSS algorithm support + +=head1 SYNOPSIS + + #include <openssl/rsa.h> + + int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *pctx, + const EVP_MD *md); + int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *pctx, + const EVP_MD *md); + int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *pctx, + int saltlen); + +=head1 DESCRIPTION + +The B<RSA-PSS> EVP_PKEY implementation is a restricted version of the RSA +algorithm which only supports signing, verification and key generation +using PSS padding modes with optional parameter restrictions. + +It has associated private key and public key formats. + +This algorithm shares several control operations with the B<RSA> algorithm +but with some restrictions described below. + +=head1 SIGNING AND VERIFICATION + +Siging and verification is similar to the B<RSA> algorithm except the +padding mode is always PSS. If the key in use has parameter restrictions then +the corresponding signature parameters are set to the restrictions: +for example, if the key can only be used with digest SHA256, MGF1 SHA256 +and minimum salt length 32 then the digest, MGF1 digest and salt length +will be set to SHA256, SHA256 and 32 respectively. + +The macro EVP_PKEY_CTX_set_rsa_padding() is supported but an error is +returned if an attempt is made to set the padding mode to anything other +than B<PSS>. It is otherwise similar to the B<RSA> version. + +The EVP_PKEY_CTX_set_rsa_pss_saltlen() macro is used to set the salt length. +If the key has usage restrictions then an error is returned if an attempt is +made to set the salt length below the minimum value. It is otherwise similar +to the B<RSA> operation except detection of the salt length (using +RSA_PSS_SALTLEN_AUTO is not supported for verification if the key has +usage restrictions. + +The EVP_PKEY_CTX_set_signature_md() and EVP_PKEY_CTX_set_rsa_mgf1_md() macros +are used to set the digest and MGF1 algorithms respectively. If the key has +usage restrictions then an error is returned if an attempt is made to set the +digest to anything other than the restricted value. Otherwise these are +similar to the B<RSA> versions. + +=head1 KEY GENERATION + +As with RSA key generation the EVP_PKEY_CTX_set_rsa_rsa_keygen_bits() +and EVP_PKEY_CTX_set_rsa_keygen_pubexp() macros are supported for RSA-PSS: +they have exactly the same meaning as for the RSA algorithm. + +Optional parameter restrictions can be specified when generating a PSS key. By +default no parameter restrictions are placed on the generated key. If any +restrictions are set (using the macros described below) then B<all> parameters +are restricted. For example, setting a minimum salt length also restricts the +digest and MGF1 algorithms. If any restrictions are in place then they are +reflected in the corresponding parameters of the public key when (for example) +a certificate request is signed. + +EVP_PKEY_CTX_set_rsa_pss_keygen_md() restricts the digest algorithm the +generated key can use to B<md>. + +EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md() restricts the MGF1 algorithm the +generated key can use to B<md>. + +EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen() restricts the minimum salt length +to B<saltlen>. + +=head1 NOTES + +A context for the B<RSA-PSS> algorithm can be obtained by calling: + + EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA_PSS, NULL); + +The public key format is documented in RFC4055. + +The PKCS#8 private key format used for RSA-PSS keys is similar to the RSA +format except it uses the B<id-RSASSA-PSS> OID and the parameters field, if +present, restricts the key parameters in the same way as the public key. + +=head1 RETURN VALUES + +All these functions return 1 for success and 0 or a negative value for failure. +In particular a return value of -2 indicates the operation is not supported by +the public key algorithm. + +=head1 SEE ALSO + +L<EVP_PKEY_CTX_new(3)>, +L<EVP_PKEY_CTX_ctrl_str(3)>, +L<EVP_PKEY_derive(3)> + +=head1 COPYRIGHT + +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (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 +L<https://www.openssl.org/source/license.html>. + +=cut |