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
00055
00056 #ifndef MBEDTLS_RSA_H
00057 #define MBEDTLS_RSA_H
00058
00059 #if !defined(MBEDTLS_CONFIG_FILE)
00060 #include "config.h"
00061 #else
00062 #include MBEDTLS_CONFIG_FILE
00063 #endif
00064
00065 #include "bignum.h"
00066 #include "md.h"
00067
00068 #if defined(MBEDTLS_THREADING_C)
00069 #include "threading.h"
00070 #endif
00071
00072
00073
00074
00075 #define MBEDTLS_ERR_RSA_BAD_INPUT_DATA -0x4080
00076 #define MBEDTLS_ERR_RSA_INVALID_PADDING -0x4100
00077 #define MBEDTLS_ERR_RSA_KEY_GEN_FAILED -0x4180
00078 #define MBEDTLS_ERR_RSA_KEY_CHECK_FAILED -0x4200
00079 #define MBEDTLS_ERR_RSA_PUBLIC_FAILED -0x4280
00080 #define MBEDTLS_ERR_RSA_PRIVATE_FAILED -0x4300
00081 #define MBEDTLS_ERR_RSA_VERIFY_FAILED -0x4380
00082 #define MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE -0x4400
00083 #define MBEDTLS_ERR_RSA_RNG_FAILED -0x4480
00084 #define MBEDTLS_ERR_RSA_UNSUPPORTED_OPERATION -0x4500
00085 #define MBEDTLS_ERR_RSA_HW_ACCEL_FAILED -0x4580
00087
00088
00089
00090 #define MBEDTLS_RSA_PUBLIC 0
00091 #define MBEDTLS_RSA_PRIVATE 1
00093 #define MBEDTLS_RSA_PKCS_V15 0
00094 #define MBEDTLS_RSA_PKCS_V21 1
00096 #define MBEDTLS_RSA_SIGN 1
00097 #define MBEDTLS_RSA_CRYPT 2
00099 #define MBEDTLS_RSA_SALT_LEN_ANY -1
00100
00101
00102
00103
00104
00105
00106 #if !defined(MBEDTLS_RSA_ALT)
00107
00108
00109
00110 #ifdef __cplusplus
00111 extern "C" {
00112 #endif
00113
00121 typedef struct
00122 {
00123 int ver;
00124 size_t len;
00126 mbedtls_mpi N;
00127 mbedtls_mpi E;
00129 mbedtls_mpi D;
00130 mbedtls_mpi P;
00131 mbedtls_mpi Q;
00133 mbedtls_mpi DP;
00134 mbedtls_mpi DQ;
00135 mbedtls_mpi QP;
00137 mbedtls_mpi RN;
00139 mbedtls_mpi RP;
00140 mbedtls_mpi RQ;
00142 mbedtls_mpi Vi;
00143 mbedtls_mpi Vf;
00145 int padding;
00148 int hash_id;
00152 #if defined(MBEDTLS_THREADING_C)
00153 mbedtls_threading_mutex_t mutex;
00154 #endif
00155 }
00156 mbedtls_rsa_context;
00157
00184 void mbedtls_rsa_init( mbedtls_rsa_context *ctx,
00185 int padding,
00186 int hash_id);
00187
00216 int mbedtls_rsa_import( mbedtls_rsa_context *ctx,
00217 const mbedtls_mpi *N,
00218 const mbedtls_mpi *P, const mbedtls_mpi *Q,
00219 const mbedtls_mpi *D, const mbedtls_mpi *E );
00220
00254 int mbedtls_rsa_import_raw( mbedtls_rsa_context *ctx,
00255 unsigned char const *N, size_t N_len,
00256 unsigned char const *P, size_t P_len,
00257 unsigned char const *Q, size_t Q_len,
00258 unsigned char const *D, size_t D_len,
00259 unsigned char const *E, size_t E_len );
00260
00292 int mbedtls_rsa_complete( mbedtls_rsa_context *ctx );
00293
00329 int mbedtls_rsa_export( const mbedtls_rsa_context *ctx,
00330 mbedtls_mpi *N, mbedtls_mpi *P, mbedtls_mpi *Q,
00331 mbedtls_mpi *D, mbedtls_mpi *E );
00332
00377 int mbedtls_rsa_export_raw( const mbedtls_rsa_context *ctx,
00378 unsigned char *N, size_t N_len,
00379 unsigned char *P, size_t P_len,
00380 unsigned char *Q, size_t Q_len,
00381 unsigned char *D, size_t D_len,
00382 unsigned char *E, size_t E_len );
00383
00399 int mbedtls_rsa_export_crt( const mbedtls_rsa_context *ctx,
00400 mbedtls_mpi *DP, mbedtls_mpi *DQ, mbedtls_mpi *QP );
00401
00411 void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding,
00412 int hash_id);
00413
00422 size_t mbedtls_rsa_get_len( const mbedtls_rsa_context *ctx );
00423
00439 int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx,
00440 int (*f_rng)(void *, unsigned char *, size_t),
00441 void *p_rng,
00442 unsigned int nbits, int exponent );
00443
00458 int mbedtls_rsa_check_pubkey( const mbedtls_rsa_context *ctx );
00459
00496 int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx );
00497
00509 int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub,
00510 const mbedtls_rsa_context *prv );
00511
00530 int mbedtls_rsa_public( mbedtls_rsa_context *ctx,
00531 const unsigned char *input,
00532 unsigned char *output );
00533
00561 int mbedtls_rsa_private( mbedtls_rsa_context *ctx,
00562 int (*f_rng)(void *, unsigned char *, size_t),
00563 void *p_rng,
00564 const unsigned char *input,
00565 unsigned char *output );
00566
00599 int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx,
00600 int (*f_rng)(void *, unsigned char *, size_t),
00601 void *p_rng,
00602 int mode, size_t ilen,
00603 const unsigned char *input,
00604 unsigned char *output );
00605
00634 int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx,
00635 int (*f_rng)(void *, unsigned char *, size_t),
00636 void *p_rng,
00637 int mode, size_t ilen,
00638 const unsigned char *input,
00639 unsigned char *output );
00640
00671 int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx,
00672 int (*f_rng)(void *, unsigned char *, size_t),
00673 void *p_rng,
00674 int mode,
00675 const unsigned char *label, size_t label_len,
00676 size_t ilen,
00677 const unsigned char *input,
00678 unsigned char *output );
00679
00718 int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx,
00719 int (*f_rng)(void *, unsigned char *, size_t),
00720 void *p_rng,
00721 int mode, size_t *olen,
00722 const unsigned char *input,
00723 unsigned char *output,
00724 size_t output_max_len );
00725
00761 int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx,
00762 int (*f_rng)(void *, unsigned char *, size_t),
00763 void *p_rng,
00764 int mode, size_t *olen,
00765 const unsigned char *input,
00766 unsigned char *output,
00767 size_t output_max_len );
00768
00807 int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx,
00808 int (*f_rng)(void *, unsigned char *, size_t),
00809 void *p_rng,
00810 int mode,
00811 const unsigned char *label, size_t label_len,
00812 size_t *olen,
00813 const unsigned char *input,
00814 unsigned char *output,
00815 size_t output_max_len );
00816
00855 int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx,
00856 int (*f_rng)(void *, unsigned char *, size_t),
00857 void *p_rng,
00858 int mode,
00859 mbedtls_md_type_t md_alg,
00860 unsigned int hashlen,
00861 const unsigned char *hash,
00862 unsigned char *sig );
00863
00895 int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx,
00896 int (*f_rng)(void *, unsigned char *, size_t),
00897 void *p_rng,
00898 int mode,
00899 mbedtls_md_type_t md_alg,
00900 unsigned int hashlen,
00901 const unsigned char *hash,
00902 unsigned char *sig );
00903
00943 int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx,
00944 int (*f_rng)(void *, unsigned char *, size_t),
00945 void *p_rng,
00946 int mode,
00947 mbedtls_md_type_t md_alg,
00948 unsigned int hashlen,
00949 const unsigned char *hash,
00950 unsigned char *sig );
00951
00989 int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx,
00990 int (*f_rng)(void *, unsigned char *, size_t),
00991 void *p_rng,
00992 int mode,
00993 mbedtls_md_type_t md_alg,
00994 unsigned int hashlen,
00995 const unsigned char *hash,
00996 const unsigned char *sig );
00997
01028 int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx,
01029 int (*f_rng)(void *, unsigned char *, size_t),
01030 void *p_rng,
01031 int mode,
01032 mbedtls_md_type_t md_alg,
01033 unsigned int hashlen,
01034 const unsigned char *hash,
01035 const unsigned char *sig );
01036
01078 int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx,
01079 int (*f_rng)(void *, unsigned char *, size_t),
01080 void *p_rng,
01081 int mode,
01082 mbedtls_md_type_t md_alg,
01083 unsigned int hashlen,
01084 const unsigned char *hash,
01085 const unsigned char *sig );
01086
01116 int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx,
01117 int (*f_rng)(void *, unsigned char *, size_t),
01118 void *p_rng,
01119 int mode,
01120 mbedtls_md_type_t md_alg,
01121 unsigned int hashlen,
01122 const unsigned char *hash,
01123 mbedtls_md_type_t mgf1_hash_id,
01124 int expected_salt_len,
01125 const unsigned char *sig );
01126
01136 int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src );
01137
01143 void mbedtls_rsa_free( mbedtls_rsa_context *ctx );
01144
01145 #ifdef __cplusplus
01146 }
01147 #endif
01148
01149 #else
01150 #include "rsa_alt.h"
01151 #endif
01152
01153 #ifdef __cplusplus
01154 extern "C" {
01155 #endif
01156
01162 int mbedtls_rsa_self_test( int verbose );
01163
01164 #ifdef __cplusplus
01165 }
01166 #endif
01167
01168 #endif