Increase the default security level to 2
[openssl.git] / include / openssl / rsa.h
index 31bd0b239e8f027aff66441da4725f3ec1db6e1b..a55c9727c6b9b87b27f79ec16ef008d0c6f884f3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2021 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
 
 # include <openssl/opensslconf.h>
 
-# ifndef OPENSSL_NO_RSA
-#  include <openssl/asn1.h>
-#  include <openssl/bio.h>
-#  include <openssl/crypto.h>
-#  include <openssl/types.h>
-#  ifndef OPENSSL_NO_DEPRECATED_1_1_0
-#   include <openssl/bn.h>
-#  endif
-#  include <openssl/rsaerr.h>
-#  include <openssl/safestack.h>
+# include <openssl/asn1.h>
+# include <openssl/bio.h>
+# include <openssl/crypto.h>
+# include <openssl/types.h>
+# ifndef OPENSSL_NO_DEPRECATED_1_1_0
+#  include <openssl/bn.h>
+# endif
+# include <openssl/rsaerr.h>
+# include <openssl/safestack.h>
 
-#  ifdef  __cplusplus
+# ifdef  __cplusplus
 extern "C" {
-#  endif
+# endif
 
-#  ifndef OPENSSL_RSA_MAX_MODULUS_BITS
-#   define OPENSSL_RSA_MAX_MODULUS_BITS   16384
-#  endif
+# ifndef OPENSSL_RSA_MAX_MODULUS_BITS
+#  define OPENSSL_RSA_MAX_MODULUS_BITS   16384
+# endif
 
-#  define RSA_3   0x3L
-#  define RSA_F4  0x10001L
+# define RSA_3   0x3L
+# define RSA_F4  0x10001L
 
-#  ifndef OPENSSL_NO_DEPRECATED_3_0
+# ifndef OPENSSL_NO_DEPRECATED_3_0
 /* The types RSA and RSA_METHOD are defined in ossl_typ.h */
 
-#   define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048
+#  define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048
 
-#   ifndef OPENSSL_RSA_SMALL_MODULUS_BITS
-#    define OPENSSL_RSA_SMALL_MODULUS_BITS 3072
-#   endif
+#  ifndef OPENSSL_RSA_SMALL_MODULUS_BITS
+#   define OPENSSL_RSA_SMALL_MODULUS_BITS 3072
+#  endif
 
 /* exponent limit enforced for "large" modulus only */
-#   ifndef OPENSSL_RSA_MAX_PUBEXP_BITS
-#    define OPENSSL_RSA_MAX_PUBEXP_BITS    64
-#   endif
+#  ifndef OPENSSL_RSA_MAX_PUBEXP_BITS
+#   define OPENSSL_RSA_MAX_PUBEXP_BITS    64
+#  endif
 /* based on RFC 8017 appendix A.1.2 */
-#   define RSA_ASN1_VERSION_DEFAULT        0
-#   define RSA_ASN1_VERSION_MULTI          1
+#  define RSA_ASN1_VERSION_DEFAULT        0
+#  define RSA_ASN1_VERSION_MULTI          1
 
-#   define RSA_DEFAULT_PRIME_NUM           2
+#  define RSA_DEFAULT_PRIME_NUM           2
 
-#   define RSA_METHOD_FLAG_NO_CHECK        0x0001
-#   define RSA_FLAG_CACHE_PUBLIC           0x0002
-#   define RSA_FLAG_CACHE_PRIVATE          0x0004
-#   define RSA_FLAG_BLINDING               0x0008
-#   define RSA_FLAG_THREAD_SAFE            0x0010
+#  define RSA_METHOD_FLAG_NO_CHECK        0x0001
+#  define RSA_FLAG_CACHE_PUBLIC           0x0002
+#  define RSA_FLAG_CACHE_PRIVATE          0x0004
+#  define RSA_FLAG_BLINDING               0x0008
+#  define RSA_FLAG_THREAD_SAFE            0x0010
 /*
  * This flag means the private key operations will be handled by rsa_mod_exp
  * and that they do not depend on the private key components being present:
  * for example a key stored in external hardware. Without this flag
  * bn_mod_exp gets called when private key components are absent.
  */
-#   define RSA_FLAG_EXT_PKEY               0x0020
+#  define RSA_FLAG_EXT_PKEY               0x0020
 
 /*
  * new with 0.9.6j and 0.9.7b; the built-in
@@ -78,14 +77,14 @@ extern "C" {
  * default (ignoring RSA_FLAG_BLINDING),
  * but other engines might not need it
  */
-#   define RSA_FLAG_NO_BLINDING            0x0080
-#  endif /* OPENSSL_NO_DEPRECATED_3_0 */
+#  define RSA_FLAG_NO_BLINDING            0x0080
+# endif /* OPENSSL_NO_DEPRECATED_3_0 */
 /*
  * Does nothing. Previously this switched off constant time behaviour.
  */
-#  ifndef OPENSSL_NO_DEPRECATED_1_1_0
-#   define RSA_FLAG_NO_CONSTTIME           0x0000
-#  endif
+# ifndef OPENSSL_NO_DEPRECATED_1_1_0
+#  define RSA_FLAG_NO_CONSTTIME           0x0000
+# endif
 /* deprecated name for the flag*/
 /*
  * new with 0.9.7h; the built-in RSA
@@ -95,9 +94,9 @@ extern "C" {
  * faster variable sliding window method to
  * be used for all exponents.
  */
-#  ifndef OPENSSL_NO_DEPRECATED_0_9_8
-#   define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME
-#  endif
+# ifndef OPENSSL_NO_DEPRECATED_0_9_8
+#  define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME
+# endif
 
 /*-
  * New with 3.0: use part of the flags to denote exact type of RSA key,
@@ -112,10 +111,10 @@ extern "C" {
  *
  * 4 bits allow for 16 types
  */
-#  define RSA_FLAG_TYPE_MASK            0xF000
-#  define RSA_FLAG_TYPE_RSA             0x0000
-#  define RSA_FLAG_TYPE_RSASSAPSS       0x1000
-#  define RSA_FLAG_TYPE_RSAESOAEP       0x2000
+# define RSA_FLAG_TYPE_MASK            0xF000
+# define RSA_FLAG_TYPE_RSA             0x0000
+# define RSA_FLAG_TYPE_RSASSAPSS       0x1000
+# define RSA_FLAG_TYPE_RSAESOAEP       0x2000
 
 int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad_mode);
 int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad_mode);
@@ -127,19 +126,19 @@ int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits);
 int EVP_PKEY_CTX_set1_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp);
 int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes);
 int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int saltlen);
-#  ifndef OPENSSL_NO_DEPRECATED_3_0
+# ifndef OPENSSL_NO_DEPRECATED_3_0
 OSSL_DEPRECATEDIN_3_0
 int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp);
-#  endif
+# endif
 
 /* Salt length matches digest */
-#  define RSA_PSS_SALTLEN_DIGEST -1
+# define RSA_PSS_SALTLEN_DIGEST -1
 /* Verify only: auto detect salt length */
-#  define RSA_PSS_SALTLEN_AUTO   -2
+# define RSA_PSS_SALTLEN_AUTO   -2
 /* Set salt length to maximum possible */
-#  define RSA_PSS_SALTLEN_MAX    -3
+# define RSA_PSS_SALTLEN_MAX    -3
 /* Old compatible max salt length for sign only */
-#  define RSA_PSS_SALTLEN_MAX_SIGN    -2
+# define RSA_PSS_SALTLEN_MAX_SIGN    -2
 
 int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
 int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname,
@@ -151,6 +150,11 @@ int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md)
 int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name(EVP_PKEY_CTX *ctx,
                                                  const char *mdname);
 
+int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
+int EVP_PKEY_CTX_set_rsa_pss_keygen_md_name(EVP_PKEY_CTX *ctx,
+                                            const char *mdname,
+                                            const char *mdprops);
+
 int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
 int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname,
                                       const char *mdprops);
@@ -160,47 +164,40 @@ int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name,
 int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, int llen);
 int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label);
 
-#  define  EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \
-        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS,  \
-                          EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD,  \
-                          0, (void *)(md))
-
-
-#  define EVP_PKEY_CTRL_RSA_PADDING       (EVP_PKEY_ALG_CTRL + 1)
-#  define EVP_PKEY_CTRL_RSA_PSS_SALTLEN   (EVP_PKEY_ALG_CTRL + 2)
+# define EVP_PKEY_CTRL_RSA_PADDING       (EVP_PKEY_ALG_CTRL + 1)
+# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN   (EVP_PKEY_ALG_CTRL + 2)
 
-#  define EVP_PKEY_CTRL_RSA_KEYGEN_BITS   (EVP_PKEY_ALG_CTRL + 3)
-#  define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4)
-#  define EVP_PKEY_CTRL_RSA_MGF1_MD       (EVP_PKEY_ALG_CTRL + 5)
+# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS   (EVP_PKEY_ALG_CTRL + 3)
+# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4)
+# define EVP_PKEY_CTRL_RSA_MGF1_MD       (EVP_PKEY_ALG_CTRL + 5)
 
-#  define EVP_PKEY_CTRL_GET_RSA_PADDING           (EVP_PKEY_ALG_CTRL + 6)
-#  define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN       (EVP_PKEY_ALG_CTRL + 7)
-#  define EVP_PKEY_CTRL_GET_RSA_MGF1_MD           (EVP_PKEY_ALG_CTRL + 8)
+# define EVP_PKEY_CTRL_GET_RSA_PADDING           (EVP_PKEY_ALG_CTRL + 6)
+# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN       (EVP_PKEY_ALG_CTRL + 7)
+# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD           (EVP_PKEY_ALG_CTRL + 8)
 
-#  define EVP_PKEY_CTRL_RSA_OAEP_MD       (EVP_PKEY_ALG_CTRL + 9)
-#  define EVP_PKEY_CTRL_RSA_OAEP_LABEL    (EVP_PKEY_ALG_CTRL + 10)
+# define EVP_PKEY_CTRL_RSA_OAEP_MD       (EVP_PKEY_ALG_CTRL + 9)
+# define EVP_PKEY_CTRL_RSA_OAEP_LABEL    (EVP_PKEY_ALG_CTRL + 10)
 
-#  define EVP_PKEY_CTRL_GET_RSA_OAEP_MD   (EVP_PKEY_ALG_CTRL + 11)
-#  define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12)
+# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD   (EVP_PKEY_ALG_CTRL + 11)
+# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12)
 
-#  define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES  (EVP_PKEY_ALG_CTRL + 13)
+# define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES  (EVP_PKEY_ALG_CTRL + 13)
 
-#  define RSA_PKCS1_PADDING          1
-#  define RSA_SSLV23_PADDING         2
-#  define RSA_NO_PADDING             3
-#  define RSA_PKCS1_OAEP_PADDING     4
-#  define RSA_X931_PADDING           5
+# define RSA_PKCS1_PADDING          1
+# define RSA_NO_PADDING             3
+# define RSA_PKCS1_OAEP_PADDING     4
+# define RSA_X931_PADDING           5
 
 /* EVP_PKEY_ only */
-#  define RSA_PKCS1_PSS_PADDING      6
-#  define RSA_PKCS1_WITH_TLS_PADDING 7
+# define RSA_PKCS1_PSS_PADDING      6
+# define RSA_PKCS1_WITH_TLS_PADDING 7
 
-#  define RSA_PKCS1_PADDING_SIZE    11
+# define RSA_PKCS1_PADDING_SIZE    11
 
-#  define RSA_set_app_data(s,arg)         RSA_set_ex_data(s,0,arg)
-#  define RSA_get_app_data(s)             RSA_get_ex_data(s,0)
+# define RSA_set_app_data(s,arg)         RSA_set_ex_data(s,0,arg)
+# define RSA_get_app_data(s)             RSA_get_ex_data(s,0)
 
-#  ifndef OPENSSL_NO_DEPRECATED_3_0
+# ifndef OPENSSL_NO_DEPRECATED_3_0
 OSSL_DEPRECATEDIN_3_0 RSA *RSA_new(void);
 OSSL_DEPRECATEDIN_3_0 RSA *RSA_new_method(ENGINE *engine);
 OSSL_DEPRECATEDIN_3_0 int RSA_bits(const RSA *rsa);
@@ -246,17 +243,20 @@ OSSL_DEPRECATEDIN_3_0 int RSA_test_flags(const RSA *r, int flags);
 OSSL_DEPRECATEDIN_3_0 void RSA_set_flags(RSA *r, int flags);
 OSSL_DEPRECATEDIN_3_0 int RSA_get_version(RSA *r);
 OSSL_DEPRECATEDIN_3_0 ENGINE *RSA_get0_engine(const RSA *r);
-#  endif  /* !OPENSSL_NO_DEPRECATED_3_0 */
+# endif  /* !OPENSSL_NO_DEPRECATED_3_0 */
+
+# define EVP_RSA_gen(bits) \
+    EVP_PKEY_Q_keygen(NULL, NULL, "RSA", (size_t)(0 + (bits)))
 
 /* Deprecated version */
-#  ifndef OPENSSL_NO_DEPRECATED_0_9_8
+# ifndef OPENSSL_NO_DEPRECATED_0_9_8
 OSSL_DEPRECATEDIN_0_9_8 RSA *RSA_generate_key(int bits, unsigned long e, void
                                               (*callback) (int, int, void *),
                                               void *cb_arg);
-#  endif
+# endif
 
 /* New version */
-#  ifndef OPENSSL_NO_DEPRECATED_3_0
+# ifndef OPENSSL_NO_DEPRECATED_3_0
 OSSL_DEPRECATEDIN_3_0 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e,
                                               BN_GENCB *cb);
 /* Multi-prime version */
@@ -308,7 +308,7 @@ DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0,
                                         RSA, RSAPublicKey)
 DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0,
                                         RSA, RSAPrivateKey)
-#  endif  /* !OPENSSL_NO_DEPRECATED_3_0 */
+# endif  /* !OPENSSL_NO_DEPRECATED_3_0 */
 
 int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2);
 
@@ -322,6 +322,7 @@ struct rsa_pss_params_st {
 };
 
 DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS)
+DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS)
 
 typedef struct rsa_oaep_params_st {
     X509_ALGOR *hashFunc;
@@ -333,10 +334,10 @@ typedef struct rsa_oaep_params_st {
 
 DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS)
 
-#  ifndef OPENSSL_NO_DEPRECATED_3_0
-#   ifndef OPENSSL_NO_STDIO
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+#  ifndef OPENSSL_NO_STDIO
 OSSL_DEPRECATEDIN_3_0 int RSA_print_fp(FILE *fp, const RSA *r, int offset);
-#   endif
+#  endif
 
 OSSL_DEPRECATEDIN_3_0 int RSA_print(BIO *bp, const RSA *r, int offset);
 
@@ -407,13 +408,6 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
                                       int num,
                                       const unsigned char *param, int plen,
                                       const EVP_MD *md, const EVP_MD *mgf1md);
-OSSL_DEPRECATEDIN_3_0
-int RSA_padding_add_SSLv23(unsigned char *to, int tlen,
-                           const unsigned char *f, int fl);
-OSSL_DEPRECATEDIN_3_0
-int RSA_padding_check_SSLv23(unsigned char *to, int tlen,
-                             const unsigned char *f, int fl,
-                             int rsa_len);
 OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_none(unsigned char *to, int tlen,
                                                const unsigned char *f, int fl);
 OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_none(unsigned char *to, int tlen,
@@ -446,7 +440,7 @@ int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM,
                                    const EVP_MD *Hash, const EVP_MD *mgf1Hash,
                                    int sLen);
 
-#  define RSA_get_ex_new_index(l, p, newf, dupf, freef) \
+# define RSA_get_ex_new_index(l, p, newf, dupf, freef) \
     CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef)
 OSSL_DEPRECATEDIN_3_0 int RSA_set_ex_data(RSA *r, int idx, void *arg);
 OSSL_DEPRECATEDIN_3_0 void *RSA_get_ex_data(const RSA *r, int idx);
@@ -461,7 +455,7 @@ DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPrivateKey)
  * result is compliant.
  */
 
-#   define RSA_FLAG_FIPS_METHOD                    0x0400
+#  define RSA_FLAG_FIPS_METHOD                    0x0400
 
 /*
  * If this flag is set the operations normally disabled in FIPS mode are
@@ -469,12 +463,12 @@ DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPrivateKey)
  * usage is compliant.
  */
 
-#   define RSA_FLAG_NON_FIPS_ALLOW                 0x0400
+#  define RSA_FLAG_NON_FIPS_ALLOW                 0x0400
 /*
  * Application has decided PRNG is good enough to generate a key: don't
  * check.
  */
-#   define RSA_FLAG_CHECKED                        0x0800
+#  define RSA_FLAG_CHECKED                        0x0800
 
 OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_new(const char *name, int flags);
 OSSL_DEPRECATEDIN_3_0 void RSA_meth_free(RSA_METHOD *meth);
@@ -604,8 +598,7 @@ int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth,
                                                    BN_GENCB *cb));
 #endif  /* !OPENSSL_NO_DEPRECATED_3_0 */
 
-#  ifdef  __cplusplus
+# ifdef  __cplusplus
 }
-#  endif
 # endif
 #endif