00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef MBEDTLS_ECJPAKE_H
00025 #define MBEDTLS_ECJPAKE_H
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #if !defined(MBEDTLS_CONFIG_FILE)
00044 #include "config.h"
00045 #else
00046 #include MBEDTLS_CONFIG_FILE
00047 #endif
00048
00049 #include "ecp.h"
00050 #include "md.h"
00051
00052 #if !defined(MBEDTLS_ECJPAKE_ALT)
00053
00054 #ifdef __cplusplus
00055 extern "C" {
00056 #endif
00057
00061 typedef enum {
00062 MBEDTLS_ECJPAKE_CLIENT = 0,
00063 MBEDTLS_ECJPAKE_SERVER,
00064 } mbedtls_ecjpake_role;
00065
00077 typedef struct
00078 {
00079 const mbedtls_md_info_t *md_info;
00080 mbedtls_ecp_group grp;
00081 mbedtls_ecjpake_role role;
00082 int point_format;
00084 mbedtls_ecp_point Xm1;
00085 mbedtls_ecp_point Xm2;
00086 mbedtls_ecp_point Xp1;
00087 mbedtls_ecp_point Xp2;
00088 mbedtls_ecp_point Xp;
00090 mbedtls_mpi xm1;
00091 mbedtls_mpi xm2;
00093 mbedtls_mpi s;
00094 } mbedtls_ecjpake_context;
00095
00102 void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx );
00103
00120 int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx,
00121 mbedtls_ecjpake_role role,
00122 mbedtls_md_type_t hash,
00123 mbedtls_ecp_group_id curve,
00124 const unsigned char *secret,
00125 size_t len );
00126
00135 int mbedtls_ecjpake_check( const mbedtls_ecjpake_context *ctx );
00136
00152 int mbedtls_ecjpake_write_round_one( mbedtls_ecjpake_context *ctx,
00153 unsigned char *buf, size_t len, size_t *olen,
00154 int (*f_rng)(void *, unsigned char *, size_t),
00155 void *p_rng );
00156
00169 int mbedtls_ecjpake_read_round_one( mbedtls_ecjpake_context *ctx,
00170 const unsigned char *buf,
00171 size_t len );
00172
00187 int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx,
00188 unsigned char *buf, size_t len, size_t *olen,
00189 int (*f_rng)(void *, unsigned char *, size_t),
00190 void *p_rng );
00191
00203 int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx,
00204 const unsigned char *buf,
00205 size_t len );
00206
00221 int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx,
00222 unsigned char *buf, size_t len, size_t *olen,
00223 int (*f_rng)(void *, unsigned char *, size_t),
00224 void *p_rng );
00225
00231 void mbedtls_ecjpake_free( mbedtls_ecjpake_context *ctx );
00232
00233 #ifdef __cplusplus
00234 }
00235 #endif
00236
00237 #else
00238 #include "ecjpake_alt.h"
00239 #endif
00240
00241 #if defined(MBEDTLS_SELF_TEST)
00242
00243 #ifdef __cplusplus
00244 extern "C" {
00245 #endif
00246
00252 int mbedtls_ecjpake_self_test( int verbose );
00253
00254 #ifdef __cplusplus
00255 }
00256 #endif
00257
00258 #endif
00259
00260 #endif