root / lab4 / .minix-src / include / openssl / rsa.h @ 14
History | View | Annotate | Download (26.3 KB)
1 | 13 | up20180614 | /* crypto/rsa/rsa.h */
|
---|---|---|---|
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||
3 | * All rights reserved.
|
||
4 | *
|
||
5 | * This package is an SSL implementation written
|
||
6 | * by Eric Young (eay@cryptsoft.com).
|
||
7 | * The implementation was written so as to conform with Netscapes SSL.
|
||
8 | *
|
||
9 | * This library is free for commercial and non-commercial use as long as
|
||
10 | * the following conditions are aheared to. The following conditions
|
||
11 | * apply to all code found in this distribution, be it the RC4, RSA,
|
||
12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||
13 | * included with this distribution is covered by the same copyright terms
|
||
14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||
15 | *
|
||
16 | * Copyright remains Eric Young's, and as such any Copyright notices in
|
||
17 | * the code are not to be removed.
|
||
18 | * If this package is used in a product, Eric Young should be given attribution
|
||
19 | * as the author of the parts of the library used.
|
||
20 | * This can be in the form of a textual message at program startup or
|
||
21 | * in documentation (online or textual) provided with the package.
|
||
22 | *
|
||
23 | * Redistribution and use in source and binary forms, with or without
|
||
24 | * modification, are permitted provided that the following conditions
|
||
25 | * are met:
|
||
26 | * 1. Redistributions of source code must retain the copyright
|
||
27 | * notice, this list of conditions and the following disclaimer.
|
||
28 | * 2. Redistributions in binary form must reproduce the above copyright
|
||
29 | * notice, this list of conditions and the following disclaimer in the
|
||
30 | * documentation and/or other materials provided with the distribution.
|
||
31 | * 3. All advertising materials mentioning features or use of this software
|
||
32 | * must display the following acknowledgement:
|
||
33 | * "This product includes cryptographic software written by
|
||
34 | * Eric Young (eay@cryptsoft.com)"
|
||
35 | * The word 'cryptographic' can be left out if the rouines from the library
|
||
36 | * being used are not cryptographic related :-).
|
||
37 | * 4. If you include any Windows specific code (or a derivative thereof) from
|
||
38 | * the apps directory (application code) you must include an acknowledgement:
|
||
39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||
40 | *
|
||
41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||
42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||
45 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
46 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
47 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
51 | * SUCH DAMAGE.
|
||
52 | *
|
||
53 | * The licence and distribution terms for any publically available version or
|
||
54 | * derivative of this code cannot be changed. i.e. this code cannot simply be
|
||
55 | * copied and put under another distribution licence
|
||
56 | * [including the GNU Public Licence.]
|
||
57 | */
|
||
58 | |||
59 | #ifndef HEADER_RSA_H
|
||
60 | # define HEADER_RSA_H
|
||
61 | |||
62 | # include <openssl/asn1.h> |
||
63 | |||
64 | # ifndef OPENSSL_NO_BIO
|
||
65 | # include <openssl/bio.h> |
||
66 | # endif
|
||
67 | # include <openssl/crypto.h> |
||
68 | # include <openssl/ossl_typ.h> |
||
69 | # ifndef OPENSSL_NO_DEPRECATED
|
||
70 | # include <openssl/bn.h> |
||
71 | # endif
|
||
72 | |||
73 | # ifdef OPENSSL_NO_RSA
|
||
74 | # error RSA is disabled.
|
||
75 | # endif
|
||
76 | |||
77 | #ifdef __cplusplus
|
||
78 | extern "C" { |
||
79 | #endif
|
||
80 | |||
81 | /* Declared already in ossl_typ.h */
|
||
82 | /* typedef struct rsa_st RSA; */
|
||
83 | /* typedef struct rsa_meth_st RSA_METHOD; */
|
||
84 | |||
85 | struct rsa_meth_st {
|
||
86 | const char *name; |
||
87 | int (*rsa_pub_enc) (int flen, const unsigned char *from, |
||
88 | unsigned char *to, RSA *rsa, int padding); |
||
89 | int (*rsa_pub_dec) (int flen, const unsigned char *from, |
||
90 | unsigned char *to, RSA *rsa, int padding); |
||
91 | int (*rsa_priv_enc) (int flen, const unsigned char *from, |
||
92 | unsigned char *to, RSA *rsa, int padding); |
||
93 | int (*rsa_priv_dec) (int flen, const unsigned char *from, |
||
94 | unsigned char *to, RSA *rsa, int padding); |
||
95 | /* Can be null */
|
||
96 | int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); |
||
97 | /* Can be null */
|
||
98 | int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, |
||
99 | const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
||
100 | /* called at new */
|
||
101 | int (*init) (RSA *rsa);
|
||
102 | /* called at free */
|
||
103 | int (*finish) (RSA *rsa);
|
||
104 | /* RSA_METHOD_FLAG_* things */
|
||
105 | int flags;
|
||
106 | /* may be needed! */
|
||
107 | char *app_data;
|
||
108 | /*
|
||
109 | * New sign and verify functions: some libraries don't allow arbitrary
|
||
110 | * data to be signed/verified: this allows them to be used. Note: for
|
||
111 | * this to work the RSA_public_decrypt() and RSA_private_encrypt() should
|
||
112 | * *NOT* be used RSA_sign(), RSA_verify() should be used instead. Note:
|
||
113 | * for backwards compatibility this functionality is only enabled if the
|
||
114 | * RSA_FLAG_SIGN_VER option is set in 'flags'.
|
||
115 | */
|
||
116 | int (*rsa_sign) (int type, |
||
117 | const unsigned char *m, unsigned int m_length, |
||
118 | unsigned char *sigret, unsigned int *siglen, |
||
119 | const RSA *rsa);
|
||
120 | int (*rsa_verify) (int dtype, const unsigned char *m, |
||
121 | unsigned int m_length, const unsigned char *sigbuf, |
||
122 | unsigned int siglen, const RSA *rsa); |
||
123 | /*
|
||
124 | * If this callback is NULL, the builtin software RSA key-gen will be
|
||
125 | * used. This is for behavioural compatibility whilst the code gets
|
||
126 | * rewired, but one day it would be nice to assume there are no such
|
||
127 | * things as "builtin software" implementations.
|
||
128 | */
|
||
129 | int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); |
||
130 | }; |
||
131 | |||
132 | struct rsa_st {
|
||
133 | /*
|
||
134 | * The first parameter is used to pickup errors where this is passed
|
||
135 | * instead of aEVP_PKEY, it is set to 0
|
||
136 | */
|
||
137 | int pad;
|
||
138 | long version;
|
||
139 | const RSA_METHOD *meth;
|
||
140 | /* functional reference if 'meth' is ENGINE-provided */
|
||
141 | ENGINE *engine; |
||
142 | BIGNUM *n; |
||
143 | BIGNUM *e; |
||
144 | BIGNUM *d; |
||
145 | BIGNUM *p; |
||
146 | BIGNUM *q; |
||
147 | BIGNUM *dmp1; |
||
148 | BIGNUM *dmq1; |
||
149 | BIGNUM *iqmp; |
||
150 | /* be careful using this if the RSA structure is shared */
|
||
151 | CRYPTO_EX_DATA ex_data; |
||
152 | int references;
|
||
153 | int flags;
|
||
154 | /* Used to cache montgomery values */
|
||
155 | BN_MONT_CTX *_method_mod_n; |
||
156 | BN_MONT_CTX *_method_mod_p; |
||
157 | BN_MONT_CTX *_method_mod_q; |
||
158 | /*
|
||
159 | * all BIGNUM values are actually in the following data, if it is not
|
||
160 | * NULL
|
||
161 | */
|
||
162 | char *bignum_data;
|
||
163 | BN_BLINDING *blinding; |
||
164 | BN_BLINDING *mt_blinding; |
||
165 | }; |
||
166 | |||
167 | # ifndef OPENSSL_RSA_MAX_MODULUS_BITS
|
||
168 | # define OPENSSL_RSA_MAX_MODULUS_BITS 16384 |
||
169 | # endif
|
||
170 | |||
171 | # ifndef OPENSSL_RSA_SMALL_MODULUS_BITS
|
||
172 | # define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 |
||
173 | # endif
|
||
174 | # ifndef OPENSSL_RSA_MAX_PUBEXP_BITS
|
||
175 | |||
176 | /* exponent limit enforced for "large" modulus only */
|
||
177 | # define OPENSSL_RSA_MAX_PUBEXP_BITS 64 |
||
178 | # endif
|
||
179 | |||
180 | # define RSA_3 0x3L |
||
181 | # define RSA_F4 0x10001L |
||
182 | |||
183 | # define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private |
||
184 | * match */
|
||
185 | |||
186 | # define RSA_FLAG_CACHE_PUBLIC 0x0002 |
||
187 | # define RSA_FLAG_CACHE_PRIVATE 0x0004 |
||
188 | # define RSA_FLAG_BLINDING 0x0008 |
||
189 | # define RSA_FLAG_THREAD_SAFE 0x0010 |
||
190 | /*
|
||
191 | * This flag means the private key operations will be handled by rsa_mod_exp
|
||
192 | * and that they do not depend on the private key components being present:
|
||
193 | * for example a key stored in external hardware. Without this flag
|
||
194 | * bn_mod_exp gets called when private key components are absent.
|
||
195 | */
|
||
196 | # define RSA_FLAG_EXT_PKEY 0x0020 |
||
197 | |||
198 | /*
|
||
199 | * This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify
|
||
200 | * functions.
|
||
201 | */
|
||
202 | # define RSA_FLAG_SIGN_VER 0x0040 |
||
203 | |||
204 | /*
|
||
205 | * new with 0.9.6j and 0.9.7b; the built-in
|
||
206 | * RSA implementation now uses blinding by
|
||
207 | * default (ignoring RSA_FLAG_BLINDING),
|
||
208 | * but other engines might not need it
|
||
209 | */
|
||
210 | # define RSA_FLAG_NO_BLINDING 0x0080 |
||
211 | /*
|
||
212 | * new with 0.9.8f; the built-in RSA
|
||
213 | * implementation now uses constant time
|
||
214 | * operations by default in private key operations,
|
||
215 | * e.g., constant time modular exponentiation,
|
||
216 | * modular inverse without leaking branches,
|
||
217 | * division without leaking branches. This
|
||
218 | * flag disables these constant time
|
||
219 | * operations and results in faster RSA
|
||
220 | * private key operations.
|
||
221 | */
|
||
222 | # define RSA_FLAG_NO_CONSTTIME 0x0100 |
||
223 | # ifdef OPENSSL_USE_DEPRECATED
|
||
224 | /* deprecated name for the flag*/
|
||
225 | /*
|
||
226 | * new with 0.9.7h; the built-in RSA
|
||
227 | * implementation now uses constant time
|
||
228 | * modular exponentiation for secret exponents
|
||
229 | * by default. This flag causes the
|
||
230 | * faster variable sliding window method to
|
||
231 | * be used for all exponents.
|
||
232 | */
|
||
233 | # define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME
|
||
234 | # endif
|
||
235 | |||
236 | # define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \
|
||
237 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \
|
||
238 | pad, NULL)
|
||
239 | |||
240 | # define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \
|
||
241 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, \
|
||
242 | EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad)
|
||
243 | |||
244 | # define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \
|
||
245 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ |
||
246 | (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ |
||
247 | EVP_PKEY_CTRL_RSA_PSS_SALTLEN, \ |
||
248 | len, NULL)
|
||
249 | |||
250 | # define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \
|
||
251 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ |
||
252 | (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ |
||
253 | EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, \ |
||
254 | 0, plen)
|
||
255 | |||
256 | # define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \
|
||
257 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ |
||
258 | EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL)
|
||
259 | |||
260 | # define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \
|
||
261 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ |
||
262 | EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp)
|
||
263 | |||
264 | # define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \
|
||
265 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG, \ |
||
266 | EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md) |
||
267 | |||
268 | # define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \
|
||
269 | EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG, \ |
||
270 | EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)pmd) |
||
271 | |||
272 | # define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) |
||
273 | # define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) |
||
274 | |||
275 | # define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) |
||
276 | # define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) |
||
277 | # define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) |
||
278 | |||
279 | # define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) |
||
280 | # define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) |
||
281 | # define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) |
||
282 | |||
283 | # define RSA_PKCS1_PADDING 1 |
||
284 | # define RSA_SSLV23_PADDING 2 |
||
285 | # define RSA_NO_PADDING 3 |
||
286 | # define RSA_PKCS1_OAEP_PADDING 4 |
||
287 | # define RSA_X931_PADDING 5 |
||
288 | /* EVP_PKEY_ only */
|
||
289 | # define RSA_PKCS1_PSS_PADDING 6 |
||
290 | |||
291 | # define RSA_PKCS1_PADDING_SIZE 11 |
||
292 | |||
293 | # define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) |
||
294 | # define RSA_get_app_data(s) RSA_get_ex_data(s,0) |
||
295 | |||
296 | RSA *RSA_new(void);
|
||
297 | RSA *RSA_new_method(ENGINE *engine); |
||
298 | int RSA_size(const RSA *rsa); |
||
299 | |||
300 | /* Deprecated version */
|
||
301 | # ifndef OPENSSL_NO_DEPRECATED
|
||
302 | RSA *RSA_generate_key(int bits, unsigned long e, void |
||
303 | (*callback) (int, int, void *), void *cb_arg); |
||
304 | # endif /* !defined(OPENSSL_NO_DEPRECATED) */ |
||
305 | |||
306 | /* New version */
|
||
307 | int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); |
||
308 | |||
309 | int RSA_check_key(const RSA *); |
||
310 | /* next 4 return -1 on error */
|
||
311 | int RSA_public_encrypt(int flen, const unsigned char *from, |
||
312 | unsigned char *to, RSA *rsa, int padding); |
||
313 | int RSA_private_encrypt(int flen, const unsigned char *from, |
||
314 | unsigned char *to, RSA *rsa, int padding); |
||
315 | int RSA_public_decrypt(int flen, const unsigned char *from, |
||
316 | unsigned char *to, RSA *rsa, int padding); |
||
317 | int RSA_private_decrypt(int flen, const unsigned char *from, |
||
318 | unsigned char *to, RSA *rsa, int padding); |
||
319 | void RSA_free(RSA *r);
|
||
320 | /* "up" the RSA object's reference count */
|
||
321 | int RSA_up_ref(RSA *r);
|
||
322 | |||
323 | int RSA_flags(const RSA *r); |
||
324 | |||
325 | void RSA_set_default_method(const RSA_METHOD *meth); |
||
326 | const RSA_METHOD *RSA_get_default_method(void); |
||
327 | const RSA_METHOD *RSA_get_method(const RSA *rsa); |
||
328 | int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); |
||
329 | |||
330 | /* This function needs the memory locking malloc callbacks to be installed */
|
||
331 | int RSA_memory_lock(RSA *r);
|
||
332 | |||
333 | /* these are the actual SSLeay RSA functions */
|
||
334 | const RSA_METHOD *RSA_PKCS1_SSLeay(void); |
||
335 | |||
336 | const RSA_METHOD *RSA_null_method(void); |
||
337 | |||
338 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) |
||
339 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) |
||
340 | |||
341 | typedef struct rsa_pss_params_st { |
||
342 | X509_ALGOR *hashAlgorithm; |
||
343 | X509_ALGOR *maskGenAlgorithm; |
||
344 | ASN1_INTEGER *saltLength; |
||
345 | ASN1_INTEGER *trailerField; |
||
346 | } RSA_PSS_PARAMS; |
||
347 | |||
348 | DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) |
||
349 | |||
350 | # ifndef OPENSSL_NO_FP_API
|
||
351 | int RSA_print_fp(FILE *fp, const RSA *r, int offset); |
||
352 | # endif
|
||
353 | |||
354 | # ifndef OPENSSL_NO_BIO
|
||
355 | int RSA_print(BIO *bp, const RSA *r, int offset); |
||
356 | # endif
|
||
357 | |||
358 | # ifndef OPENSSL_NO_RC4
|
||
359 | int i2d_RSA_NET(const RSA *a, unsigned char **pp, |
||
360 | int (*cb) (char *buf, int len, const char *prompt, |
||
361 | int verify), int sgckey); |
||
362 | RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length, |
||
363 | int (*cb) (char *buf, int len, const char *prompt, |
||
364 | int verify), int sgckey); |
||
365 | |||
366 | int i2d_Netscape_RSA(const RSA *a, unsigned char **pp, |
||
367 | int (*cb) (char *buf, int len, const char *prompt, |
||
368 | int verify));
|
||
369 | RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, |
||
370 | int (*cb) (char *buf, int len, const char *prompt, |
||
371 | int verify));
|
||
372 | # endif
|
||
373 | |||
374 | /*
|
||
375 | * The following 2 functions sign and verify a X509_SIG ASN1 object inside
|
||
376 | * PKCS#1 padded RSA encryption
|
||
377 | */
|
||
378 | int RSA_sign(int type, const unsigned char *m, unsigned int m_length, |
||
379 | unsigned char *sigret, unsigned int *siglen, RSA *rsa); |
||
380 | int RSA_verify(int type, const unsigned char *m, unsigned int m_length, |
||
381 | const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); |
||
382 | |||
383 | /*
|
||
384 | * The following 2 function sign and verify a ASN1_OCTET_STRING object inside
|
||
385 | * PKCS#1 padded RSA encryption
|
||
386 | */
|
||
387 | int RSA_sign_ASN1_OCTET_STRING(int type, |
||
388 | const unsigned char *m, unsigned int m_length, |
||
389 | unsigned char *sigret, unsigned int *siglen, |
||
390 | RSA *rsa); |
||
391 | int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, |
||
392 | unsigned int m_length, unsigned char *sigbuf, |
||
393 | unsigned int siglen, RSA *rsa); |
||
394 | |||
395 | int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
|
||
396 | void RSA_blinding_off(RSA *rsa);
|
||
397 | BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); |
||
398 | |||
399 | int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, |
||
400 | const unsigned char *f, int fl); |
||
401 | int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, |
||
402 | const unsigned char *f, int fl, |
||
403 | int rsa_len);
|
||
404 | int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, |
||
405 | const unsigned char *f, int fl); |
||
406 | int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, |
||
407 | const unsigned char *f, int fl, |
||
408 | int rsa_len);
|
||
409 | int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, |
||
410 | long seedlen, const EVP_MD *dgst); |
||
411 | int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, |
||
412 | const unsigned char *f, int fl, |
||
413 | const unsigned char *p, int pl); |
||
414 | int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, |
||
415 | const unsigned char *f, int fl, int rsa_len, |
||
416 | const unsigned char *p, int pl); |
||
417 | int RSA_padding_add_SSLv23(unsigned char *to, int tlen, |
||
418 | const unsigned char *f, int fl); |
||
419 | int RSA_padding_check_SSLv23(unsigned char *to, int tlen, |
||
420 | const unsigned char *f, int fl, int rsa_len); |
||
421 | int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, |
||
422 | int fl);
|
||
423 | int RSA_padding_check_none(unsigned char *to, int tlen, |
||
424 | const unsigned char *f, int fl, int rsa_len); |
||
425 | int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, |
||
426 | int fl);
|
||
427 | int RSA_padding_check_X931(unsigned char *to, int tlen, |
||
428 | const unsigned char *f, int fl, int rsa_len); |
||
429 | int RSA_X931_hash_id(int nid); |
||
430 | |||
431 | int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, |
||
432 | const EVP_MD *Hash, const unsigned char *EM, |
||
433 | int sLen);
|
||
434 | int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, |
||
435 | const unsigned char *mHash, const EVP_MD *Hash, |
||
436 | int sLen);
|
||
437 | |||
438 | int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, |
||
439 | const EVP_MD *Hash, const EVP_MD *mgf1Hash, |
||
440 | const unsigned char *EM, int sLen); |
||
441 | |||
442 | int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, |
||
443 | const unsigned char *mHash, |
||
444 | const EVP_MD *Hash, const EVP_MD *mgf1Hash, |
||
445 | int sLen);
|
||
446 | |||
447 | int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
||
448 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); |
||
449 | int RSA_set_ex_data(RSA *r, int idx, void *arg); |
||
450 | void *RSA_get_ex_data(const RSA *r, int idx); |
||
451 | |||
452 | RSA *RSAPublicKey_dup(RSA *rsa); |
||
453 | RSA *RSAPrivateKey_dup(RSA *rsa); |
||
454 | |||
455 | /*
|
||
456 | * If this flag is set the RSA method is FIPS compliant and can be used in
|
||
457 | * FIPS mode. This is set in the validated module method. If an application
|
||
458 | * sets this flag in its own methods it is its responsibility to ensure the
|
||
459 | * result is compliant.
|
||
460 | */
|
||
461 | |||
462 | # define RSA_FLAG_FIPS_METHOD 0x0400 |
||
463 | |||
464 | /*
|
||
465 | * If this flag is set the operations normally disabled in FIPS mode are
|
||
466 | * permitted it is then the applications responsibility to ensure that the
|
||
467 | * usage is compliant.
|
||
468 | */
|
||
469 | |||
470 | # define RSA_FLAG_NON_FIPS_ALLOW 0x0400 |
||
471 | /*
|
||
472 | * Application has decided PRNG is good enough to generate a key: don't
|
||
473 | * check.
|
||
474 | */
|
||
475 | # define RSA_FLAG_CHECKED 0x0800 |
||
476 | |||
477 | /* BEGIN ERROR CODES */
|
||
478 | /*
|
||
479 | * The following lines are auto generated by the script mkerr.pl. Any changes
|
||
480 | * made after this point may be overwritten when the script is next run.
|
||
481 | */
|
||
482 | void ERR_load_RSA_strings(void); |
||
483 | |||
484 | /* Error codes for the RSA functions. */
|
||
485 | |||
486 | /* Function codes. */
|
||
487 | # define RSA_F_CHECK_PADDING_MD 140 |
||
488 | # define RSA_F_DO_RSA_PRINT 146 |
||
489 | # define RSA_F_INT_RSA_VERIFY 145 |
||
490 | # define RSA_F_MEMORY_LOCK 100 |
||
491 | # define RSA_F_OLD_RSA_PRIV_DECODE 147 |
||
492 | # define RSA_F_PKEY_RSA_CTRL 143 |
||
493 | # define RSA_F_PKEY_RSA_CTRL_STR 144 |
||
494 | # define RSA_F_PKEY_RSA_SIGN 142 |
||
495 | # define RSA_F_PKEY_RSA_VERIFY 154 |
||
496 | # define RSA_F_PKEY_RSA_VERIFYRECOVER 141 |
||
497 | # define RSA_F_RSA_BUILTIN_KEYGEN 129 |
||
498 | # define RSA_F_RSA_CHECK_KEY 123 |
||
499 | # define RSA_F_RSA_EAY_PRIVATE_DECRYPT 101 |
||
500 | # define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 102 |
||
501 | # define RSA_F_RSA_EAY_PUBLIC_DECRYPT 103 |
||
502 | # define RSA_F_RSA_EAY_PUBLIC_ENCRYPT 104 |
||
503 | # define RSA_F_RSA_GENERATE_KEY 105 |
||
504 | # define RSA_F_RSA_GENERATE_KEY_EX 155 |
||
505 | # define RSA_F_RSA_ITEM_VERIFY 156 |
||
506 | # define RSA_F_RSA_MEMORY_LOCK 130 |
||
507 | # define RSA_F_RSA_NEW_METHOD 106 |
||
508 | # define RSA_F_RSA_NULL 124 |
||
509 | # define RSA_F_RSA_NULL_MOD_EXP 131 |
||
510 | # define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 |
||
511 | # define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 |
||
512 | # define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 |
||
513 | # define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 |
||
514 | # define RSA_F_RSA_PADDING_ADD_NONE 107 |
||
515 | # define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 |
||
516 | # define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 |
||
517 | # define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 148 |
||
518 | # define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 |
||
519 | # define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 |
||
520 | # define RSA_F_RSA_PADDING_ADD_SSLV23 110 |
||
521 | # define RSA_F_RSA_PADDING_ADD_X931 127 |
||
522 | # define RSA_F_RSA_PADDING_CHECK_NONE 111 |
||
523 | # define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 |
||
524 | # define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 |
||
525 | # define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 |
||
526 | # define RSA_F_RSA_PADDING_CHECK_SSLV23 114 |
||
527 | # define RSA_F_RSA_PADDING_CHECK_X931 128 |
||
528 | # define RSA_F_RSA_PRINT 115 |
||
529 | # define RSA_F_RSA_PRINT_FP 116 |
||
530 | # define RSA_F_RSA_PRIVATE_DECRYPT 150 |
||
531 | # define RSA_F_RSA_PRIVATE_ENCRYPT 151 |
||
532 | # define RSA_F_RSA_PRIV_DECODE 137 |
||
533 | # define RSA_F_RSA_PRIV_ENCODE 138 |
||
534 | # define RSA_F_RSA_PUBLIC_DECRYPT 152 |
||
535 | # define RSA_F_RSA_PUBLIC_ENCRYPT 153 |
||
536 | # define RSA_F_RSA_PUB_DECODE 139 |
||
537 | # define RSA_F_RSA_SETUP_BLINDING 136 |
||
538 | # define RSA_F_RSA_SIGN 117 |
||
539 | # define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 |
||
540 | # define RSA_F_RSA_VERIFY 119 |
||
541 | # define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 |
||
542 | # define RSA_F_RSA_VERIFY_PKCS1_PSS 126 |
||
543 | # define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 149 |
||
544 | |||
545 | /* Reason codes. */
|
||
546 | # define RSA_R_ALGORITHM_MISMATCH 100 |
||
547 | # define RSA_R_BAD_E_VALUE 101 |
||
548 | # define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 |
||
549 | # define RSA_R_BAD_PAD_BYTE_COUNT 103 |
||
550 | # define RSA_R_BAD_SIGNATURE 104 |
||
551 | # define RSA_R_BLOCK_TYPE_IS_NOT_01 106 |
||
552 | # define RSA_R_BLOCK_TYPE_IS_NOT_02 107 |
||
553 | # define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 |
||
554 | # define RSA_R_DATA_TOO_LARGE 109 |
||
555 | # define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 |
||
556 | # define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 |
||
557 | # define RSA_R_DATA_TOO_SMALL 111 |
||
558 | # define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 |
||
559 | # define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 |
||
560 | # define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 |
||
561 | # define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 |
||
562 | # define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 |
||
563 | # define RSA_R_FIRST_OCTET_INVALID 133 |
||
564 | # define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 |
||
565 | # define RSA_R_INVALID_DIGEST_LENGTH 143 |
||
566 | # define RSA_R_INVALID_HEADER 137 |
||
567 | # define RSA_R_INVALID_KEYBITS 145 |
||
568 | # define RSA_R_INVALID_MESSAGE_LENGTH 131 |
||
569 | # define RSA_R_INVALID_MGF1_MD 156 |
||
570 | # define RSA_R_INVALID_PADDING 138 |
||
571 | # define RSA_R_INVALID_PADDING_MODE 141 |
||
572 | # define RSA_R_INVALID_PSS_PARAMETERS 149 |
||
573 | # define RSA_R_INVALID_PSS_SALTLEN 146 |
||
574 | # define RSA_R_INVALID_SALT_LENGTH 150 |
||
575 | # define RSA_R_INVALID_TRAILER 139 |
||
576 | # define RSA_R_INVALID_X931_DIGEST 142 |
||
577 | # define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 |
||
578 | # define RSA_R_KEY_SIZE_TOO_SMALL 120 |
||
579 | # define RSA_R_LAST_OCTET_INVALID 134 |
||
580 | # define RSA_R_MODULUS_TOO_LARGE 105 |
||
581 | # define RSA_R_NON_FIPS_RSA_METHOD 157 |
||
582 | # define RSA_R_NO_PUBLIC_EXPONENT 140 |
||
583 | # define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 |
||
584 | # define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 |
||
585 | # define RSA_R_OAEP_DECODING_ERROR 121 |
||
586 | # define RSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE 158 |
||
587 | # define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 |
||
588 | # define RSA_R_PADDING_CHECK_FAILED 114 |
||
589 | # define RSA_R_PKCS_DECODING_ERROR 159 |
||
590 | # define RSA_R_P_NOT_PRIME 128 |
||
591 | # define RSA_R_Q_NOT_PRIME 129 |
||
592 | # define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 |
||
593 | # define RSA_R_SLEN_CHECK_FAILED 136 |
||
594 | # define RSA_R_SLEN_RECOVERY_FAILED 135 |
||
595 | # define RSA_R_SSLV3_ROLLBACK_ATTACK 115 |
||
596 | # define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 |
||
597 | # define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 |
||
598 | # define RSA_R_UNKNOWN_MASK_DIGEST 151 |
||
599 | # define RSA_R_UNKNOWN_PADDING_TYPE 118 |
||
600 | # define RSA_R_UNKNOWN_PSS_DIGEST 152 |
||
601 | # define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 |
||
602 | # define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 |
||
603 | # define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 |
||
604 | # define RSA_R_VALUE_MISSING 147 |
||
605 | # define RSA_R_WRONG_SIGNATURE_LENGTH 119 |
||
606 | |||
607 | #ifdef __cplusplus
|
||
608 | } |
||
609 | #endif
|
||
610 | #endif |