00001
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef MBEDTLS_RSA_H
00030 #define MBEDTLS_RSA_H
00031
00032 #if !defined(MBEDTLS_CONFIG_FILE)
00033 #include "config.h"
00034 #else
00035 #include MBEDTLS_CONFIG_FILE
00036 #endif
00037
00038 #include "bignum.h"
00039 #include "md.h"
00040
00041 #if defined(MBEDTLS_THREADING_C)
00042 #include "threading.h"
00043 #endif
00044
00045
00046
00047
00048 #define MBEDTLS_ERR_RSA_BAD_INPUT_DATA -0x4080
00049 #define MBEDTLS_ERR_RSA_INVALID_PADDING -0x4100
00050 #define MBEDTLS_ERR_RSA_KEY_GEN_FAILED -0x4180
00051 #define MBEDTLS_ERR_RSA_KEY_CHECK_FAILED -0x4200
00052 #define MBEDTLS_ERR_RSA_PUBLIC_FAILED -0x4280
00053 #define MBEDTLS_ERR_RSA_PRIVATE_FAILED -0x4300
00054 #define MBEDTLS_ERR_RSA_VERIFY_FAILED -0x4380
00055 #define MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE -0x4400
00056 #define MBEDTLS_ERR_RSA_RNG_FAILED -0x4480
00057 #define MBEDTLS_ERR_RSA_UNSUPPORTED_OPERATION -0x4500
00058 #define MBEDTLS_ERR_RSA_HW_ACCEL_FAILED -0x4580
00060
00061
00062
00063 #define MBEDTLS_RSA_PUBLIC 0
00064 #define MBEDTLS_RSA_PRIVATE 1
00066 #define MBEDTLS_RSA_PKCS_V15 0
00067 #define MBEDTLS_RSA_PKCS_V21 1
00069 #define MBEDTLS_RSA_SIGN 1
00070 #define MBEDTLS_RSA_CRYPT 2
00072 #define MBEDTLS_RSA_SALT_LEN_ANY -1
00073
00074
00075
00076
00077
00078
00079 #if !defined(MBEDTLS_RSA_ALT)
00080
00081
00082
00083 #ifdef __cplusplus
00084 extern "C" {
00085 #endif
00086
00094 typedef struct
00095 {
00096 int ver;
00097 size_t len;
00099 mbedtls_mpi N;
00100 mbedtls_mpi E;
00102 mbedtls_mpi D;
00103 mbedtls_mpi P;
00104 mbedtls_mpi Q;
00106 mbedtls_mpi DP;
00107 mbedtls_mpi DQ;
00108 mbedtls_mpi QP;
00110 mbedtls_mpi RN;
00112 mbedtls_mpi RP;
00113 mbedtls_mpi RQ;
00115 mbedtls_mpi Vi;
00116 mbedtls_mpi Vf;
00118 int padding;
00121 int hash_id;
00125 #if defined(MBEDTLS_THREADING_C)
00126 mbedtls_threading_mutex_t mutex;
00127 #endif
00128 }
00129 mbedtls_rsa_context;
00130
00157 void mbedtls_rsa_init( mbedtls_rsa_context *ctx,
00158 int padding,
00159 int hash_id);
00160
00189 int mbedtls_rsa_import( mbedtls_rsa_context *ctx,
00190 const mbedtls_mpi *N,
00191 const mbedtls_mpi *P, const mbedtls_mpi *Q,
00192 const mbedtls_mpi *D, const mbedtls_mpi *E );
00193
00227 int mbedtls_rsa_import_raw( mbedtls_rsa_context *ctx,
00228 unsigned char const *N, size_t N_len,
00229 unsigned char const *P, size_t P_len,
00230 unsigned char const *Q, size_t Q_len,
00231 unsigned char const *D, size_t D_len,
00232 unsigned char const *E, size_t E_len );
00233
00265 int mbedtls_rsa_complete( mbedtls_rsa_context *ctx );
00266
00302 int mbedtls_rsa_export( const mbedtls_rsa_context *ctx,
00303 mbedtls_mpi *N, mbedtls_mpi *P, mbedtls_mpi *Q,
00304 mbedtls_mpi *D, mbedtls_mpi *E );
00305
00350 int mbedtls_rsa_export_raw( const mbedtls_rsa_context *ctx,
00351 unsigned char *N, size_t N_len,
00352 unsigned char *P, size_t P_len,
00353 unsigned char *Q, size_t Q_len,
00354 unsigned char *D, size_t D_len,
00355 unsigned char *E, size_t E_len );
00356
00372 int mbedtls_rsa_export_crt( const mbedtls_rsa_context *ctx,
00373 mbedtls_mpi *DP, mbedtls_mpi *DQ, mbedtls_mpi *QP );
00374
00384 void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding,
00385 int hash_id);
00386
00395 size_t mbedtls_rsa_get_len( const mbedtls_rsa_context *ctx );
00396
00412 int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx,
00413 int (*f_rng)(void *, unsigned char *, size_t),
00414 void *p_rng,
00415 unsigned int nbits, int exponent );
00416
00431 int mbedtls_rsa_check_pubkey( const mbedtls_rsa_context *ctx );
00432
00469 int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx );
00470
00482 int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub,
00483 const mbedtls_rsa_context *prv );
00484
00503 int mbedtls_rsa_public( mbedtls_rsa_context *ctx,
00504 const unsigned char *input,
00505 unsigned char *output );
00506
00522 int mbedtls_rsa_private( mbedtls_rsa_context *ctx,
00523 int (*f_rng)(void *, unsigned char *, size_t),
00524 void *p_rng,
00525 const unsigned char *input,
00526 unsigned char *output );
00527
00560 int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx,
00561 int (*f_rng)(void *, unsigned char *, size_t),
00562 void *p_rng,
00563 int mode, size_t ilen,
00564 const unsigned char *input,
00565 unsigned char *output );
00566
00595 int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx,
00596 int (*f_rng)(void *, unsigned char *, size_t),
00597 void *p_rng,
00598 int mode, size_t ilen,
00599 const unsigned char *input,
00600 unsigned char *output );
00601
00632 int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx,
00633 int (*f_rng)(void *, unsigned char *, size_t),
00634 void *p_rng,
00635 int mode,
00636 const unsigned char *label, size_t label_len,
00637 size_t ilen,
00638 const unsigned char *input,
00639 unsigned char *output );
00640
00679 int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx,
00680 int (*f_rng)(void *, unsigned char *, size_t),
00681 void *p_rng,
00682 int mode, size_t *olen,
00683 const unsigned char *input,
00684 unsigned char *output,
00685 size_t output_max_len );
00686
00722 int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx,
00723 int (*f_rng)(void *, unsigned char *, size_t),
00724 void *p_rng,
00725 int mode, size_t *olen,
00726 const unsigned char *input,
00727 unsigned char *output,
00728 size_t output_max_len );
00729
00768 int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx,
00769 int (*f_rng)(void *, unsigned char *, size_t),
00770 void *p_rng,
00771 int mode,
00772 const unsigned char *label, size_t label_len,
00773 size_t *olen,
00774 const unsigned char *input,
00775 unsigned char *output,
00776 size_t output_max_len );
00777
00815 int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx,
00816 int (*f_rng)(void *, unsigned char *, size_t),
00817 void *p_rng,
00818 int mode,
00819 mbedtls_md_type_t md_alg,
00820 unsigned int hashlen,
00821 const unsigned char *hash,
00822 unsigned char *sig );
00823
00854 int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx,
00855 int (*f_rng)(void *, unsigned char *, size_t),
00856 void *p_rng,
00857 int mode,
00858 mbedtls_md_type_t md_alg,
00859 unsigned int hashlen,
00860 const unsigned char *hash,
00861 unsigned char *sig );
00862
00901 int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx,
00902 int (*f_rng)(void *, unsigned char *, size_t),
00903 void *p_rng,
00904 int mode,
00905 mbedtls_md_type_t md_alg,
00906 unsigned int hashlen,
00907 const unsigned char *hash,
00908 unsigned char *sig );
00909
00947 int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx,
00948 int (*f_rng)(void *, unsigned char *, size_t),
00949 void *p_rng,
00950 int mode,
00951 mbedtls_md_type_t md_alg,
00952 unsigned int hashlen,
00953 const unsigned char *hash,
00954 const unsigned char *sig );
00955
00986 int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx,
00987 int (*f_rng)(void *, unsigned char *, size_t),
00988 void *p_rng,
00989 int mode,
00990 mbedtls_md_type_t md_alg,
00991 unsigned int hashlen,
00992 const unsigned char *hash,
00993 const unsigned char *sig );
00994
01036 int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx,
01037 int (*f_rng)(void *, unsigned char *, size_t),
01038 void *p_rng,
01039 int mode,
01040 mbedtls_md_type_t md_alg,
01041 unsigned int hashlen,
01042 const unsigned char *hash,
01043 const unsigned char *sig );
01044
01074 int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx,
01075 int (*f_rng)(void *, unsigned char *, size_t),
01076 void *p_rng,
01077 int mode,
01078 mbedtls_md_type_t md_alg,
01079 unsigned int hashlen,
01080 const unsigned char *hash,
01081 mbedtls_md_type_t mgf1_hash_id,
01082 int expected_salt_len,
01083 const unsigned char *sig );
01084
01094 int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src );
01095
01101 void mbedtls_rsa_free( mbedtls_rsa_context *ctx );
01102
01103 #ifdef __cplusplus
01104 }
01105 #endif
01106
01107 #else
01108 #include "rsa_alt.h"
01109 #endif
01110
01111 #ifdef __cplusplus
01112 extern "C" {
01113 #endif
01114
01120 int mbedtls_rsa_self_test( int verbose );
01121
01122 #ifdef __cplusplus
01123 }
01124 #endif
01125
01126 #endif