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
00534 int mbedtls_rsa_private( mbedtls_rsa_context *ctx,
00535 int (*f_rng)(void *, unsigned char *, size_t),
00536 void *p_rng,
00537 const unsigned char *input,
00538 unsigned char *output );
00539
00572 int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx,
00573 int (*f_rng)(void *, unsigned char *, size_t),
00574 void *p_rng,
00575 int mode, size_t ilen,
00576 const unsigned char *input,
00577 unsigned char *output );
00578
00607 int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx,
00608 int (*f_rng)(void *, unsigned char *, size_t),
00609 void *p_rng,
00610 int mode, size_t ilen,
00611 const unsigned char *input,
00612 unsigned char *output );
00613
00644 int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx,
00645 int (*f_rng)(void *, unsigned char *, size_t),
00646 void *p_rng,
00647 int mode,
00648 const unsigned char *label, size_t label_len,
00649 size_t ilen,
00650 const unsigned char *input,
00651 unsigned char *output );
00652
00691 int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx,
00692 int (*f_rng)(void *, unsigned char *, size_t),
00693 void *p_rng,
00694 int mode, size_t *olen,
00695 const unsigned char *input,
00696 unsigned char *output,
00697 size_t output_max_len );
00698
00734 int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx,
00735 int (*f_rng)(void *, unsigned char *, size_t),
00736 void *p_rng,
00737 int mode, size_t *olen,
00738 const unsigned char *input,
00739 unsigned char *output,
00740 size_t output_max_len );
00741
00780 int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx,
00781 int (*f_rng)(void *, unsigned char *, size_t),
00782 void *p_rng,
00783 int mode,
00784 const unsigned char *label, size_t label_len,
00785 size_t *olen,
00786 const unsigned char *input,
00787 unsigned char *output,
00788 size_t output_max_len );
00789
00827 int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx,
00828 int (*f_rng)(void *, unsigned char *, size_t),
00829 void *p_rng,
00830 int mode,
00831 mbedtls_md_type_t md_alg,
00832 unsigned int hashlen,
00833 const unsigned char *hash,
00834 unsigned char *sig );
00835
00866 int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx,
00867 int (*f_rng)(void *, unsigned char *, size_t),
00868 void *p_rng,
00869 int mode,
00870 mbedtls_md_type_t md_alg,
00871 unsigned int hashlen,
00872 const unsigned char *hash,
00873 unsigned char *sig );
00874
00913 int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx,
00914 int (*f_rng)(void *, unsigned char *, size_t),
00915 void *p_rng,
00916 int mode,
00917 mbedtls_md_type_t md_alg,
00918 unsigned int hashlen,
00919 const unsigned char *hash,
00920 unsigned char *sig );
00921
00959 int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx,
00960 int (*f_rng)(void *, unsigned char *, size_t),
00961 void *p_rng,
00962 int mode,
00963 mbedtls_md_type_t md_alg,
00964 unsigned int hashlen,
00965 const unsigned char *hash,
00966 const unsigned char *sig );
00967
00998 int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx,
00999 int (*f_rng)(void *, unsigned char *, size_t),
01000 void *p_rng,
01001 int mode,
01002 mbedtls_md_type_t md_alg,
01003 unsigned int hashlen,
01004 const unsigned char *hash,
01005 const unsigned char *sig );
01006
01048 int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx,
01049 int (*f_rng)(void *, unsigned char *, size_t),
01050 void *p_rng,
01051 int mode,
01052 mbedtls_md_type_t md_alg,
01053 unsigned int hashlen,
01054 const unsigned char *hash,
01055 const unsigned char *sig );
01056
01086 int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx,
01087 int (*f_rng)(void *, unsigned char *, size_t),
01088 void *p_rng,
01089 int mode,
01090 mbedtls_md_type_t md_alg,
01091 unsigned int hashlen,
01092 const unsigned char *hash,
01093 mbedtls_md_type_t mgf1_hash_id,
01094 int expected_salt_len,
01095 const unsigned char *sig );
01096
01106 int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src );
01107
01113 void mbedtls_rsa_free( mbedtls_rsa_context *ctx );
01114
01115 #ifdef __cplusplus
01116 }
01117 #endif
01118
01119 #else
01120 #include "rsa_alt.h"
01121 #endif
01122
01123 #ifdef __cplusplus
01124 extern "C" {
01125 #endif
01126
01132 int mbedtls_rsa_self_test( int verbose );
01133
01134 #ifdef __cplusplus
01135 }
01136 #endif
01137
01138 #endif