summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/rsa/rsa.h
diff options
context:
space:
mode:
authorryker <>1998-10-05 20:13:14 +0000
committerryker <>1998-10-05 20:13:14 +0000
commitaeeae06a79815dc190061534d47236cec09f9e32 (patch)
tree851692b9c2f9c04f077666855641900f19fdb217 /src/lib/libcrypto/rsa/rsa.h
parenta4f79641824cbf9f60ca9d1168d1fcc46717a82a (diff)
downloadopenbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.gz
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.bz2
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.zip
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs. Note that routines such as sslv2_init and friends that use RSA will not work due to lack of RSA in this library. Needs documentation and help from ports for easy upgrade to full functionality where legally possible.
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa.h')
-rw-r--r--src/lib/libcrypto/rsa/rsa.h324
1 files changed, 324 insertions, 0 deletions
diff --git a/src/lib/libcrypto/rsa/rsa.h b/src/lib/libcrypto/rsa/rsa.h
new file mode 100644
index 0000000000..aeb78ffcd3
--- /dev/null
+++ b/src/lib/libcrypto/rsa/rsa.h
@@ -0,0 +1,324 @@
1/* 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#ifdef __cplusplus
63extern "C" {
64#endif
65
66#include "bn.h"
67#include "crypto.h"
68
69typedef struct rsa_meth_st
70 {
71 char *name;
72 int (*rsa_pub_enc)();
73 int (*rsa_pub_dec)();
74 int (*rsa_priv_enc)();
75 int (*rsa_priv_dec)();
76 int (*rsa_mod_exp)(); /* Can be null */
77 int (*bn_mod_exp)(); /* Can be null */
78 int (*init)(/* RSA * */); /* called at new */
79 int (*finish)(/* RSA * */); /* called at free */
80
81 int flags; /* RSA_METHOD_FLAG_* things */
82 char *app_data; /* may be needed! */
83 } RSA_METHOD;
84
85typedef struct rsa_st
86 {
87 /* The first parameter is used to pickup errors where
88 * this is passed instead of aEVP_PKEY, it is set to 0 */
89 int pad;
90 int version;
91 RSA_METHOD *meth;
92 BIGNUM *n;
93 BIGNUM *e;
94 BIGNUM *d;
95 BIGNUM *p;
96 BIGNUM *q;
97 BIGNUM *dmp1;
98 BIGNUM *dmq1;
99 BIGNUM *iqmp;
100 /* be carefull using this if the RSA structure is shared */
101 CRYPTO_EX_DATA ex_data;
102 int references;
103 int flags;
104
105 /* Normally used to cached montgomery values */
106 char *method_mod_n;
107 char *method_mod_p;
108 char *method_mod_q;
109
110 BN_BLINDING *blinding;
111 } RSA;
112
113#define RSA_3 0x3L
114#define RSA_F4 0x10001L
115
116#define RSA_METHOD_FLAG_NO_CHECK 0x01 /* don't check pub/private match */
117#define RSA_FLAG_CACHE_PUBLIC 0x02
118#define RSA_FLAG_CACHE_PRIVATE 0x04
119#define RSA_FLAG_BLINDING 0x08
120#define RSA_FLAG_THREAD_SAFE 0x10
121
122#define RSA_PKCS1_PADDING 1
123#define RSA_SSLV23_PADDING 2
124#define RSA_NO_PADDING 3
125
126#define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,(char *)arg)
127#define RSA_get_app_data(s) RSA_get_ex_data(s,0)
128
129#ifndef NOPROTO
130RSA * RSA_new(void);
131RSA * RSA_new_method(RSA_METHOD *method);
132int RSA_size(RSA *);
133RSA * RSA_generate_key(int bits, unsigned long e,void
134 (*callback)(int,int,char *),char *cb_arg);
135 /* next 4 return -1 on error */
136int RSA_public_encrypt(int flen, unsigned char *from,
137 unsigned char *to, RSA *rsa,int padding);
138int RSA_private_encrypt(int flen, unsigned char *from,
139 unsigned char *to, RSA *rsa,int padding);
140int RSA_public_decrypt(int flen, unsigned char *from,
141 unsigned char *to, RSA *rsa,int padding);
142int RSA_private_decrypt(int flen, unsigned char *from,
143 unsigned char *to, RSA *rsa,int padding);
144void RSA_free (RSA *r);
145
146int RSA_flags(RSA *r);
147
148void RSA_set_default_method(RSA_METHOD *meth);
149
150/* If you have RSAref compiled in. */
151RSA_METHOD *RSA_PKCS1_RSAref(void);
152
153/* these are the actual SSLeay RSA functions */
154RSA_METHOD *RSA_PKCS1_SSLeay(void);
155
156void ERR_load_RSA_strings(void );
157
158RSA * d2i_RSAPublicKey(RSA **a, unsigned char **pp, long length);
159int i2d_RSAPublicKey(RSA *a, unsigned char **pp);
160RSA * d2i_RSAPrivateKey(RSA **a, unsigned char **pp, long length);
161int i2d_RSAPrivateKey(RSA *a, unsigned char **pp);
162#ifndef NO_FP_API
163int RSA_print_fp(FILE *fp, RSA *r,int offset);
164#endif
165
166#ifdef HEADER_BIO_H
167int RSA_print(BIO *bp, RSA *r,int offset);
168#endif
169
170int i2d_Netscape_RSA(RSA *a, unsigned char **pp, int (*cb)());
171RSA *d2i_Netscape_RSA(RSA **a, unsigned char **pp, long length, int (*cb)());
172/* Naughty internal function required elsewhere, to handle a MS structure
173 * that is the same as the netscape one :-) */
174RSA *d2i_Netscape_RSA_2(RSA **a, unsigned char **pp, long length, int (*cb)());
175
176/* The following 2 functions sign and verify a X509_SIG ASN1 object
177 * inside PKCS#1 padded RSA encryption */
178int RSA_sign(int type, unsigned char *m, unsigned int m_len,
179 unsigned char *sigret, unsigned int *siglen, RSA *rsa);
180int RSA_verify(int type, unsigned char *m, unsigned int m_len,
181 unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
182
183/* The following 2 function sign and verify a ASN1_OCTET_STRING
184 * object inside PKCS#1 padded RSA encryption */
185int RSA_sign_ASN1_OCTET_STRING(int type, unsigned char *m, unsigned int m_len,
186 unsigned char *sigret, unsigned int *siglen, RSA *rsa);
187int RSA_verify_ASN1_OCTET_STRING(int type, unsigned char *m, unsigned int m_len,
188 unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
189
190int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
191void RSA_blinding_off(RSA *rsa);
192
193int RSA_padding_add_PKCS1_type_1(unsigned char *to,int tlen,
194 unsigned char *f,int fl);
195int RSA_padding_check_PKCS1_type_1(unsigned char *to,int tlen,
196 unsigned char *f,int fl);
197int RSA_padding_add_PKCS1_type_2(unsigned char *to,int tlen,
198 unsigned char *f,int fl);
199int RSA_padding_check_PKCS1_type_2(unsigned char *to,int tlen,
200 unsigned char *f,int fl);
201int RSA_padding_add_SSLv23(unsigned char *to,int tlen,
202 unsigned char *f,int fl);
203int RSA_padding_check_SSLv23(unsigned char *to,int tlen,
204 unsigned char *f,int fl);
205int RSA_padding_add_none(unsigned char *to,int tlen,
206 unsigned char *f,int fl);
207int RSA_padding_check_none(unsigned char *to,int tlen,
208 unsigned char *f,int fl);
209
210int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
211 int (*dup_func)(), void (*free_func)());
212int RSA_set_ex_data(RSA *r,int idx,char *arg);
213char *RSA_get_ex_data(RSA *r, int idx);
214
215#else
216
217RSA * RSA_new();
218RSA * RSA_new_method();
219int RSA_size();
220RSA * RSA_generate_key();
221int RSA_public_encrypt();
222int RSA_private_encrypt();
223int RSA_public_decrypt();
224int RSA_private_decrypt();
225void RSA_free ();
226
227int RSA_flags();
228
229void RSA_set_default_method();
230
231/* RSA_METHOD *RSA_PKCS1_RSAref(); */
232RSA_METHOD *RSA_PKCS1_SSLeay();
233
234void ERR_load_RSA_strings();
235
236RSA * d2i_RSAPublicKey();
237int i2d_RSAPublicKey();
238RSA * d2i_RSAPrivateKey();
239int i2d_RSAPrivateKey();
240#ifndef NO_FP_API
241int RSA_print_fp();
242#endif
243
244int RSA_print();
245
246int i2d_Netscape_RSA();
247RSA *d2i_Netscape_RSA();
248RSA *d2i_Netscape_RSA_2();
249
250int RSA_sign();
251int RSA_verify();
252
253int RSA_sign_ASN1_OCTET_STRING();
254int RSA_verify_ASN1_OCTET_STRING();
255int RSA_blinding_on();
256void RSA_blinding_off();
257
258int RSA_padding_add_PKCS1_type_1();
259int RSA_padding_check_PKCS1_type_1();
260int RSA_padding_add_PKCS1_type_2();
261int RSA_padding_check_PKCS1_type_2();
262int RSA_padding_add_SSLv23();
263int RSA_padding_check_SSLv23();
264int RSA_padding_add_none();
265int RSA_padding_check_none();
266
267int RSA_get_ex_new_index();
268int RSA_set_ex_data();
269char *RSA_get_ex_data();
270
271#endif
272
273/* BEGIN ERROR CODES */
274/* Error codes for the RSA functions. */
275
276/* Function codes. */
277#define RSA_F_RSA_EAY_PRIVATE_DECRYPT 100
278#define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 101
279#define RSA_F_RSA_EAY_PUBLIC_DECRYPT 102
280#define RSA_F_RSA_EAY_PUBLIC_ENCRYPT 103
281#define RSA_F_RSA_GENERATE_KEY 104
282#define RSA_F_RSA_NEW_METHOD 105
283#define RSA_F_RSA_PADDING_ADD_NONE 106
284#define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 107
285#define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 108
286#define RSA_F_RSA_PADDING_ADD_SSLV23 109
287#define RSA_F_RSA_PADDING_CHECK_NONE 110
288#define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 111
289#define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 112
290#define RSA_F_RSA_PADDING_CHECK_SSLV23 113
291#define RSA_F_RSA_PRINT 114
292#define RSA_F_RSA_PRINT_FP 115
293#define RSA_F_RSA_SIGN 116
294#define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 117
295#define RSA_F_RSA_VERIFY 118
296#define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 119
297
298/* Reason codes. */
299#define RSA_R_ALGORITHM_MISMATCH 100
300#define RSA_R_BAD_E_VALUE 101
301#define RSA_R_BAD_FIXED_HEADER_DECRYPT 102
302#define RSA_R_BAD_PAD_BYTE_COUNT 103
303#define RSA_R_BAD_SIGNATURE 104
304#define RSA_R_BAD_ZERO_BYTE 105
305#define RSA_R_BLOCK_TYPE_IS_NOT_01 106
306#define RSA_R_BLOCK_TYPE_IS_NOT_02 107
307#define RSA_R_DATA_GREATER_THAN_MOD_LEN 108
308#define RSA_R_DATA_TOO_LARGE 109
309#define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110
310#define RSA_R_DATA_TOO_SMALL 111
311#define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112
312#define RSA_R_NULL_BEFORE_BLOCK_MISSING 113
313#define RSA_R_PADDING_CHECK_FAILED 114
314#define RSA_R_SSLV3_ROLLBACK_ATTACK 115
315#define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116
316#define RSA_R_UNKNOWN_ALGORITHM_TYPE 117
317#define RSA_R_UNKNOWN_PADDING_TYPE 118
318#define RSA_R_WRONG_SIGNATURE_LENGTH 119
319
320#ifdef __cplusplus
321}
322#endif
323#endif
324