1 /* 2 * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 #ifndef OPENSSL_RSA_H 11 # define OPENSSL_RSA_H 12 # pragma once 13 14 # include <openssl/macros.h> 15 # ifndef OPENSSL_NO_DEPRECATED_3_0 16 # define HEADER_RSA_H 17 # endif 18 19 # include <openssl/opensslconf.h> 20 21 # include <openssl/asn1.h> 22 # include <openssl/bio.h> 23 # include <openssl/crypto.h> 24 # include <openssl/types.h> 25 # ifndef OPENSSL_NO_DEPRECATED_1_1_0 26 # include <openssl/bn.h> 27 # endif 28 # include <openssl/rsaerr.h> 29 # include <openssl/safestack.h> 30 31 # ifdef __cplusplus 32 extern "C" { 33 # endif 34 35 # ifndef OPENSSL_RSA_MAX_MODULUS_BITS 36 # define OPENSSL_RSA_MAX_MODULUS_BITS 16384 37 # endif 38 39 # define RSA_3 0x3L 40 # define RSA_F4 0x10001L 41 42 # ifndef OPENSSL_NO_DEPRECATED_3_0 43 /* The types RSA and RSA_METHOD are defined in ossl_typ.h */ 44 45 # define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048 46 47 # ifndef OPENSSL_RSA_SMALL_MODULUS_BITS 48 # define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 49 # endif 50 51 /* exponent limit enforced for "large" modulus only */ 52 # ifndef OPENSSL_RSA_MAX_PUBEXP_BITS 53 # define OPENSSL_RSA_MAX_PUBEXP_BITS 64 54 # endif 55 /* based on RFC 8017 appendix A.1.2 */ 56 # define RSA_ASN1_VERSION_DEFAULT 0 57 # define RSA_ASN1_VERSION_MULTI 1 58 59 # define RSA_DEFAULT_PRIME_NUM 2 60 61 # define RSA_METHOD_FLAG_NO_CHECK 0x0001 62 # define RSA_FLAG_CACHE_PUBLIC 0x0002 63 # define RSA_FLAG_CACHE_PRIVATE 0x0004 64 # define RSA_FLAG_BLINDING 0x0008 65 # define RSA_FLAG_THREAD_SAFE 0x0010 66 /* 67 * This flag means the private key operations will be handled by rsa_mod_exp 68 * and that they do not depend on the private key components being present: 69 * for example a key stored in external hardware. Without this flag 70 * bn_mod_exp gets called when private key components are absent. 71 */ 72 # define RSA_FLAG_EXT_PKEY 0x0020 73 74 /* 75 * new with 0.9.6j and 0.9.7b; the built-in 76 * RSA implementation now uses blinding by 77 * default (ignoring RSA_FLAG_BLINDING), 78 * but other engines might not need it 79 */ 80 # define RSA_FLAG_NO_BLINDING 0x0080 81 # endif /* OPENSSL_NO_DEPRECATED_3_0 */ 82 /* 83 * Does nothing. Previously this switched off constant time behaviour. 84 */ 85 # ifndef OPENSSL_NO_DEPRECATED_1_1_0 86 # define RSA_FLAG_NO_CONSTTIME 0x0000 87 # endif 88 /* deprecated name for the flag*/ 89 /* 90 * new with 0.9.7h; the built-in RSA 91 * implementation now uses constant time 92 * modular exponentiation for secret exponents 93 * by default. This flag causes the 94 * faster variable sliding window method to 95 * be used for all exponents. 96 */ 97 # ifndef OPENSSL_NO_DEPRECATED_0_9_8 98 # define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME 99 # endif 100 101 /*- 102 * New with 3.0: use part of the flags to denote exact type of RSA key, 103 * some of which are limited to specific signature and encryption schemes. 104 * These different types share the same RSA structure, but indicate the 105 * use of certain fields in that structure. 106 * Currently known are: 107 * RSA - this is the "normal" unlimited RSA structure (typenum 0) 108 * RSASSA-PSS - indicates that the PSS parameters are used. 109 * RSAES-OAEP - no specific field used for the moment, but OAEP padding 110 * is expected. (currently unused) 111 * 112 * 4 bits allow for 16 types 113 */ 114 # define RSA_FLAG_TYPE_MASK 0xF000 115 # define RSA_FLAG_TYPE_RSA 0x0000 116 # define RSA_FLAG_TYPE_RSASSAPSS 0x1000 117 # define RSA_FLAG_TYPE_RSAESOAEP 0x2000 118 119 int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad_mode); 120 int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad_mode); 121 122 int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int saltlen); 123 int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *saltlen); 124 125 int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits); 126 int EVP_PKEY_CTX_set1_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); 127 int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes); 128 int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int saltlen); 129 # ifndef OPENSSL_NO_DEPRECATED_3_0 130 OSSL_DEPRECATEDIN_3_0 131 int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); 132 # endif 133 134 /* Salt length matches digest */ 135 # define RSA_PSS_SALTLEN_DIGEST -1 136 /* Verify only: auto detect salt length */ 137 # define RSA_PSS_SALTLEN_AUTO -2 138 /* Set salt length to maximum possible */ 139 # define RSA_PSS_SALTLEN_MAX -3 140 /* Old compatible max salt length for sign only */ 141 # define RSA_PSS_SALTLEN_MAX_SIGN -2 142 143 int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); 144 int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname, 145 const char *mdprops); 146 int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); 147 int EVP_PKEY_CTX_get_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, char *name, 148 size_t namelen); 149 int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); 150 int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name(EVP_PKEY_CTX *ctx, 151 const char *mdname); 152 153 int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); 154 int EVP_PKEY_CTX_set_rsa_pss_keygen_md_name(EVP_PKEY_CTX *ctx, 155 const char *mdname, 156 const char *mdprops); 157 158 int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); 159 int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname, 160 const char *mdprops); 161 int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); 162 int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name, 163 size_t namelen); 164 int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, int llen); 165 int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); 166 167 # define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) 168 # define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) 169 170 # define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) 171 # define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) 172 # define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) 173 174 # define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) 175 # define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) 176 # define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) 177 178 # define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) 179 # define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) 180 181 # define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) 182 # define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) 183 184 # define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) 185 186 # define RSA_PKCS1_PADDING 1 187 # define RSA_NO_PADDING 3 188 # define RSA_PKCS1_OAEP_PADDING 4 189 # define RSA_X931_PADDING 5 190 191 /* EVP_PKEY_ only */ 192 # define RSA_PKCS1_PSS_PADDING 6 193 # define RSA_PKCS1_WITH_TLS_PADDING 7 194 195 # define RSA_PKCS1_PADDING_SIZE 11 196 197 # define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) 198 # define RSA_get_app_data(s) RSA_get_ex_data(s,0) 199 200 # ifndef OPENSSL_NO_DEPRECATED_3_0 201 OSSL_DEPRECATEDIN_3_0 RSA *RSA_new(void); 202 OSSL_DEPRECATEDIN_3_0 RSA *RSA_new_method(ENGINE *engine); 203 OSSL_DEPRECATEDIN_3_0 int RSA_bits(const RSA *rsa); 204 OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa); 205 OSSL_DEPRECATEDIN_3_0 int RSA_security_bits(const RSA *rsa); 206 207 OSSL_DEPRECATEDIN_3_0 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); 208 OSSL_DEPRECATEDIN_3_0 int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); 209 OSSL_DEPRECATEDIN_3_0 int RSA_set0_crt_params(RSA *r, 210 BIGNUM *dmp1, BIGNUM *dmq1, 211 BIGNUM *iqmp); 212 OSSL_DEPRECATEDIN_3_0 int RSA_set0_multi_prime_params(RSA *r, 213 BIGNUM *primes[], 214 BIGNUM *exps[], 215 BIGNUM *coeffs[], 216 int pnum); 217 OSSL_DEPRECATEDIN_3_0 void RSA_get0_key(const RSA *r, 218 const BIGNUM **n, const BIGNUM **e, 219 const BIGNUM **d); 220 OSSL_DEPRECATEDIN_3_0 void RSA_get0_factors(const RSA *r, 221 const BIGNUM **p, const BIGNUM **q); 222 OSSL_DEPRECATEDIN_3_0 int RSA_get_multi_prime_extra_count(const RSA *r); 223 OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_factors(const RSA *r, 224 const BIGNUM *primes[]); 225 OSSL_DEPRECATEDIN_3_0 void RSA_get0_crt_params(const RSA *r, 226 const BIGNUM **dmp1, 227 const BIGNUM **dmq1, 228 const BIGNUM **iqmp); 229 OSSL_DEPRECATEDIN_3_0 230 int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], 231 const BIGNUM *coeffs[]); 232 OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_n(const RSA *d); 233 OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_e(const RSA *d); 234 OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_d(const RSA *d); 235 OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_p(const RSA *d); 236 OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_q(const RSA *d); 237 OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmp1(const RSA *r); 238 OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmq1(const RSA *r); 239 OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_iqmp(const RSA *r); 240 OSSL_DEPRECATEDIN_3_0 const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); 241 OSSL_DEPRECATEDIN_3_0 void RSA_clear_flags(RSA *r, int flags); 242 OSSL_DEPRECATEDIN_3_0 int RSA_test_flags(const RSA *r, int flags); 243 OSSL_DEPRECATEDIN_3_0 void RSA_set_flags(RSA *r, int flags); 244 OSSL_DEPRECATEDIN_3_0 int RSA_get_version(RSA *r); 245 OSSL_DEPRECATEDIN_3_0 ENGINE *RSA_get0_engine(const RSA *r); 246 # endif /* !OPENSSL_NO_DEPRECATED_3_0 */ 247 248 # define EVP_RSA_gen(bits) \ 249 EVP_PKEY_Q_keygen(NULL, NULL, "RSA", (size_t)(0 + (bits))) 250 251 /* Deprecated version */ 252 # ifndef OPENSSL_NO_DEPRECATED_0_9_8 253 OSSL_DEPRECATEDIN_0_9_8 RSA *RSA_generate_key(int bits, unsigned long e, void 254 (*callback) (int, int, void *), 255 void *cb_arg); 256 # endif 257 258 /* New version */ 259 # ifndef OPENSSL_NO_DEPRECATED_3_0 260 OSSL_DEPRECATEDIN_3_0 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, 261 BN_GENCB *cb); 262 /* Multi-prime version */ 263 OSSL_DEPRECATEDIN_3_0 int RSA_generate_multi_prime_key(RSA *rsa, int bits, 264 int primes, BIGNUM *e, 265 BN_GENCB *cb); 266 267 OSSL_DEPRECATEDIN_3_0 268 int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, 269 BIGNUM *q1, BIGNUM *q2, 270 const BIGNUM *Xp1, const BIGNUM *Xp2, 271 const BIGNUM *Xp, const BIGNUM *Xq1, 272 const BIGNUM *Xq2, const BIGNUM *Xq, 273 const BIGNUM *e, BN_GENCB *cb); 274 OSSL_DEPRECATEDIN_3_0 int RSA_X931_generate_key_ex(RSA *rsa, int bits, 275 const BIGNUM *e, 276 BN_GENCB *cb); 277 278 OSSL_DEPRECATEDIN_3_0 int RSA_check_key(const RSA *); 279 OSSL_DEPRECATEDIN_3_0 int RSA_check_key_ex(const RSA *, BN_GENCB *cb); 280 /* next 4 return -1 on error */ 281 OSSL_DEPRECATEDIN_3_0 282 int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, 283 RSA *rsa, int padding); 284 OSSL_DEPRECATEDIN_3_0 285 int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, 286 RSA *rsa, int padding); 287 OSSL_DEPRECATEDIN_3_0 288 int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, 289 RSA *rsa, int padding); 290 OSSL_DEPRECATEDIN_3_0 291 int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, 292 RSA *rsa, int padding); 293 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r); 294 /* "up" the RSA object's reference count */ 295 OSSL_DEPRECATEDIN_3_0 int RSA_up_ref(RSA *r); 296 OSSL_DEPRECATEDIN_3_0 int RSA_flags(const RSA *r); 297 298 OSSL_DEPRECATEDIN_3_0 void RSA_set_default_method(const RSA_METHOD *meth); 299 OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_default_method(void); 300 OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_null_method(void); 301 OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_method(const RSA *rsa); 302 OSSL_DEPRECATEDIN_3_0 int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); 303 304 /* these are the actual RSA functions */ 305 OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_PKCS1_OpenSSL(void); 306 307 DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, 308 RSA, RSAPublicKey) 309 DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, 310 RSA, RSAPrivateKey) 311 # endif /* !OPENSSL_NO_DEPRECATED_3_0 */ 312 313 int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); 314 315 struct rsa_pss_params_st { 316 X509_ALGOR *hashAlgorithm; 317 X509_ALGOR *maskGenAlgorithm; 318 ASN1_INTEGER *saltLength; 319 ASN1_INTEGER *trailerField; 320 /* Decoded hash algorithm from maskGenAlgorithm */ 321 X509_ALGOR *maskHash; 322 }; 323 324 DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) 325 DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS) 326 327 typedef struct rsa_oaep_params_st { 328 X509_ALGOR *hashFunc; 329 X509_ALGOR *maskGenFunc; 330 X509_ALGOR *pSourceFunc; 331 /* Decoded hash algorithm from maskGenFunc */ 332 X509_ALGOR *maskHash; 333 } RSA_OAEP_PARAMS; 334 335 DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) 336 337 # ifndef OPENSSL_NO_DEPRECATED_3_0 338 # ifndef OPENSSL_NO_STDIO 339 OSSL_DEPRECATEDIN_3_0 int RSA_print_fp(FILE *fp, const RSA *r, int offset); 340 # endif 341 342 OSSL_DEPRECATEDIN_3_0 int RSA_print(BIO *bp, const RSA *r, int offset); 343 344 /* 345 * The following 2 functions sign and verify a X509_SIG ASN1 object inside 346 * PKCS#1 padded RSA encryption 347 */ 348 OSSL_DEPRECATEDIN_3_0 int RSA_sign(int type, const unsigned char *m, 349 unsigned int m_length, unsigned char *sigret, 350 unsigned int *siglen, RSA *rsa); 351 OSSL_DEPRECATEDIN_3_0 int RSA_verify(int type, const unsigned char *m, 352 unsigned int m_length, 353 const unsigned char *sigbuf, 354 unsigned int siglen, RSA *rsa); 355 356 /* 357 * The following 2 function sign and verify a ASN1_OCTET_STRING object inside 358 * PKCS#1 padded RSA encryption 359 */ 360 OSSL_DEPRECATEDIN_3_0 361 int RSA_sign_ASN1_OCTET_STRING(int type, 362 const unsigned char *m, unsigned int m_length, 363 unsigned char *sigret, unsigned int *siglen, 364 RSA *rsa); 365 OSSL_DEPRECATEDIN_3_0 366 int RSA_verify_ASN1_OCTET_STRING(int type, 367 const unsigned char *m, unsigned int m_length, 368 unsigned char *sigbuf, unsigned int siglen, 369 RSA *rsa); 370 371 OSSL_DEPRECATEDIN_3_0 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); 372 OSSL_DEPRECATEDIN_3_0 void RSA_blinding_off(RSA *rsa); 373 OSSL_DEPRECATEDIN_3_0 BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); 374 375 OSSL_DEPRECATEDIN_3_0 376 int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, 377 const unsigned char *f, int fl); 378 OSSL_DEPRECATEDIN_3_0 379 int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, 380 const unsigned char *f, int fl, 381 int rsa_len); 382 OSSL_DEPRECATEDIN_3_0 383 int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, 384 const unsigned char *f, int fl); 385 OSSL_DEPRECATEDIN_3_0 386 int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, 387 const unsigned char *f, int fl, 388 int rsa_len); 389 OSSL_DEPRECATEDIN_3_0 int PKCS1_MGF1(unsigned char *mask, long len, 390 const unsigned char *seed, long seedlen, 391 const EVP_MD *dgst); 392 OSSL_DEPRECATEDIN_3_0 393 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, 394 const unsigned char *f, int fl, 395 const unsigned char *p, int pl); 396 OSSL_DEPRECATEDIN_3_0 397 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, 398 const unsigned char *f, int fl, int rsa_len, 399 const unsigned char *p, int pl); 400 OSSL_DEPRECATEDIN_3_0 401 int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, 402 const unsigned char *from, int flen, 403 const unsigned char *param, int plen, 404 const EVP_MD *md, const EVP_MD *mgf1md); 405 OSSL_DEPRECATEDIN_3_0 406 int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, 407 const unsigned char *from, int flen, 408 int num, 409 const unsigned char *param, int plen, 410 const EVP_MD *md, const EVP_MD *mgf1md); 411 OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_none(unsigned char *to, int tlen, 412 const unsigned char *f, int fl); 413 OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_none(unsigned char *to, int tlen, 414 const unsigned char *f, int fl, 415 int rsa_len); 416 OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_X931(unsigned char *to, int tlen, 417 const unsigned char *f, int fl); 418 OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_X931(unsigned char *to, int tlen, 419 const unsigned char *f, int fl, 420 int rsa_len); 421 OSSL_DEPRECATEDIN_3_0 int RSA_X931_hash_id(int nid); 422 423 OSSL_DEPRECATEDIN_3_0 424 int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, 425 const EVP_MD *Hash, const unsigned char *EM, 426 int sLen); 427 OSSL_DEPRECATEDIN_3_0 428 int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, 429 const unsigned char *mHash, const EVP_MD *Hash, 430 int sLen); 431 432 OSSL_DEPRECATEDIN_3_0 433 int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, 434 const EVP_MD *Hash, const EVP_MD *mgf1Hash, 435 const unsigned char *EM, int sLen); 436 437 OSSL_DEPRECATEDIN_3_0 438 int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, 439 const unsigned char *mHash, 440 const EVP_MD *Hash, const EVP_MD *mgf1Hash, 441 int sLen); 442 443 # define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ 444 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) 445 OSSL_DEPRECATEDIN_3_0 int RSA_set_ex_data(RSA *r, int idx, void *arg); 446 OSSL_DEPRECATEDIN_3_0 void *RSA_get_ex_data(const RSA *r, int idx); 447 448 DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPublicKey) 449 DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPrivateKey) 450 451 /* 452 * If this flag is set the RSA method is FIPS compliant and can be used in 453 * FIPS mode. This is set in the validated module method. If an application 454 * sets this flag in its own methods it is its responsibility to ensure the 455 * result is compliant. 456 */ 457 458 # define RSA_FLAG_FIPS_METHOD 0x0400 459 460 /* 461 * If this flag is set the operations normally disabled in FIPS mode are 462 * permitted it is then the applications responsibility to ensure that the 463 * usage is compliant. 464 */ 465 466 # define RSA_FLAG_NON_FIPS_ALLOW 0x0400 467 /* 468 * Application has decided PRNG is good enough to generate a key: don't 469 * check. 470 */ 471 # define RSA_FLAG_CHECKED 0x0800 472 473 OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_new(const char *name, int flags); 474 OSSL_DEPRECATEDIN_3_0 void RSA_meth_free(RSA_METHOD *meth); 475 OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); 476 OSSL_DEPRECATEDIN_3_0 const char *RSA_meth_get0_name(const RSA_METHOD *meth); 477 OSSL_DEPRECATEDIN_3_0 int RSA_meth_set1_name(RSA_METHOD *meth, 478 const char *name); 479 OSSL_DEPRECATEDIN_3_0 int RSA_meth_get_flags(const RSA_METHOD *meth); 480 OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_flags(RSA_METHOD *meth, int flags); 481 OSSL_DEPRECATEDIN_3_0 void *RSA_meth_get0_app_data(const RSA_METHOD *meth); 482 OSSL_DEPRECATEDIN_3_0 int RSA_meth_set0_app_data(RSA_METHOD *meth, 483 void *app_data); 484 OSSL_DEPRECATEDIN_3_0 485 int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) (int flen, 486 const unsigned char *from, 487 unsigned char *to, 488 RSA *rsa, int padding); 489 OSSL_DEPRECATEDIN_3_0 490 int RSA_meth_set_pub_enc(RSA_METHOD *rsa, 491 int (*pub_enc) (int flen, const unsigned char *from, 492 unsigned char *to, RSA *rsa, 493 int padding)); 494 OSSL_DEPRECATEDIN_3_0 495 int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) (int flen, 496 const unsigned char *from, 497 unsigned char *to, 498 RSA *rsa, int padding); 499 OSSL_DEPRECATEDIN_3_0 500 int RSA_meth_set_pub_dec(RSA_METHOD *rsa, 501 int (*pub_dec) (int flen, const unsigned char *from, 502 unsigned char *to, RSA *rsa, 503 int padding)); 504 OSSL_DEPRECATEDIN_3_0 505 int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) (int flen, 506 const unsigned char *from, 507 unsigned char *to, 508 RSA *rsa, int padding); 509 OSSL_DEPRECATEDIN_3_0 510 int RSA_meth_set_priv_enc(RSA_METHOD *rsa, 511 int (*priv_enc) (int flen, const unsigned char *from, 512 unsigned char *to, RSA *rsa, 513 int padding)); 514 OSSL_DEPRECATEDIN_3_0 515 int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) (int flen, 516 const unsigned char *from, 517 unsigned char *to, 518 RSA *rsa, int padding); 519 OSSL_DEPRECATEDIN_3_0 520 int RSA_meth_set_priv_dec(RSA_METHOD *rsa, 521 int (*priv_dec) (int flen, const unsigned char *from, 522 unsigned char *to, RSA *rsa, 523 int padding)); 524 OSSL_DEPRECATEDIN_3_0 525 int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r0, 526 const BIGNUM *i, 527 RSA *rsa, BN_CTX *ctx); 528 OSSL_DEPRECATEDIN_3_0 529 int RSA_meth_set_mod_exp(RSA_METHOD *rsa, 530 int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, 531 BN_CTX *ctx)); 532 OSSL_DEPRECATEDIN_3_0 533 int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r, 534 const BIGNUM *a, 535 const BIGNUM *p, 536 const BIGNUM *m, 537 BN_CTX *ctx, 538 BN_MONT_CTX *m_ctx); 539 OSSL_DEPRECATEDIN_3_0 540 int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, 541 int (*bn_mod_exp) (BIGNUM *r, 542 const BIGNUM *a, 543 const BIGNUM *p, 544 const BIGNUM *m, 545 BN_CTX *ctx, 546 BN_MONT_CTX *m_ctx)); 547 OSSL_DEPRECATEDIN_3_0 548 int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); 549 OSSL_DEPRECATEDIN_3_0 550 int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); 551 OSSL_DEPRECATEDIN_3_0 552 int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); 553 OSSL_DEPRECATEDIN_3_0 554 int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); 555 OSSL_DEPRECATEDIN_3_0 556 int (*RSA_meth_get_sign(const RSA_METHOD *meth)) (int type, 557 const unsigned char *m, 558 unsigned int m_length, 559 unsigned char *sigret, 560 unsigned int *siglen, 561 const RSA *rsa); 562 OSSL_DEPRECATEDIN_3_0 563 int RSA_meth_set_sign(RSA_METHOD *rsa, 564 int (*sign) (int type, const unsigned char *m, 565 unsigned int m_length, 566 unsigned char *sigret, unsigned int *siglen, 567 const RSA *rsa)); 568 OSSL_DEPRECATEDIN_3_0 569 int (*RSA_meth_get_verify(const RSA_METHOD *meth)) (int dtype, 570 const unsigned char *m, 571 unsigned int m_length, 572 const unsigned char *sigbuf, 573 unsigned int siglen, 574 const RSA *rsa); 575 OSSL_DEPRECATEDIN_3_0 576 int RSA_meth_set_verify(RSA_METHOD *rsa, 577 int (*verify) (int dtype, const unsigned char *m, 578 unsigned int m_length, 579 const unsigned char *sigbuf, 580 unsigned int siglen, const RSA *rsa)); 581 OSSL_DEPRECATEDIN_3_0 582 int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) (RSA *rsa, int bits, 583 BIGNUM *e, BN_GENCB *cb); 584 OSSL_DEPRECATEDIN_3_0 585 int RSA_meth_set_keygen(RSA_METHOD *rsa, 586 int (*keygen) (RSA *rsa, int bits, BIGNUM *e, 587 BN_GENCB *cb)); 588 OSSL_DEPRECATEDIN_3_0 589 int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) (RSA *rsa, 590 int bits, 591 int primes, 592 BIGNUM *e, 593 BN_GENCB *cb); 594 OSSL_DEPRECATEDIN_3_0 595 int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, 596 int (*keygen) (RSA *rsa, int bits, 597 int primes, BIGNUM *e, 598 BN_GENCB *cb)); 599 #endif /* !OPENSSL_NO_DEPRECATED_3_0 */ 600 601 # ifdef __cplusplus 602 } 603 # endif 604 #endif 605