00001
00023 #ifndef MBEDTLS_RSA_H
00024 #define MBEDTLS_RSA_H
00025
00026 #if !defined(MBEDTLS_CONFIG_FILE)
00027 #include "config.h"
00028 #else
00029 #include MBEDTLS_CONFIG_FILE
00030 #endif
00031
00032 #include "bignum.h"
00033 #include "md.h"
00034
00035 #if defined(MBEDTLS_THREADING_C)
00036 #include "threading.h"
00037 #endif
00038
00039
00040
00041
00042 #define MBEDTLS_ERR_RSA_BAD_INPUT_DATA -0x4080
00043 #define MBEDTLS_ERR_RSA_INVALID_PADDING -0x4100
00044 #define MBEDTLS_ERR_RSA_KEY_GEN_FAILED -0x4180
00045 #define MBEDTLS_ERR_RSA_KEY_CHECK_FAILED -0x4200
00046 #define MBEDTLS_ERR_RSA_PUBLIC_FAILED -0x4280
00047 #define MBEDTLS_ERR_RSA_PRIVATE_FAILED -0x4300
00048 #define MBEDTLS_ERR_RSA_VERIFY_FAILED -0x4380
00049 #define MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE -0x4400
00050 #define MBEDTLS_ERR_RSA_RNG_FAILED -0x4480
00052
00053
00054
00055 #define MBEDTLS_RSA_PUBLIC 0
00056 #define MBEDTLS_RSA_PRIVATE 1
00057
00058 #define MBEDTLS_RSA_PKCS_V15 0
00059 #define MBEDTLS_RSA_PKCS_V21 1
00060
00061 #define MBEDTLS_RSA_SIGN 1
00062 #define MBEDTLS_RSA_CRYPT 2
00063
00064 #define MBEDTLS_RSA_SALT_LEN_ANY -1
00065
00066
00067
00068
00069
00070 #if defined(MBEDTLS_RSA_C)
00071
00072 #ifdef __cplusplus
00073 extern "C" {
00074 #endif
00075
00079 typedef struct
00080 {
00081 int ver;
00082 size_t len;
00084 mbedtls_mpi N;
00085 mbedtls_mpi E;
00087 mbedtls_mpi D;
00088 mbedtls_mpi P;
00089 mbedtls_mpi Q;
00090 mbedtls_mpi DP;
00091 mbedtls_mpi DQ;
00092 mbedtls_mpi QP;
00094 mbedtls_mpi RN;
00095 mbedtls_mpi RP;
00096 mbedtls_mpi RQ;
00098 mbedtls_mpi Vi;
00099 mbedtls_mpi Vf;
00101 int padding;
00103 int hash_id;
00107 #if defined(MBEDTLS_THREADING_C)
00108 mbedtls_threading_mutex_t mutex;
00109 #endif
00110 }
00111 mbedtls_rsa_context;
00112
00137 void mbedtls_rsa_init( mbedtls_rsa_context *ctx,
00138 int padding,
00139 int hash_id);
00140
00149 void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding, int hash_id);
00150
00165 int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx,
00166 int (*f_rng)(void *, unsigned char *, size_t),
00167 void *p_rng,
00168 unsigned int nbits, int exponent );
00169
00177 int mbedtls_rsa_check_pubkey( const mbedtls_rsa_context *ctx );
00178
00186 int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx );
00187
00197 int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub, const mbedtls_rsa_context *prv );
00198
00215 int mbedtls_rsa_public( mbedtls_rsa_context *ctx,
00216 const unsigned char *input,
00217 unsigned char *output );
00218
00233 int mbedtls_rsa_private( mbedtls_rsa_context *ctx,
00234 int (*f_rng)(void *, unsigned char *, size_t),
00235 void *p_rng,
00236 const unsigned char *input,
00237 unsigned char *output );
00238
00258 int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx,
00259 int (*f_rng)(void *, unsigned char *, size_t),
00260 void *p_rng,
00261 int mode, size_t ilen,
00262 const unsigned char *input,
00263 unsigned char *output );
00264
00281 int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx,
00282 int (*f_rng)(void *, unsigned char *, size_t),
00283 void *p_rng,
00284 int mode, size_t ilen,
00285 const unsigned char *input,
00286 unsigned char *output );
00287
00307 int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx,
00308 int (*f_rng)(void *, unsigned char *, size_t),
00309 void *p_rng,
00310 int mode,
00311 const unsigned char *label, size_t label_len,
00312 size_t ilen,
00313 const unsigned char *input,
00314 unsigned char *output );
00315
00336 int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx,
00337 int (*f_rng)(void *, unsigned char *, size_t),
00338 void *p_rng,
00339 int mode, size_t *olen,
00340 const unsigned char *input,
00341 unsigned char *output,
00342 size_t output_max_len );
00343
00362 int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx,
00363 int (*f_rng)(void *, unsigned char *, size_t),
00364 void *p_rng,
00365 int mode, size_t *olen,
00366 const unsigned char *input,
00367 unsigned char *output,
00368 size_t output_max_len );
00369
00390 int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx,
00391 int (*f_rng)(void *, unsigned char *, size_t),
00392 void *p_rng,
00393 int mode,
00394 const unsigned char *label, size_t label_len,
00395 size_t *olen,
00396 const unsigned char *input,
00397 unsigned char *output,
00398 size_t output_max_len );
00399
00424 int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx,
00425 int (*f_rng)(void *, unsigned char *, size_t),
00426 void *p_rng,
00427 int mode,
00428 mbedtls_md_type_t md_alg,
00429 unsigned int hashlen,
00430 const unsigned char *hash,
00431 unsigned char *sig );
00432
00451 int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx,
00452 int (*f_rng)(void *, unsigned char *, size_t),
00453 void *p_rng,
00454 int mode,
00455 mbedtls_md_type_t md_alg,
00456 unsigned int hashlen,
00457 const unsigned char *hash,
00458 unsigned char *sig );
00459
00484 int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx,
00485 int (*f_rng)(void *, unsigned char *, size_t),
00486 void *p_rng,
00487 int mode,
00488 mbedtls_md_type_t md_alg,
00489 unsigned int hashlen,
00490 const unsigned char *hash,
00491 unsigned char *sig );
00492
00516 int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx,
00517 int (*f_rng)(void *, unsigned char *, size_t),
00518 void *p_rng,
00519 int mode,
00520 mbedtls_md_type_t md_alg,
00521 unsigned int hashlen,
00522 const unsigned char *hash,
00523 const unsigned char *sig );
00524
00543 int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx,
00544 int (*f_rng)(void *, unsigned char *, size_t),
00545 void *p_rng,
00546 int mode,
00547 mbedtls_md_type_t md_alg,
00548 unsigned int hashlen,
00549 const unsigned char *hash,
00550 const unsigned char *sig );
00551
00577 int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx,
00578 int (*f_rng)(void *, unsigned char *, size_t),
00579 void *p_rng,
00580 int mode,
00581 mbedtls_md_type_t md_alg,
00582 unsigned int hashlen,
00583 const unsigned char *hash,
00584 const unsigned char *sig );
00585
00610 int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx,
00611 int (*f_rng)(void *, unsigned char *, size_t),
00612 void *p_rng,
00613 int mode,
00614 mbedtls_md_type_t md_alg,
00615 unsigned int hashlen,
00616 const unsigned char *hash,
00617 mbedtls_md_type_t mgf1_hash_id,
00618 int expected_salt_len,
00619 const unsigned char *sig );
00620
00630 int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src );
00631
00637 void mbedtls_rsa_free( mbedtls_rsa_context *ctx );
00638
00644 int mbedtls_rsa_self_test( int verbose );
00645
00646 #ifdef __cplusplus
00647 }
00648 #endif
00649
00650 #endif
00651
00652 #endif