00001
00006
00007
00008
00009
00010
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 #ifndef MBEDTLS_ECJPAKE_H
00052 #define MBEDTLS_ECJPAKE_H
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 #if !defined(MBEDTLS_CONFIG_FILE)
00071 #include "config.h"
00072 #else
00073 #include MBEDTLS_CONFIG_FILE
00074 #endif
00075
00076 #include "ecp.h"
00077 #include "md.h"
00078
00079 #if !defined(MBEDTLS_ECJPAKE_ALT)
00080
00081 #ifdef __cplusplus
00082 extern "C" {
00083 #endif
00084
00088 typedef enum {
00089 MBEDTLS_ECJPAKE_CLIENT = 0,
00090 MBEDTLS_ECJPAKE_SERVER,
00091 } mbedtls_ecjpake_role;
00092
00104 typedef struct
00105 {
00106 const mbedtls_md_info_t *md_info;
00107 mbedtls_ecp_group grp;
00108 mbedtls_ecjpake_role role;
00109 int point_format;
00111 mbedtls_ecp_point Xm1;
00112 mbedtls_ecp_point Xm2;
00113 mbedtls_ecp_point Xp1;
00114 mbedtls_ecp_point Xp2;
00115 mbedtls_ecp_point Xp;
00117 mbedtls_mpi xm1;
00118 mbedtls_mpi xm2;
00120 mbedtls_mpi s;
00121 } mbedtls_ecjpake_context;
00122
00129 void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx );
00130
00147 int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx,
00148 mbedtls_ecjpake_role role,
00149 mbedtls_md_type_t hash,
00150 mbedtls_ecp_group_id curve,
00151 const unsigned char *secret,
00152 size_t len );
00153
00162 int mbedtls_ecjpake_check( const mbedtls_ecjpake_context *ctx );
00163
00179 int mbedtls_ecjpake_write_round_one( mbedtls_ecjpake_context *ctx,
00180 unsigned char *buf, size_t len, size_t *olen,
00181 int (*f_rng)(void *, unsigned char *, size_t),
00182 void *p_rng );
00183
00196 int mbedtls_ecjpake_read_round_one( mbedtls_ecjpake_context *ctx,
00197 const unsigned char *buf,
00198 size_t len );
00199
00214 int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx,
00215 unsigned char *buf, size_t len, size_t *olen,
00216 int (*f_rng)(void *, unsigned char *, size_t),
00217 void *p_rng );
00218
00230 int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx,
00231 const unsigned char *buf,
00232 size_t len );
00233
00248 int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx,
00249 unsigned char *buf, size_t len, size_t *olen,
00250 int (*f_rng)(void *, unsigned char *, size_t),
00251 void *p_rng );
00252
00258 void mbedtls_ecjpake_free( mbedtls_ecjpake_context *ctx );
00259
00260 #ifdef __cplusplus
00261 }
00262 #endif
00263
00264 #else
00265 #include "ecjpake_alt.h"
00266 #endif
00267
00268 #if defined(MBEDTLS_SELF_TEST)
00269
00270 #ifdef __cplusplus
00271 extern "C" {
00272 #endif
00273
00279 int mbedtls_ecjpake_self_test( int verbose );
00280
00281 #ifdef __cplusplus
00282 }
00283 #endif
00284
00285 #endif
00286
00287 #endif