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