rsa.h

Go to the documentation of this file.
00001 
00023 #ifndef MBEDTLS_RSA_H
00024 #define MBEDTLS_RSA_H
00025 
00026 #if !defined(MBEDTLS_CONFIG_FILE)
00027 #include "config.h"
00028 #else
00029 #include MBEDTLS_CONFIG_FILE
00030 #endif
00031 
00032 #include "bignum.h"
00033 #include "md.h"
00034 
00035 #if defined(MBEDTLS_THREADING_C)
00036 #include "threading.h"
00037 #endif
00038 
00039 /*
00040  * RSA Error codes
00041  */
00042 #define MBEDTLS_ERR_RSA_BAD_INPUT_DATA                    -0x4080  
00043 #define MBEDTLS_ERR_RSA_INVALID_PADDING                   -0x4100  
00044 #define MBEDTLS_ERR_RSA_KEY_GEN_FAILED                    -0x4180  
00045 #define MBEDTLS_ERR_RSA_KEY_CHECK_FAILED                  -0x4200  
00046 #define MBEDTLS_ERR_RSA_PUBLIC_FAILED                     -0x4280  
00047 #define MBEDTLS_ERR_RSA_PRIVATE_FAILED                    -0x4300  
00048 #define MBEDTLS_ERR_RSA_VERIFY_FAILED                     -0x4380  
00049 #define MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE                  -0x4400  
00050 #define MBEDTLS_ERR_RSA_RNG_FAILED                        -0x4480  
00052 /*
00053  * RSA constants
00054  */
00055 #define MBEDTLS_RSA_PUBLIC      0
00056 #define MBEDTLS_RSA_PRIVATE     1
00057 
00058 #define MBEDTLS_RSA_PKCS_V15    0
00059 #define MBEDTLS_RSA_PKCS_V21    1
00060 
00061 #define MBEDTLS_RSA_SIGN        1
00062 #define MBEDTLS_RSA_CRYPT       2
00063 
00064 #define MBEDTLS_RSA_SALT_LEN_ANY    -1
00065 
00066 /*
00067  * The above constants may be used even if the RSA module is compile out,
00068  * eg for alternative (PKCS#11) RSA implemenations in the PK layers.
00069  */
00070 #if defined(MBEDTLS_RSA_C)
00071 
00072 #ifdef __cplusplus
00073 extern "C" {
00074 #endif
00075 
00079 typedef struct
00080 {
00081     int ver;                    
00082     size_t len;                 
00084     mbedtls_mpi N;                      
00085     mbedtls_mpi E;                      
00087     mbedtls_mpi D;                      
00088     mbedtls_mpi P;                      
00089     mbedtls_mpi Q;                      
00090     mbedtls_mpi DP;                     
00091     mbedtls_mpi DQ;                     
00092     mbedtls_mpi QP;                     
00094     mbedtls_mpi RN;                     
00095     mbedtls_mpi RP;                     
00096     mbedtls_mpi RQ;                     
00098     mbedtls_mpi Vi;                     
00099     mbedtls_mpi Vf;                     
00101     int padding;                
00103     int hash_id;                
00107 #if defined(MBEDTLS_THREADING_C)
00108     mbedtls_threading_mutex_t mutex;    
00109 #endif
00110 }
00111 mbedtls_rsa_context;
00112 
00137 void mbedtls_rsa_init( mbedtls_rsa_context *ctx,
00138                int padding,
00139                int hash_id);
00140 
00149 void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding, int hash_id);
00150 
00165 int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx,
00166                  int (*f_rng)(void *, unsigned char *, size_t),
00167                  void *p_rng,
00168                  unsigned int nbits, int exponent );
00169 
00177 int mbedtls_rsa_check_pubkey( const mbedtls_rsa_context *ctx );
00178 
00186 int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx );
00187 
00197 int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub, const mbedtls_rsa_context *prv );
00198 
00215 int mbedtls_rsa_public( mbedtls_rsa_context *ctx,
00216                 const unsigned char *input,
00217                 unsigned char *output );
00218 
00233 int mbedtls_rsa_private( mbedtls_rsa_context *ctx,
00234                  int (*f_rng)(void *, unsigned char *, size_t),
00235                  void *p_rng,
00236                  const unsigned char *input,
00237                  unsigned char *output );
00238 
00258 int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx,
00259                        int (*f_rng)(void *, unsigned char *, size_t),
00260                        void *p_rng,
00261                        int mode, size_t ilen,
00262                        const unsigned char *input,
00263                        unsigned char *output );
00264 
00281 int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx,
00282                                  int (*f_rng)(void *, unsigned char *, size_t),
00283                                  void *p_rng,
00284                                  int mode, size_t ilen,
00285                                  const unsigned char *input,
00286                                  unsigned char *output );
00287 
00307 int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx,
00308                             int (*f_rng)(void *, unsigned char *, size_t),
00309                             void *p_rng,
00310                             int mode,
00311                             const unsigned char *label, size_t label_len,
00312                             size_t ilen,
00313                             const unsigned char *input,
00314                             unsigned char *output );
00315 
00336 int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx,
00337                        int (*f_rng)(void *, unsigned char *, size_t),
00338                        void *p_rng,
00339                        int mode, size_t *olen,
00340                        const unsigned char *input,
00341                        unsigned char *output,
00342                        size_t output_max_len );
00343 
00362 int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx,
00363                                  int (*f_rng)(void *, unsigned char *, size_t),
00364                                  void *p_rng,
00365                                  int mode, size_t *olen,
00366                                  const unsigned char *input,
00367                                  unsigned char *output,
00368                                  size_t output_max_len );
00369 
00390 int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx,
00391                             int (*f_rng)(void *, unsigned char *, size_t),
00392                             void *p_rng,
00393                             int mode,
00394                             const unsigned char *label, size_t label_len,
00395                             size_t *olen,
00396                             const unsigned char *input,
00397                             unsigned char *output,
00398                             size_t output_max_len );
00399 
00424 int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx,
00425                     int (*f_rng)(void *, unsigned char *, size_t),
00426                     void *p_rng,
00427                     int mode,
00428                     mbedtls_md_type_t md_alg,
00429                     unsigned int hashlen,
00430                     const unsigned char *hash,
00431                     unsigned char *sig );
00432 
00451 int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx,
00452                                int (*f_rng)(void *, unsigned char *, size_t),
00453                                void *p_rng,
00454                                int mode,
00455                                mbedtls_md_type_t md_alg,
00456                                unsigned int hashlen,
00457                                const unsigned char *hash,
00458                                unsigned char *sig );
00459 
00484 int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx,
00485                          int (*f_rng)(void *, unsigned char *, size_t),
00486                          void *p_rng,
00487                          int mode,
00488                          mbedtls_md_type_t md_alg,
00489                          unsigned int hashlen,
00490                          const unsigned char *hash,
00491                          unsigned char *sig );
00492 
00516 int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx,
00517                       int (*f_rng)(void *, unsigned char *, size_t),
00518                       void *p_rng,
00519                       int mode,
00520                       mbedtls_md_type_t md_alg,
00521                       unsigned int hashlen,
00522                       const unsigned char *hash,
00523                       const unsigned char *sig );
00524 
00543 int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx,
00544                                  int (*f_rng)(void *, unsigned char *, size_t),
00545                                  void *p_rng,
00546                                  int mode,
00547                                  mbedtls_md_type_t md_alg,
00548                                  unsigned int hashlen,
00549                                  const unsigned char *hash,
00550                                  const unsigned char *sig );
00551 
00577 int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx,
00578                            int (*f_rng)(void *, unsigned char *, size_t),
00579                            void *p_rng,
00580                            int mode,
00581                            mbedtls_md_type_t md_alg,
00582                            unsigned int hashlen,
00583                            const unsigned char *hash,
00584                            const unsigned char *sig );
00585 
00610 int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx,
00611                                int (*f_rng)(void *, unsigned char *, size_t),
00612                                void *p_rng,
00613                                int mode,
00614                                mbedtls_md_type_t md_alg,
00615                                unsigned int hashlen,
00616                                const unsigned char *hash,
00617                                mbedtls_md_type_t mgf1_hash_id,
00618                                int expected_salt_len,
00619                                const unsigned char *sig );
00620 
00630 int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src );
00631 
00637 void mbedtls_rsa_free( mbedtls_rsa_context *ctx );
00638 
00644 int mbedtls_rsa_self_test( int verbose );
00645 
00646 #ifdef __cplusplus
00647 }
00648 #endif
00649 
00650 #endif /* MBEDTLS_RSA_C */
00651 
00652 #endif /* rsa.h */

Generated on 11 Mar 2017 for mbed TLS v2.4.2 by  doxygen 1.4.7