securityanddataprivacytools/securitytools/openssllib/import/inc/openssl/rsa.h
branchRCL_1
changeset 46 de7f90723dab
equal deleted inserted replaced
27:2d7679d6a290 46:de7f90723dab
       
     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 #include <openssl/asn1.h>
       
    63 
       
    64 #ifndef OPENSSL_NO_BIO
       
    65 #include <openssl/bio.h>
       
    66 #endif
       
    67 #include <openssl/bn.h>
       
    68 #include <openssl/crypto.h>
       
    69 #include <openssl/ossl_typ.h>
       
    70 
       
    71 #ifdef OPENSSL_NO_RSA
       
    72 #error RSA is disabled.
       
    73 #endif
       
    74 
       
    75 #ifdef  __cplusplus
       
    76 extern "C" {
       
    77 #endif
       
    78 
       
    79 typedef struct rsa_st RSA;
       
    80 
       
    81 typedef struct rsa_meth_st
       
    82 	{
       
    83 	const char *name;
       
    84 	int (*rsa_pub_enc)(int flen,const unsigned char *from,
       
    85 			   unsigned char *to,
       
    86 			   RSA *rsa,int padding);
       
    87 	int (*rsa_pub_dec)(int flen,const unsigned char *from,
       
    88 			   unsigned char *to,
       
    89 			   RSA *rsa,int padding);
       
    90 	int (*rsa_priv_enc)(int flen,const unsigned char *from,
       
    91 			    unsigned char *to,
       
    92 			    RSA *rsa,int padding);
       
    93 	int (*rsa_priv_dec)(int flen,const unsigned char *from,
       
    94 			    unsigned char *to,
       
    95 			    RSA *rsa,int padding);
       
    96 	int (*rsa_mod_exp)(BIGNUM *r0,const BIGNUM *I,RSA *rsa); /* Can be null */
       
    97 	int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
       
    98 			  const BIGNUM *m, BN_CTX *ctx,
       
    99 			  BN_MONT_CTX *m_ctx); /* Can be null */
       
   100 	int (*init)(RSA *rsa);		/* called at new */
       
   101 	int (*finish)(RSA *rsa);	/* called at free */
       
   102 	int flags;			/* RSA_METHOD_FLAG_* things */
       
   103 	char *app_data;			/* may be needed! */
       
   104 /* New sign and verify functions: some libraries don't allow arbitrary data
       
   105  * to be signed/verified: this allows them to be used. Note: for this to work
       
   106  * the RSA_public_decrypt() and RSA_private_encrypt() should *NOT* be used
       
   107  * RSA_sign(), RSA_verify() should be used instead. Note: for backwards
       
   108  * compatibility this functionality is only enabled if the RSA_FLAG_SIGN_VER
       
   109  * option is set in 'flags'.
       
   110  */
       
   111 	int (*rsa_sign)(int type,
       
   112 		const unsigned char *m, unsigned int m_length,
       
   113 		unsigned char *sigret, unsigned int *siglen, const RSA *rsa);
       
   114 	int (*rsa_verify)(int dtype,
       
   115 		const unsigned char *m, unsigned int m_length,
       
   116 		unsigned char *sigbuf, unsigned int siglen, const RSA *rsa);
       
   117 
       
   118 	} RSA_METHOD;
       
   119 
       
   120 struct rsa_st
       
   121 	{
       
   122 	/* The first parameter is used to pickup errors where
       
   123 	 * this is passed instead of aEVP_PKEY, it is set to 0 */
       
   124 	int pad;
       
   125 	long version;
       
   126 	const RSA_METHOD *meth;
       
   127 	/* functional reference if 'meth' is ENGINE-provided */
       
   128 	ENGINE *engine;
       
   129 	BIGNUM *n;
       
   130 	BIGNUM *e;
       
   131 	BIGNUM *d;
       
   132 	BIGNUM *p;
       
   133 	BIGNUM *q;
       
   134 	BIGNUM *dmp1;
       
   135 	BIGNUM *dmq1;
       
   136 	BIGNUM *iqmp;
       
   137 	/* be careful using this if the RSA structure is shared */
       
   138 	CRYPTO_EX_DATA ex_data;
       
   139 	int references;
       
   140 	int flags;
       
   141 
       
   142 	/* Used to cache montgomery values */
       
   143 	BN_MONT_CTX *_method_mod_n;
       
   144 	BN_MONT_CTX *_method_mod_p;
       
   145 	BN_MONT_CTX *_method_mod_q;
       
   146 
       
   147 	/* all BIGNUM values are actually in the following data, if it is not
       
   148 	 * NULL */
       
   149 	char *bignum_data;
       
   150 	BN_BLINDING *blinding;
       
   151 	};
       
   152 
       
   153 #define RSA_3	0x3L
       
   154 #define RSA_F4	0x10001L
       
   155 
       
   156 #define RSA_METHOD_FLAG_NO_CHECK	0x01 /* don't check pub/private match */
       
   157 
       
   158 #define RSA_FLAG_CACHE_PUBLIC		0x02
       
   159 #define RSA_FLAG_CACHE_PRIVATE		0x04
       
   160 #define RSA_FLAG_BLINDING		0x08
       
   161 #define RSA_FLAG_NO_BLINDING		0x80 /* new with 0.9.6j and 0.9.7b; the built-in
       
   162                                               * RSA implementation now uses blinding by
       
   163                                               * default (ignoring RSA_FLAG_BLINDING),
       
   164                                               * but other engines might not need it
       
   165                                               */
       
   166 #define RSA_FLAG_THREAD_SAFE		0x10
       
   167 /* This flag means the private key operations will be handled by rsa_mod_exp
       
   168  * and that they do not depend on the private key components being present:
       
   169  * for example a key stored in external hardware. Without this flag bn_mod_exp
       
   170  * gets called when private key components are absent.
       
   171  */
       
   172 #define RSA_FLAG_EXT_PKEY		0x20
       
   173 
       
   174 /* This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify functions.
       
   175  */
       
   176 #define RSA_FLAG_SIGN_VER		0x40
       
   177 
       
   178 #define RSA_FLAG_NO_BLINDING		0x80
       
   179 
       
   180 #define RSA_PKCS1_PADDING	1
       
   181 #define RSA_SSLV23_PADDING	2
       
   182 #define RSA_NO_PADDING		3
       
   183 #define RSA_PKCS1_OAEP_PADDING	4
       
   184 
       
   185 #define RSA_PKCS1_PADDING_SIZE	11
       
   186 
       
   187 #define RSA_set_app_data(s,arg)         RSA_set_ex_data(s,0,arg)
       
   188 #define RSA_get_app_data(s)             RSA_get_ex_data(s,0)
       
   189 
       
   190 RSA *	RSA_new(void);
       
   191 RSA *	RSA_new_method(ENGINE *engine);
       
   192 int	RSA_size(const RSA *);
       
   193 RSA *	RSA_generate_key(int bits, unsigned long e,void
       
   194 		(*callback)(int,int,void *),void *cb_arg);
       
   195 int	RSA_check_key(const RSA *);
       
   196 	/* next 4 return -1 on error */
       
   197 int	RSA_public_encrypt(int flen, const unsigned char *from,
       
   198 		unsigned char *to, RSA *rsa,int padding);
       
   199 int	RSA_private_encrypt(int flen, const unsigned char *from,
       
   200 		unsigned char *to, RSA *rsa,int padding);
       
   201 int	RSA_public_decrypt(int flen, const unsigned char *from, 
       
   202 		unsigned char *to, RSA *rsa,int padding);
       
   203 int	RSA_private_decrypt(int flen, const unsigned char *from, 
       
   204 		unsigned char *to, RSA *rsa,int padding);
       
   205 void	RSA_free (RSA *r);
       
   206 /* "up" the RSA object's reference count */
       
   207 int	RSA_up_ref(RSA *r);
       
   208 
       
   209 int	RSA_flags(const RSA *r);
       
   210 
       
   211 void RSA_set_default_method(const RSA_METHOD *meth);
       
   212 const RSA_METHOD *RSA_get_default_method(void);
       
   213 const RSA_METHOD *RSA_get_method(const RSA *rsa);
       
   214 int RSA_set_method(RSA *rsa, const RSA_METHOD *meth);
       
   215 
       
   216 /* This function needs the memory locking malloc callbacks to be installed */
       
   217 int RSA_memory_lock(RSA *r);
       
   218 
       
   219 /* these are the actual SSLeay RSA functions */
       
   220 const RSA_METHOD *RSA_PKCS1_SSLeay(void);
       
   221 
       
   222 const RSA_METHOD *RSA_null_method(void);
       
   223 
       
   224 DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey)
       
   225 DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey)
       
   226 
       
   227 #ifndef OPENSSL_NO_FP_API
       
   228 int	RSA_print_fp(FILE *fp, const RSA *r,int offset);
       
   229 #endif
       
   230 
       
   231 #ifndef OPENSSL_NO_BIO
       
   232 int	RSA_print(BIO *bp, const RSA *r,int offset);
       
   233 #endif
       
   234 
       
   235 int i2d_RSA_NET(const RSA *a, unsigned char **pp, int (*cb)(), int sgckey);
       
   236 RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length, int (*cb)(), int sgckey);
       
   237 
       
   238 int i2d_Netscape_RSA(const RSA *a, unsigned char **pp, int (*cb)());
       
   239 RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, int (*cb)());
       
   240 
       
   241 /* The following 2 functions sign and verify a X509_SIG ASN1 object
       
   242  * inside PKCS#1 padded RSA encryption */
       
   243 int RSA_sign(int type, const unsigned char *m, unsigned int m_length,
       
   244 	unsigned char *sigret, unsigned int *siglen, RSA *rsa);
       
   245 int RSA_verify(int type, const unsigned char *m, unsigned int m_length,
       
   246 	unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
       
   247 
       
   248 /* The following 2 function sign and verify a ASN1_OCTET_STRING
       
   249  * object inside PKCS#1 padded RSA encryption */
       
   250 int RSA_sign_ASN1_OCTET_STRING(int type,
       
   251 	const unsigned char *m, unsigned int m_length,
       
   252 	unsigned char *sigret, unsigned int *siglen, RSA *rsa);
       
   253 int RSA_verify_ASN1_OCTET_STRING(int type,
       
   254 	const unsigned char *m, unsigned int m_length,
       
   255 	unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
       
   256 
       
   257 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
       
   258 void RSA_blinding_off(RSA *rsa);
       
   259 
       
   260 int RSA_padding_add_PKCS1_type_1(unsigned char *to,int tlen,
       
   261 	const unsigned char *f,int fl);
       
   262 int RSA_padding_check_PKCS1_type_1(unsigned char *to,int tlen,
       
   263 	const unsigned char *f,int fl,int rsa_len);
       
   264 int RSA_padding_add_PKCS1_type_2(unsigned char *to,int tlen,
       
   265 	const unsigned char *f,int fl);
       
   266 int RSA_padding_check_PKCS1_type_2(unsigned char *to,int tlen,
       
   267 	const unsigned char *f,int fl,int rsa_len);
       
   268 int RSA_padding_add_PKCS1_OAEP(unsigned char *to,int tlen,
       
   269 	const unsigned char *f,int fl,
       
   270 	const unsigned char *p,int pl);
       
   271 int RSA_padding_check_PKCS1_OAEP(unsigned char *to,int tlen,
       
   272 	const unsigned char *f,int fl,int rsa_len,
       
   273 	const unsigned char *p,int pl);
       
   274 int RSA_padding_add_SSLv23(unsigned char *to,int tlen,
       
   275 	const unsigned char *f,int fl);
       
   276 int RSA_padding_check_SSLv23(unsigned char *to,int tlen,
       
   277 	const unsigned char *f,int fl,int rsa_len);
       
   278 int RSA_padding_add_none(unsigned char *to,int tlen,
       
   279 	const unsigned char *f,int fl);
       
   280 int RSA_padding_check_none(unsigned char *to,int tlen,
       
   281 	const unsigned char *f,int fl,int rsa_len);
       
   282 
       
   283 int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
       
   284 	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
       
   285 int RSA_set_ex_data(RSA *r,int idx,void *arg);
       
   286 void *RSA_get_ex_data(const RSA *r, int idx);
       
   287 
       
   288 RSA *RSAPublicKey_dup(RSA *rsa);
       
   289 RSA *RSAPrivateKey_dup(RSA *rsa);
       
   290 
       
   291 /* BEGIN ERROR CODES */
       
   292 /* The following lines are auto generated by the script mkerr.pl. Any changes
       
   293  * made after this point may be overwritten when the script is next run.
       
   294  */
       
   295 void ERR_load_RSA_strings(void);
       
   296 
       
   297 /* Error codes for the RSA functions. */
       
   298 
       
   299 /* Function codes. */
       
   300 #define RSA_F_MEMORY_LOCK				 100
       
   301 #define RSA_F_RSA_CHECK_KEY				 123
       
   302 #define RSA_F_RSA_EAY_PRIVATE_DECRYPT			 101
       
   303 #define RSA_F_RSA_EAY_PRIVATE_ENCRYPT			 102
       
   304 #define RSA_F_RSA_EAY_PUBLIC_DECRYPT			 103
       
   305 #define RSA_F_RSA_EAY_PUBLIC_ENCRYPT			 104
       
   306 #define RSA_F_RSA_GENERATE_KEY				 105
       
   307 #define RSA_F_RSA_NEW_METHOD				 106
       
   308 #define RSA_F_RSA_NULL					 124
       
   309 #define RSA_F_RSA_PADDING_ADD_NONE			 107
       
   310 #define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP		 121
       
   311 #define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1		 108
       
   312 #define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2		 109
       
   313 #define RSA_F_RSA_PADDING_ADD_SSLV23			 110
       
   314 #define RSA_F_RSA_PADDING_CHECK_NONE			 111
       
   315 #define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP		 122
       
   316 #define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1		 112
       
   317 #define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2		 113
       
   318 #define RSA_F_RSA_PADDING_CHECK_SSLV23			 114
       
   319 #define RSA_F_RSA_PRINT					 115
       
   320 #define RSA_F_RSA_PRINT_FP				 116
       
   321 #define RSA_F_RSA_SIGN					 117
       
   322 #define RSA_F_RSA_SIGN_ASN1_OCTET_STRING		 118
       
   323 #define RSA_F_RSA_VERIFY				 119
       
   324 #define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING		 120
       
   325 
       
   326 /* Reason codes. */
       
   327 #define RSA_R_ALGORITHM_MISMATCH			 100
       
   328 #define RSA_R_BAD_E_VALUE				 101
       
   329 #define RSA_R_BAD_FIXED_HEADER_DECRYPT			 102
       
   330 #define RSA_R_BAD_PAD_BYTE_COUNT			 103
       
   331 #define RSA_R_BAD_SIGNATURE				 104
       
   332 #define RSA_R_BLOCK_TYPE_IS_NOT_01			 106
       
   333 #define RSA_R_BLOCK_TYPE_IS_NOT_02			 107
       
   334 #define RSA_R_DATA_GREATER_THAN_MOD_LEN			 108
       
   335 #define RSA_R_DATA_TOO_LARGE				 109
       
   336 #define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE		 110
       
   337 #define RSA_R_DATA_TOO_LARGE_FOR_MODULUS		 132
       
   338 #define RSA_R_DATA_TOO_SMALL				 111
       
   339 #define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE		 122
       
   340 #define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY		 112
       
   341 #define RSA_R_DMP1_NOT_CONGRUENT_TO_D			 124
       
   342 #define RSA_R_DMQ1_NOT_CONGRUENT_TO_D			 125
       
   343 #define RSA_R_D_E_NOT_CONGRUENT_TO_1			 123
       
   344 #define RSA_R_INVALID_MESSAGE_LENGTH			 131
       
   345 #define RSA_R_IQMP_NOT_INVERSE_OF_Q			 126
       
   346 #define RSA_R_KEY_SIZE_TOO_SMALL			 120
       
   347 #define RSA_R_NULL_BEFORE_BLOCK_MISSING			 113
       
   348 #define RSA_R_N_DOES_NOT_EQUAL_P_Q			 127
       
   349 #define RSA_R_OAEP_DECODING_ERROR			 121
       
   350 #define RSA_R_PADDING_CHECK_FAILED			 114
       
   351 #define RSA_R_P_NOT_PRIME				 128
       
   352 #define RSA_R_Q_NOT_PRIME				 129
       
   353 #define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED		 130
       
   354 #define RSA_R_SSLV3_ROLLBACK_ATTACK			 115
       
   355 #define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116
       
   356 #define RSA_R_UNKNOWN_ALGORITHM_TYPE			 117
       
   357 #define RSA_R_UNKNOWN_PADDING_TYPE			 118
       
   358 #define RSA_R_WRONG_SIGNATURE_LENGTH			 119
       
   359 
       
   360 #ifdef  __cplusplus
       
   361 }
       
   362 #endif
       
   363 #endif
       
   364