2 #include "mbedtls/ecdh.h"
4 static int load_public_key( int grp_id, data_t *point,
5 mbedtls_ecp_keypair *ecp )
8 TEST_ASSERT( mbedtls_ecp_group_load( &ecp->grp, grp_id ) == 0 );
9 TEST_ASSERT( mbedtls_ecp_point_read_binary( &ecp->grp,
13 TEST_ASSERT( mbedtls_ecp_check_pubkey( &ecp->grp,
20 static int load_private_key( int grp_id, data_t *private_key,
21 mbedtls_ecp_keypair *ecp,
22 rnd_pseudo_info *rnd_info )
25 TEST_ASSERT( mbedtls_ecp_read_key( grp_id, ecp,
27 private_key->len ) == 0 );
28 TEST_ASSERT( mbedtls_ecp_check_privkey( &ecp->grp, &ecp->d ) == 0 );
29 /* Calculate the public key from the private key. */
30 TEST_ASSERT( mbedtls_ecp_mul( &ecp->grp, &ecp->Q, &ecp->d,
32 &rnd_pseudo_rand, rnd_info ) == 0 );
41 * depends_on:MBEDTLS_ECDH_C
46 void ecdh_valid_param( )
48 TEST_VALID_PARAM( mbedtls_ecdh_free( NULL ) );
52 /* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
53 void ecdh_invalid_param( )
55 mbedtls_ecp_group grp;
56 mbedtls_ecdh_context ctx;
59 mbedtls_ecp_keypair kp;
61 unsigned char buf[42] = { 0 };
62 const unsigned char *buf_null = NULL;
63 size_t const buflen = sizeof( buf );
64 int invalid_side = 42;
65 mbedtls_ecp_group_id valid_grp = MBEDTLS_ECP_DP_SECP192R1;
67 TEST_INVALID_PARAM( mbedtls_ecdh_init( NULL ) );
69 #if defined(MBEDTLS_ECP_RESTARTABLE)
70 TEST_INVALID_PARAM( mbedtls_ecdh_enable_restart( NULL ) );
71 #endif /* MBEDTLS_ECP_RESTARTABLE */
73 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
74 mbedtls_ecdh_gen_public( NULL, &m, &P,
75 rnd_std_rand, NULL ) );
76 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
77 mbedtls_ecdh_gen_public( &grp, NULL, &P,
78 rnd_std_rand, NULL ) );
79 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
80 mbedtls_ecdh_gen_public( &grp, &m, NULL,
81 rnd_std_rand, NULL ) );
82 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
83 mbedtls_ecdh_gen_public( &grp, &m, &P,
86 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
87 mbedtls_ecdh_compute_shared( NULL, &m, &P, &m,
88 rnd_std_rand, NULL ) );
89 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
90 mbedtls_ecdh_compute_shared( &grp, NULL, &P, &m,
91 rnd_std_rand, NULL ) );
92 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
93 mbedtls_ecdh_compute_shared( &grp, &m, NULL, &m,
94 rnd_std_rand, NULL ) );
95 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
96 mbedtls_ecdh_compute_shared( &grp, &m, &P, NULL,
97 rnd_std_rand, NULL ) );
99 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
100 mbedtls_ecdh_setup( NULL, valid_grp ) );
102 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
103 mbedtls_ecdh_make_params( NULL, &olen,
105 rnd_std_rand, NULL ) );
106 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
107 mbedtls_ecdh_make_params( &ctx, NULL,
109 rnd_std_rand, NULL ) );
110 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
111 mbedtls_ecdh_make_params( &ctx, &olen,
113 rnd_std_rand, NULL ) );
114 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
115 mbedtls_ecdh_make_params( &ctx, &olen,
119 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
120 mbedtls_ecdh_read_params( NULL,
121 (const unsigned char**) &buf,
123 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
124 mbedtls_ecdh_read_params( &ctx, &buf_null,
126 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
127 mbedtls_ecdh_read_params( &ctx, NULL, buf ) );
128 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
129 mbedtls_ecdh_read_params( &ctx,
130 (const unsigned char**) &buf,
133 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
134 mbedtls_ecdh_get_params( NULL, &kp,
135 MBEDTLS_ECDH_OURS ) );
136 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
137 mbedtls_ecdh_get_params( &ctx, NULL,
138 MBEDTLS_ECDH_OURS ) );
139 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
140 mbedtls_ecdh_get_params( &ctx, &kp,
143 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
144 mbedtls_ecdh_make_public( NULL, &olen,
148 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
149 mbedtls_ecdh_make_public( &ctx, NULL,
153 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
154 mbedtls_ecdh_make_public( &ctx, &olen,
158 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
159 mbedtls_ecdh_make_public( &ctx, &olen,
164 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
165 mbedtls_ecdh_read_public( NULL, buf, buflen ) );
166 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
167 mbedtls_ecdh_read_public( &ctx, NULL, buflen ) );
169 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
170 mbedtls_ecdh_calc_secret( NULL, &olen, buf, buflen,
173 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
174 mbedtls_ecdh_calc_secret( &ctx, NULL, buf, buflen,
177 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
178 mbedtls_ecdh_calc_secret( &ctx, &olen, NULL, buflen,
188 void ecdh_primitive_random( int id )
190 mbedtls_ecp_group grp;
191 mbedtls_ecp_point qA, qB;
192 mbedtls_mpi dA, dB, zA, zB;
193 rnd_pseudo_info rnd_info;
195 mbedtls_ecp_group_init( &grp );
196 mbedtls_ecp_point_init( &qA ); mbedtls_ecp_point_init( &qB );
197 mbedtls_mpi_init( &dA ); mbedtls_mpi_init( &dB );
198 mbedtls_mpi_init( &zA ); mbedtls_mpi_init( &zB );
199 memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
201 TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 );
203 TEST_ASSERT( mbedtls_ecdh_gen_public( &grp, &dA, &qA, &rnd_pseudo_rand, &rnd_info )
205 TEST_ASSERT( mbedtls_ecdh_gen_public( &grp, &dB, &qB, &rnd_pseudo_rand, &rnd_info )
207 TEST_ASSERT( mbedtls_ecdh_compute_shared( &grp, &zA, &qB, &dA,
208 &rnd_pseudo_rand, &rnd_info ) == 0 );
209 TEST_ASSERT( mbedtls_ecdh_compute_shared( &grp, &zB, &qA, &dB,
212 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &zA, &zB ) == 0 );
215 mbedtls_ecp_group_free( &grp );
216 mbedtls_ecp_point_free( &qA ); mbedtls_ecp_point_free( &qB );
217 mbedtls_mpi_free( &dA ); mbedtls_mpi_free( &dB );
218 mbedtls_mpi_free( &zA ); mbedtls_mpi_free( &zB );
223 void ecdh_primitive_testvec( int id, data_t * rnd_buf_A, char * xA_str,
224 char * yA_str, data_t * rnd_buf_B,
225 char * xB_str, char * yB_str, char * z_str )
227 mbedtls_ecp_group grp;
228 mbedtls_ecp_point qA, qB;
229 mbedtls_mpi dA, dB, zA, zB, check;
230 rnd_buf_info rnd_info_A, rnd_info_B;
232 mbedtls_ecp_group_init( &grp );
233 mbedtls_ecp_point_init( &qA ); mbedtls_ecp_point_init( &qB );
234 mbedtls_mpi_init( &dA ); mbedtls_mpi_init( &dB );
235 mbedtls_mpi_init( &zA ); mbedtls_mpi_init( &zB ); mbedtls_mpi_init( &check );
237 TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 );
239 rnd_info_A.buf = rnd_buf_A->x;
240 rnd_info_A.length = rnd_buf_A->len;
242 /* Fix rnd_buf_A->x by shifting it left if necessary */
243 if( grp.nbits % 8 != 0 )
245 unsigned char shift = 8 - ( grp.nbits % 8 );
248 for( i = 0; i < rnd_info_A.length - 1; i++ )
249 rnd_buf_A->x[i] = rnd_buf_A->x[i] << shift
250 | rnd_buf_A->x[i+1] >> ( 8 - shift );
252 rnd_buf_A->x[rnd_info_A.length-1] <<= shift;
255 rnd_info_B.buf = rnd_buf_B->x;
256 rnd_info_B.length = rnd_buf_B->len;
258 /* Fix rnd_buf_B->x by shifting it left if necessary */
259 if( grp.nbits % 8 != 0 )
261 unsigned char shift = 8 - ( grp.nbits % 8 );
264 for( i = 0; i < rnd_info_B.length - 1; i++ )
265 rnd_buf_B->x[i] = rnd_buf_B->x[i] << shift
266 | rnd_buf_B->x[i+1] >> ( 8 - shift );
268 rnd_buf_B->x[rnd_info_B.length-1] <<= shift;
271 TEST_ASSERT( mbedtls_ecdh_gen_public( &grp, &dA, &qA,
272 rnd_buffer_rand, &rnd_info_A ) == 0 );
273 TEST_ASSERT( ! mbedtls_ecp_is_zero( &qA ) );
274 TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, xA_str ) == 0 );
275 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &qA.X, &check ) == 0 );
276 TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, yA_str ) == 0 );
277 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &qA.Y, &check ) == 0 );
279 TEST_ASSERT( mbedtls_ecdh_gen_public( &grp, &dB, &qB,
280 rnd_buffer_rand, &rnd_info_B ) == 0 );
281 TEST_ASSERT( ! mbedtls_ecp_is_zero( &qB ) );
282 TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, xB_str ) == 0 );
283 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &qB.X, &check ) == 0 );
284 TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, yB_str ) == 0 );
285 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &qB.Y, &check ) == 0 );
287 TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, z_str ) == 0 );
288 TEST_ASSERT( mbedtls_ecdh_compute_shared( &grp, &zA, &qB, &dA, NULL, NULL ) == 0 );
289 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &zA, &check ) == 0 );
290 TEST_ASSERT( mbedtls_ecdh_compute_shared( &grp, &zB, &qA, &dB, NULL, NULL ) == 0 );
291 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &zB, &check ) == 0 );
294 mbedtls_ecp_group_free( &grp );
295 mbedtls_ecp_point_free( &qA ); mbedtls_ecp_point_free( &qB );
296 mbedtls_mpi_free( &dA ); mbedtls_mpi_free( &dB );
297 mbedtls_mpi_free( &zA ); mbedtls_mpi_free( &zB ); mbedtls_mpi_free( &check );
302 void ecdh_exchange( int id )
304 mbedtls_ecdh_context srv, cli;
305 unsigned char buf[1000];
306 const unsigned char *vbuf;
308 rnd_pseudo_info rnd_info;
309 unsigned char res_buf[1000];
312 mbedtls_ecdh_init( &srv );
313 mbedtls_ecdh_init( &cli );
314 memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
316 TEST_ASSERT( mbedtls_ecdh_setup( &srv, id ) == 0 );
318 memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
319 TEST_ASSERT( mbedtls_ecdh_make_params( &srv, &len, buf, 1000,
320 &rnd_pseudo_rand, &rnd_info ) == 0 );
321 TEST_ASSERT( mbedtls_ecdh_read_params( &cli, &vbuf, buf + len ) == 0 );
323 memset( buf, 0x00, sizeof( buf ) );
324 TEST_ASSERT( mbedtls_ecdh_make_public( &cli, &len, buf, 1000,
325 &rnd_pseudo_rand, &rnd_info ) == 0 );
326 TEST_ASSERT( mbedtls_ecdh_read_public( &srv, buf, len ) == 0 );
328 TEST_ASSERT( mbedtls_ecdh_calc_secret( &srv, &len, buf, 1000,
329 &rnd_pseudo_rand, &rnd_info ) == 0 );
330 TEST_ASSERT( mbedtls_ecdh_calc_secret( &cli, &res_len, res_buf, 1000,
332 TEST_ASSERT( len == res_len );
333 TEST_ASSERT( memcmp( buf, res_buf, len ) == 0 );
336 mbedtls_ecdh_free( &srv );
337 mbedtls_ecdh_free( &cli );
341 /* BEGIN_CASE depends_on:MBEDTLS_ECP_RESTARTABLE */
342 void ecdh_restart( int id, char *dA_str, char *dB_str, char *z_str,
343 int enable, int max_ops, int min_restart, int max_restart )
346 mbedtls_ecdh_context srv, cli;
347 unsigned char buf[1000];
348 const unsigned char *vbuf;
350 unsigned char z[MBEDTLS_ECP_MAX_BYTES];
352 unsigned char rnd_buf_A[MBEDTLS_ECP_MAX_BYTES];
353 unsigned char rnd_buf_B[MBEDTLS_ECP_MAX_BYTES];
354 rnd_buf_info rnd_info_A, rnd_info_B;
356 mbedtls_ecp_group grp;
358 mbedtls_ecp_group_init( &grp );
359 mbedtls_ecdh_init( &srv );
360 mbedtls_ecdh_init( &cli );
362 z_len = unhexify( z, z_str );
364 rnd_info_A.buf = rnd_buf_A;
365 rnd_info_A.length = unhexify( rnd_buf_A, dA_str );
367 rnd_info_B.buf = rnd_buf_B;
368 rnd_info_B.length = unhexify( rnd_buf_B, dB_str );
370 /* The ECDH context is not guaranteed ot have an mbedtls_ecp_group structure
371 * in every configuration, therefore we load it separately. */
372 TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 );
374 /* Otherwise we would have to fix the random buffer,
375 * as in ecdh_primitive_testvec. */
376 TEST_ASSERT( grp.nbits % 8 == 0 );
378 TEST_ASSERT( mbedtls_ecdh_setup( &srv, id ) == 0 );
380 /* set up restart parameters */
381 mbedtls_ecp_set_max_ops( max_ops );
385 mbedtls_ecdh_enable_restart( &srv );
386 mbedtls_ecdh_enable_restart( &cli );
389 /* server writes its parameters */
390 memset( buf, 0x00, sizeof( buf ) );
395 ret = mbedtls_ecdh_make_params( &srv, &len, buf, sizeof( buf ),
396 rnd_buffer_rand, &rnd_info_A );
397 } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart );
399 TEST_ASSERT( ret == 0 );
400 TEST_ASSERT( cnt_restart >= min_restart );
401 TEST_ASSERT( cnt_restart <= max_restart );
403 /* client read server params */
405 TEST_ASSERT( mbedtls_ecdh_read_params( &cli, &vbuf, buf + len ) == 0 );
407 /* client writes its key share */
408 memset( buf, 0x00, sizeof( buf ) );
413 ret = mbedtls_ecdh_make_public( &cli, &len, buf, sizeof( buf ),
414 rnd_buffer_rand, &rnd_info_B );
415 } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart );
417 TEST_ASSERT( ret == 0 );
418 TEST_ASSERT( cnt_restart >= min_restart );
419 TEST_ASSERT( cnt_restart <= max_restart );
421 /* server reads client key share */
422 TEST_ASSERT( mbedtls_ecdh_read_public( &srv, buf, len ) == 0 );
424 /* server computes shared secret */
425 memset( buf, 0, sizeof( buf ) );
430 ret = mbedtls_ecdh_calc_secret( &srv, &len, buf, sizeof( buf ),
432 } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart );
434 TEST_ASSERT( ret == 0 );
435 TEST_ASSERT( cnt_restart >= min_restart );
436 TEST_ASSERT( cnt_restart <= max_restart );
438 TEST_ASSERT( len == z_len );
439 TEST_ASSERT( memcmp( buf, z, len ) == 0 );
441 /* client computes shared secret */
442 memset( buf, 0, sizeof( buf ) );
447 ret = mbedtls_ecdh_calc_secret( &cli, &len, buf, sizeof( buf ),
449 } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart );
451 TEST_ASSERT( ret == 0 );
452 TEST_ASSERT( cnt_restart >= min_restart );
453 TEST_ASSERT( cnt_restart <= max_restart );
455 TEST_ASSERT( len == z_len );
456 TEST_ASSERT( memcmp( buf, z, len ) == 0 );
459 mbedtls_ecp_group_free( &grp );
460 mbedtls_ecdh_free( &srv );
461 mbedtls_ecdh_free( &cli );
465 /* BEGIN_CASE depends_on:MBEDTLS_ECDH_LEGACY_CONTEXT */
466 void ecdh_exchange_legacy( int id )
468 mbedtls_ecdh_context srv, cli;
469 unsigned char buf[1000];
470 const unsigned char *vbuf;
473 rnd_pseudo_info rnd_info;
475 mbedtls_ecdh_init( &srv );
476 mbedtls_ecdh_init( &cli );
477 memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
479 TEST_ASSERT( mbedtls_ecp_group_load( &srv.grp, id ) == 0 );
481 memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
482 TEST_ASSERT( mbedtls_ecdh_make_params( &srv, &len, buf, 1000,
483 &rnd_pseudo_rand, &rnd_info ) == 0 );
484 TEST_ASSERT( mbedtls_ecdh_read_params( &cli, &vbuf, buf + len ) == 0 );
486 memset( buf, 0x00, sizeof( buf ) );
487 TEST_ASSERT( mbedtls_ecdh_make_public( &cli, &len, buf, 1000,
488 &rnd_pseudo_rand, &rnd_info ) == 0 );
489 TEST_ASSERT( mbedtls_ecdh_read_public( &srv, buf, len ) == 0 );
491 TEST_ASSERT( mbedtls_ecdh_calc_secret( &srv, &len, buf, 1000,
492 &rnd_pseudo_rand, &rnd_info ) == 0 );
493 TEST_ASSERT( mbedtls_ecdh_calc_secret( &cli, &len, buf, 1000, NULL,
495 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &srv.z, &cli.z ) == 0 );
498 mbedtls_ecdh_free( &srv );
499 mbedtls_ecdh_free( &cli );
504 void ecdh_exchange_calc_secret( int grp_id,
505 data_t *our_private_key,
510 rnd_pseudo_info rnd_info;
511 mbedtls_ecp_keypair our_key;
512 mbedtls_ecp_keypair their_key;
513 mbedtls_ecdh_context ecdh;
514 unsigned char shared_secret[MBEDTLS_ECP_MAX_BYTES];
515 size_t shared_secret_length = 0;
517 memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
518 mbedtls_ecdh_init( &ecdh );
519 mbedtls_ecp_keypair_init( &our_key );
520 mbedtls_ecp_keypair_init( &their_key );
522 if( ! load_private_key( grp_id, our_private_key, &our_key, &rnd_info ) )
524 if( ! load_public_key( grp_id, their_point, &their_key ) )
527 /* Import the keys to the ECDH calculation. */
530 TEST_ASSERT( mbedtls_ecdh_get_params(
531 &ecdh, &our_key, MBEDTLS_ECDH_OURS ) == 0 );
532 TEST_ASSERT( mbedtls_ecdh_get_params(
533 &ecdh, &their_key, MBEDTLS_ECDH_THEIRS ) == 0 );
537 TEST_ASSERT( mbedtls_ecdh_get_params(
538 &ecdh, &their_key, MBEDTLS_ECDH_THEIRS ) == 0 );
539 TEST_ASSERT( mbedtls_ecdh_get_params(
540 &ecdh, &our_key, MBEDTLS_ECDH_OURS ) == 0 );
543 /* Perform the ECDH calculation. */
544 TEST_ASSERT( mbedtls_ecdh_calc_secret(
546 &shared_secret_length,
547 shared_secret, sizeof( shared_secret ),
548 &rnd_pseudo_rand, &rnd_info ) == 0 );
549 TEST_ASSERT( shared_secret_length == expected->len );
550 TEST_ASSERT( memcmp( expected->x, shared_secret,
551 shared_secret_length ) == 0 );
554 mbedtls_ecdh_free( &ecdh );
555 mbedtls_ecp_keypair_free( &our_key );
556 mbedtls_ecp_keypair_free( &their_key );
561 void ecdh_exchange_get_params_fail( int our_grp_id,
562 data_t *our_private_key,
568 rnd_pseudo_info rnd_info;
569 mbedtls_ecp_keypair our_key;
570 mbedtls_ecp_keypair their_key;
571 mbedtls_ecdh_context ecdh;
573 memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
574 mbedtls_ecdh_init( &ecdh );
575 mbedtls_ecp_keypair_init( &our_key );
576 mbedtls_ecp_keypair_init( &their_key );
578 if( ! load_private_key( our_grp_id, our_private_key, &our_key, &rnd_info ) )
580 if( ! load_public_key( their_grp_id, their_point, &their_key ) )
585 TEST_ASSERT( mbedtls_ecdh_get_params(
586 &ecdh, &our_key, MBEDTLS_ECDH_OURS ) == 0 );
587 TEST_ASSERT( mbedtls_ecdh_get_params(
588 &ecdh, &their_key, MBEDTLS_ECDH_THEIRS ) ==
593 TEST_ASSERT( mbedtls_ecdh_get_params(
594 &ecdh, &their_key, MBEDTLS_ECDH_THEIRS ) == 0 );
595 TEST_ASSERT( mbedtls_ecdh_get_params(
596 &ecdh, &our_key, MBEDTLS_ECDH_OURS ) ==
601 mbedtls_ecdh_free( &ecdh );
602 mbedtls_ecp_keypair_free( &our_key );
603 mbedtls_ecp_keypair_free( &their_key );