00001
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #ifndef MBEDTLS_RSA_H
00055 #define MBEDTLS_RSA_H
00056
00057 #if !defined(MBEDTLS_CONFIG_FILE)
00058 #include "config.h"
00059 #else
00060 #include MBEDTLS_CONFIG_FILE
00061 #endif
00062
00063 #include "bignum.h"
00064 #include "md.h"
00065
00066 #if defined(MBEDTLS_THREADING_C)
00067 #include "threading.h"
00068 #endif
00069
00070
00071
00072
00073 #define MBEDTLS_ERR_RSA_BAD_INPUT_DATA -0x4080
00074 #define MBEDTLS_ERR_RSA_INVALID_PADDING -0x4100
00075 #define MBEDTLS_ERR_RSA_KEY_GEN_FAILED -0x4180
00076 #define MBEDTLS_ERR_RSA_KEY_CHECK_FAILED -0x4200
00077 #define MBEDTLS_ERR_RSA_PUBLIC_FAILED -0x4280
00078 #define MBEDTLS_ERR_RSA_PRIVATE_FAILED -0x4300
00079 #define MBEDTLS_ERR_RSA_VERIFY_FAILED -0x4380
00080 #define MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE -0x4400
00081 #define MBEDTLS_ERR_RSA_RNG_FAILED -0x4480
00082 #define MBEDTLS_ERR_RSA_UNSUPPORTED_OPERATION -0x4500
00083 #define MBEDTLS_ERR_RSA_HW_ACCEL_FAILED -0x4580
00085
00086
00087
00088 #define MBEDTLS_RSA_PUBLIC 0
00089 #define MBEDTLS_RSA_PRIVATE 1
00091 #define MBEDTLS_RSA_PKCS_V15 0
00092 #define MBEDTLS_RSA_PKCS_V21 1
00094 #define MBEDTLS_RSA_SIGN 1
00095 #define MBEDTLS_RSA_CRYPT 2
00097 #define MBEDTLS_RSA_SALT_LEN_ANY -1
00098
00099
00100
00101
00102
00103
00104 #if !defined(MBEDTLS_RSA_ALT)
00105
00106
00107
00108 #ifdef __cplusplus
00109 extern "C" {
00110 #endif
00111
00119 typedef struct
00120 {
00121 int ver;
00122 size_t len;
00124 mbedtls_mpi N;
00125 mbedtls_mpi E;
00127 mbedtls_mpi D;
00128 mbedtls_mpi P;
00129 mbedtls_mpi Q;
00131 mbedtls_mpi DP;
00132 mbedtls_mpi DQ;
00133 mbedtls_mpi QP;
00135 mbedtls_mpi RN;
00137 mbedtls_mpi RP;
00138 mbedtls_mpi RQ;
00140 mbedtls_mpi Vi;
00141 mbedtls_mpi Vf;
00143 int padding;
00146 int hash_id;
00150 #if defined(MBEDTLS_THREADING_C)
00151 mbedtls_threading_mutex_t mutex;
00152 #endif
00153 }
00154 mbedtls_rsa_context;
00155
00182 void mbedtls_rsa_init( mbedtls_rsa_context *ctx,
00183 int padding,
00184 int hash_id);
00185
00214 int mbedtls_rsa_import( mbedtls_rsa_context *ctx,
00215 const mbedtls_mpi *N,
00216 const mbedtls_mpi *P, const mbedtls_mpi *Q,
00217 const mbedtls_mpi *D, const mbedtls_mpi *E );
00218
00252 int mbedtls_rsa_import_raw( mbedtls_rsa_context *ctx,
00253 unsigned char const *N, size_t N_len,
00254 unsigned char const *P, size_t P_len,
00255 unsigned char const *Q, size_t Q_len,
00256 unsigned char const *D, size_t D_len,
00257 unsigned char const *E, size_t E_len );
00258
00290 int mbedtls_rsa_complete( mbedtls_rsa_context *ctx );
00291
00327 int mbedtls_rsa_export( const mbedtls_rsa_context *ctx,
00328 mbedtls_mpi *N, mbedtls_mpi *P, mbedtls_mpi *Q,
00329 mbedtls_mpi *D, mbedtls_mpi *E );
00330
00375 int mbedtls_rsa_export_raw( const mbedtls_rsa_context *ctx,
00376 unsigned char *N, size_t N_len,
00377 unsigned char *P, size_t P_len,
00378 unsigned char *Q, size_t Q_len,
00379 unsigned char *D, size_t D_len,
00380 unsigned char *E, size_t E_len );
00381
00397 int mbedtls_rsa_export_crt( const mbedtls_rsa_context *ctx,
00398 mbedtls_mpi *DP, mbedtls_mpi *DQ, mbedtls_mpi *QP );
00399
00409 void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding,
00410 int hash_id);
00411
00420 size_t mbedtls_rsa_get_len( const mbedtls_rsa_context *ctx );
00421
00437 int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx,
00438 int (*f_rng)(void *, unsigned char *, size_t),
00439 void *p_rng,
00440 unsigned int nbits, int exponent );
00441
00456 int mbedtls_rsa_check_pubkey( const mbedtls_rsa_context *ctx );
00457
00494 int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx );
00495
00507 int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub,
00508 const mbedtls_rsa_context *prv );
00509
00528 int mbedtls_rsa_public( mbedtls_rsa_context *ctx,
00529 const unsigned char *input,
00530 unsigned char *output );
00531
00559 int mbedtls_rsa_private( mbedtls_rsa_context *ctx,
00560 int (*f_rng)(void *, unsigned char *, size_t),
00561 void *p_rng,
00562 const unsigned char *input,
00563 unsigned char *output );
00564
00597 int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx,
00598 int (*f_rng)(void *, unsigned char *, size_t),
00599 void *p_rng,
00600 int mode, size_t ilen,
00601 const unsigned char *input,
00602 unsigned char *output );
00603
00632 int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx,
00633 int (*f_rng)(void *, unsigned char *, size_t),
00634 void *p_rng,
00635 int mode, size_t ilen,
00636 const unsigned char *input,
00637 unsigned char *output );
00638
00669 int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx,
00670 int (*f_rng)(void *, unsigned char *, size_t),
00671 void *p_rng,
00672 int mode,
00673 const unsigned char *label, size_t label_len,
00674 size_t ilen,
00675 const unsigned char *input,
00676 unsigned char *output );
00677
00716 int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx,
00717 int (*f_rng)(void *, unsigned char *, size_t),
00718 void *p_rng,
00719 int mode, size_t *olen,
00720 const unsigned char *input,
00721 unsigned char *output,
00722 size_t output_max_len );
00723
00759 int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx,
00760 int (*f_rng)(void *, unsigned char *, size_t),
00761 void *p_rng,
00762 int mode, size_t *olen,
00763 const unsigned char *input,
00764 unsigned char *output,
00765 size_t output_max_len );
00766
00805 int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx,
00806 int (*f_rng)(void *, unsigned char *, size_t),
00807 void *p_rng,
00808 int mode,
00809 const unsigned char *label, size_t label_len,
00810 size_t *olen,
00811 const unsigned char *input,
00812 unsigned char *output,
00813 size_t output_max_len );
00814
00853 int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx,
00854 int (*f_rng)(void *, unsigned char *, size_t),
00855 void *p_rng,
00856 int mode,
00857 mbedtls_md_type_t md_alg,
00858 unsigned int hashlen,
00859 const unsigned char *hash,
00860 unsigned char *sig );
00861
00893 int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx,
00894 int (*f_rng)(void *, unsigned char *, size_t),
00895 void *p_rng,
00896 int mode,
00897 mbedtls_md_type_t md_alg,
00898 unsigned int hashlen,
00899 const unsigned char *hash,
00900 unsigned char *sig );
00901
00941 int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx,
00942 int (*f_rng)(void *, unsigned char *, size_t),
00943 void *p_rng,
00944 int mode,
00945 mbedtls_md_type_t md_alg,
00946 unsigned int hashlen,
00947 const unsigned char *hash,
00948 unsigned char *sig );
00949
00987 int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx,
00988 int (*f_rng)(void *, unsigned char *, size_t),
00989 void *p_rng,
00990 int mode,
00991 mbedtls_md_type_t md_alg,
00992 unsigned int hashlen,
00993 const unsigned char *hash,
00994 const unsigned char *sig );
00995
01026 int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx,
01027 int (*f_rng)(void *, unsigned char *, size_t),
01028 void *p_rng,
01029 int mode,
01030 mbedtls_md_type_t md_alg,
01031 unsigned int hashlen,
01032 const unsigned char *hash,
01033 const unsigned char *sig );
01034
01076 int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx,
01077 int (*f_rng)(void *, unsigned char *, size_t),
01078 void *p_rng,
01079 int mode,
01080 mbedtls_md_type_t md_alg,
01081 unsigned int hashlen,
01082 const unsigned char *hash,
01083 const unsigned char *sig );
01084
01114 int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx,
01115 int (*f_rng)(void *, unsigned char *, size_t),
01116 void *p_rng,
01117 int mode,
01118 mbedtls_md_type_t md_alg,
01119 unsigned int hashlen,
01120 const unsigned char *hash,
01121 mbedtls_md_type_t mgf1_hash_id,
01122 int expected_salt_len,
01123 const unsigned char *sig );
01124
01134 int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src );
01135
01141 void mbedtls_rsa_free( mbedtls_rsa_context *ctx );
01142
01143 #ifdef __cplusplus
01144 }
01145 #endif
01146
01147 #else
01148 #include "rsa_alt.h"
01149 #endif
01150
01151 #ifdef __cplusplus
01152 extern "C" {
01153 #endif
01154
01160 int mbedtls_rsa_self_test( int verbose );
01161
01162 #ifdef __cplusplus
01163 }
01164 #endif
01165
01166 #endif