pk.h

Go to the documentation of this file.
00001 
00024 #ifndef MBEDTLS_PK_H
00025 #define MBEDTLS_PK_H
00026 
00027 #if !defined(MBEDTLS_CONFIG_FILE)
00028 #include "config.h"
00029 #else
00030 #include MBEDTLS_CONFIG_FILE
00031 #endif
00032 
00033 #include "md.h"
00034 
00035 #if defined(MBEDTLS_RSA_C)
00036 #include "rsa.h"
00037 #endif
00038 
00039 #if defined(MBEDTLS_ECP_C)
00040 #include "ecp.h"
00041 #endif
00042 
00043 #if defined(MBEDTLS_ECDSA_C)
00044 #include "ecdsa.h"
00045 #endif
00046 
00047 #if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
00048     !defined(inline) && !defined(__cplusplus)
00049 #define inline __inline
00050 #endif
00051 
00052 #define MBEDTLS_ERR_PK_ALLOC_FAILED        -0x3F80  
00053 #define MBEDTLS_ERR_PK_TYPE_MISMATCH       -0x3F00  
00054 #define MBEDTLS_ERR_PK_BAD_INPUT_DATA      -0x3E80  
00055 #define MBEDTLS_ERR_PK_FILE_IO_ERROR       -0x3E00  
00056 #define MBEDTLS_ERR_PK_KEY_INVALID_VERSION -0x3D80  
00057 #define MBEDTLS_ERR_PK_KEY_INVALID_FORMAT  -0x3D00  
00058 #define MBEDTLS_ERR_PK_UNKNOWN_PK_ALG      -0x3C80  
00059 #define MBEDTLS_ERR_PK_PASSWORD_REQUIRED   -0x3C00  
00060 #define MBEDTLS_ERR_PK_PASSWORD_MISMATCH   -0x3B80  
00061 #define MBEDTLS_ERR_PK_INVALID_PUBKEY      -0x3B00  
00062 #define MBEDTLS_ERR_PK_INVALID_ALG         -0x3A80  
00063 #define MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE -0x3A00  
00064 #define MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE -0x3980  
00065 #define MBEDTLS_ERR_PK_SIG_LEN_MISMATCH    -0x3900  
00067 #ifdef __cplusplus
00068 extern "C" {
00069 #endif
00070 
00074 typedef enum {
00075     MBEDTLS_PK_NONE=0,
00076     MBEDTLS_PK_RSA,
00077     MBEDTLS_PK_ECKEY,
00078     MBEDTLS_PK_ECKEY_DH,
00079     MBEDTLS_PK_ECDSA,
00080     MBEDTLS_PK_RSA_ALT,
00081     MBEDTLS_PK_RSASSA_PSS,
00082 } mbedtls_pk_type_t;
00083 
00088 typedef struct
00089 {
00090     mbedtls_md_type_t mgf1_hash_id;
00091     int expected_salt_len;
00092 
00093 } mbedtls_pk_rsassa_pss_options;
00094 
00098 typedef enum
00099 {
00100     MBEDTLS_PK_DEBUG_NONE = 0,
00101     MBEDTLS_PK_DEBUG_MPI,
00102     MBEDTLS_PK_DEBUG_ECP,
00103 } mbedtls_pk_debug_type;
00104 
00108 typedef struct
00109 {
00110     mbedtls_pk_debug_type type;
00111     const char *name;
00112     void *value;
00113 } mbedtls_pk_debug_item;
00114 
00116 #define MBEDTLS_PK_DEBUG_MAX_ITEMS 3
00117 
00121 typedef struct mbedtls_pk_info_t mbedtls_pk_info_t;
00122 
00126 typedef struct
00127 {
00128     const mbedtls_pk_info_t *   pk_info; 
00129     void *                      pk_ctx;  
00130 } mbedtls_pk_context;
00131 
00132 #if defined(MBEDTLS_RSA_C)
00133 
00139 static inline mbedtls_rsa_context *mbedtls_pk_rsa( const mbedtls_pk_context pk )
00140 {
00141     return( (mbedtls_rsa_context *) (pk).pk_ctx );
00142 }
00143 #endif /* MBEDTLS_RSA_C */
00144 
00145 #if defined(MBEDTLS_ECP_C)
00146 
00152 static inline mbedtls_ecp_keypair *mbedtls_pk_ec( const mbedtls_pk_context pk )
00153 {
00154     return( (mbedtls_ecp_keypair *) (pk).pk_ctx );
00155 }
00156 #endif /* MBEDTLS_ECP_C */
00157 
00158 #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
00159 
00162 typedef int (*mbedtls_pk_rsa_alt_decrypt_func)( void *ctx, int mode, size_t *olen,
00163                     const unsigned char *input, unsigned char *output,
00164                     size_t output_max_len );
00165 typedef int (*mbedtls_pk_rsa_alt_sign_func)( void *ctx,
00166                     int (*f_rng)(void *, unsigned char *, size_t), void *p_rng,
00167                     int mode, mbedtls_md_type_t md_alg, unsigned int hashlen,
00168                     const unsigned char *hash, unsigned char *sig );
00169 typedef size_t (*mbedtls_pk_rsa_alt_key_len_func)( void *ctx );
00170 #endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */
00171 
00179 const mbedtls_pk_info_t *mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type );
00180 
00184 void mbedtls_pk_init( mbedtls_pk_context *ctx );
00185 
00189 void mbedtls_pk_free( mbedtls_pk_context *ctx );
00190 
00205 int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info );
00206 
00207 #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
00208 
00222 int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key,
00223                          mbedtls_pk_rsa_alt_decrypt_func decrypt_func,
00224                          mbedtls_pk_rsa_alt_sign_func sign_func,
00225                          mbedtls_pk_rsa_alt_key_len_func key_len_func );
00226 #endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */
00227 
00235 size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx );
00236 
00243 static inline size_t mbedtls_pk_get_len( const mbedtls_pk_context *ctx )
00244 {
00245     return( ( mbedtls_pk_get_bitlen( ctx ) + 7 ) / 8 );
00246 }
00247 
00257 int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type );
00258 
00283 int mbedtls_pk_verify( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg,
00284                const unsigned char *hash, size_t hash_len,
00285                const unsigned char *sig, size_t sig_len );
00286 
00316 int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options,
00317                    mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg,
00318                    const unsigned char *hash, size_t hash_len,
00319                    const unsigned char *sig, size_t sig_len );
00320 
00345 int mbedtls_pk_sign( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg,
00346              const unsigned char *hash, size_t hash_len,
00347              unsigned char *sig, size_t *sig_len,
00348              int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
00349 
00366 int mbedtls_pk_decrypt( mbedtls_pk_context *ctx,
00367                 const unsigned char *input, size_t ilen,
00368                 unsigned char *output, size_t *olen, size_t osize,
00369                 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
00370 
00387 int mbedtls_pk_encrypt( mbedtls_pk_context *ctx,
00388                 const unsigned char *input, size_t ilen,
00389                 unsigned char *output, size_t *olen, size_t osize,
00390                 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
00391 
00400 int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_context *prv );
00401 
00410 int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *items );
00411 
00419 const char * mbedtls_pk_get_name( const mbedtls_pk_context *ctx );
00420 
00428 mbedtls_pk_type_t mbedtls_pk_get_type( const mbedtls_pk_context *ctx );
00429 
00430 #if defined(MBEDTLS_PK_PARSE_C)
00431 
00450 int mbedtls_pk_parse_key( mbedtls_pk_context *ctx,
00451                   const unsigned char *key, size_t keylen,
00452                   const unsigned char *pwd, size_t pwdlen );
00453 
00471 int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx,
00472                          const unsigned char *key, size_t keylen );
00473 
00474 #if defined(MBEDTLS_FS_IO)
00475 
00491 int mbedtls_pk_parse_keyfile( mbedtls_pk_context *ctx,
00492                       const char *path, const char *password );
00493 
00510 int mbedtls_pk_parse_public_keyfile( mbedtls_pk_context *ctx, const char *path );
00511 #endif /* MBEDTLS_FS_IO */
00512 #endif /* MBEDTLS_PK_PARSE_C */
00513 
00514 #if defined(MBEDTLS_PK_WRITE_C)
00515 
00528 int mbedtls_pk_write_key_der( mbedtls_pk_context *ctx, unsigned char *buf, size_t size );
00529 
00543 int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *ctx, unsigned char *buf, size_t size );
00544 
00545 #if defined(MBEDTLS_PEM_WRITE_C)
00546 
00555 int mbedtls_pk_write_pubkey_pem( mbedtls_pk_context *ctx, unsigned char *buf, size_t size );
00556 
00566 int mbedtls_pk_write_key_pem( mbedtls_pk_context *ctx, unsigned char *buf, size_t size );
00567 #endif /* MBEDTLS_PEM_WRITE_C */
00568 #endif /* MBEDTLS_PK_WRITE_C */
00569 
00570 /*
00571  * WARNING: Low-level functions. You probably do not want to use these unless
00572  *          you are certain you do ;)
00573  */
00574 
00575 #if defined(MBEDTLS_PK_PARSE_C)
00576 
00585 int mbedtls_pk_parse_subpubkey( unsigned char **p, const unsigned char *end,
00586                         mbedtls_pk_context *pk );
00587 #endif /* MBEDTLS_PK_PARSE_C */
00588 
00589 #if defined(MBEDTLS_PK_WRITE_C)
00590 
00600 int mbedtls_pk_write_pubkey( unsigned char **p, unsigned char *start,
00601                      const mbedtls_pk_context *key );
00602 #endif /* MBEDTLS_PK_WRITE_C */
00603 
00604 /*
00605  * Internal module functions. You probably do not want to use these unless you
00606  * know you do.
00607  */
00608 #if defined(MBEDTLS_FS_IO)
00609 int mbedtls_pk_load_file( const char *path, unsigned char **buf, size_t *n );
00610 #endif
00611 
00612 #ifdef __cplusplus
00613 }
00614 #endif
00615 
00616 #endif /* MBEDTLS_PK_H */

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