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
00828 int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx,
00829 int (*f_rng)(void *, unsigned char *, size_t),
00830 void *p_rng,
00831 int mode,
00832 mbedtls_md_type_t md_alg,
00833 unsigned int hashlen,
00834 const unsigned char *hash,
00835 unsigned char *sig );
00836
00868 int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx,
00869 int (*f_rng)(void *, unsigned char *, size_t),
00870 void *p_rng,
00871 int mode,
00872 mbedtls_md_type_t md_alg,
00873 unsigned int hashlen,
00874 const unsigned char *hash,
00875 unsigned char *sig );
00876
00916 int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx,
00917 int (*f_rng)(void *, unsigned char *, size_t),
00918 void *p_rng,
00919 int mode,
00920 mbedtls_md_type_t md_alg,
00921 unsigned int hashlen,
00922 const unsigned char *hash,
00923 unsigned char *sig );
00924
00962 int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx,
00963 int (*f_rng)(void *, unsigned char *, size_t),
00964 void *p_rng,
00965 int mode,
00966 mbedtls_md_type_t md_alg,
00967 unsigned int hashlen,
00968 const unsigned char *hash,
00969 const unsigned char *sig );
00970
01001 int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx,
01002 int (*f_rng)(void *, unsigned char *, size_t),
01003 void *p_rng,
01004 int mode,
01005 mbedtls_md_type_t md_alg,
01006 unsigned int hashlen,
01007 const unsigned char *hash,
01008 const unsigned char *sig );
01009
01051 int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx,
01052 int (*f_rng)(void *, unsigned char *, size_t),
01053 void *p_rng,
01054 int mode,
01055 mbedtls_md_type_t md_alg,
01056 unsigned int hashlen,
01057 const unsigned char *hash,
01058 const unsigned char *sig );
01059
01089 int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx,
01090 int (*f_rng)(void *, unsigned char *, size_t),
01091 void *p_rng,
01092 int mode,
01093 mbedtls_md_type_t md_alg,
01094 unsigned int hashlen,
01095 const unsigned char *hash,
01096 mbedtls_md_type_t mgf1_hash_id,
01097 int expected_salt_len,
01098 const unsigned char *sig );
01099
01109 int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src );
01110
01116 void mbedtls_rsa_free( mbedtls_rsa_context *ctx );
01117
01118 #ifdef __cplusplus
01119 }
01120 #endif
01121
01122 #else
01123 #include "rsa_alt.h"
01124 #endif
01125
01126 #ifdef __cplusplus
01127 extern "C" {
01128 #endif
01129
01135 int mbedtls_rsa_self_test( int verbose );
01136
01137 #ifdef __cplusplus
01138 }
01139 #endif
01140
01141 #endif