blob: e8d9cea84ffb00a99f4c10ef4d7d6699238da38e [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Paul Bakker5c60de22009-07-08 19:47:36 +00002#include <polarssl/dhm.h>
Paul Bakker33b43f12013-08-20 11:48:36 +02003/* END_HEADER */
Paul Bakker5c60de22009-07-08 19:47:36 +00004
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* BEGIN_DEPENDENCIES
6 * depends_on:POLARSSL_DHM_C:POLARSSL_BIGNUM_C
7 * END_DEPENDENCIES
8 */
Paul Bakker5690efc2011-05-26 13:16:06 +00009
Paul Bakker33b43f12013-08-20 11:48:36 +020010/* BEGIN_CASE */
Manuel Pégourié-Gonnarded8a02b2013-09-04 16:39:03 +020011void dhm_do_dhm( int radix_P, char *input_P,
Paul Bakker33b43f12013-08-20 11:48:36 +020012 int radix_G, char *input_G )
Paul Bakker5c60de22009-07-08 19:47:36 +000013{
14 dhm_context ctx_srv;
15 dhm_context ctx_cli;
16 unsigned char ske[1000];
17 unsigned char *p = ske;
18 unsigned char pub_cli[1000];
19 unsigned char sec_srv[1000];
20 unsigned char sec_cli[1000];
Paul Bakkerf4a3f302011-04-24 15:53:29 +000021 size_t ske_len = 0;
22 size_t pub_cli_len = 0;
23 size_t sec_srv_len = 1000;
24 size_t sec_cli_len = 1000;
Paul Bakker69998dd2009-07-11 19:15:20 +000025 int x_size;
Paul Bakker997bbd12011-03-13 15:45:42 +000026 rnd_pseudo_info rnd_info;
Paul Bakker5c60de22009-07-08 19:47:36 +000027
28 memset( &ctx_srv, 0x00, sizeof( dhm_context ) );
29 memset( &ctx_cli, 0x00, sizeof( dhm_context ) );
30 memset( ske, 0x00, 1000 );
31 memset( pub_cli, 0x00, 1000 );
32 memset( sec_srv, 0x00, 1000 );
33 memset( sec_cli, 0x00, 1000 );
Paul Bakker997bbd12011-03-13 15:45:42 +000034 memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
Paul Bakker5c60de22009-07-08 19:47:36 +000035
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +020036 /*
37 * Set params
38 */
Paul Bakker33b43f12013-08-20 11:48:36 +020039 TEST_ASSERT( mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 );
40 TEST_ASSERT( mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 );
Paul Bakker69998dd2009-07-11 19:15:20 +000041 x_size = mpi_size( &ctx_srv.P );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +020042 pub_cli_len = x_size;
43
44 /*
45 * First key exchange
46 */
47 TEST_ASSERT( dhm_make_params( &ctx_srv, x_size, ske, &ske_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
48 ske[ske_len++] = 0;
49 ske[ske_len++] = 0;
50 TEST_ASSERT( dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
51
52 TEST_ASSERT( dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
53 TEST_ASSERT( dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
54
55 TEST_ASSERT( dhm_calc_secret( &ctx_srv, sec_srv, &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
56 TEST_ASSERT( dhm_calc_secret( &ctx_cli, sec_cli, &sec_cli_len, NULL, NULL ) == 0 );
57
58 TEST_ASSERT( sec_srv_len == sec_cli_len );
59 TEST_ASSERT( sec_srv_len != 0 );
60 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
61
62 /* Re-do calc_secret on server to test update of blinding values */
63 sec_srv_len = 1000;
64 TEST_ASSERT( dhm_calc_secret( &ctx_srv, sec_srv, &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
65
66 TEST_ASSERT( sec_srv_len == sec_cli_len );
67 TEST_ASSERT( sec_srv_len != 0 );
68 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
69
70 /*
71 * Second key exchange to test change of blinding values on server
72 */
73 sec_cli_len = 1000;
74 sec_srv_len = 1000;
75 p = ske;
Paul Bakker5c60de22009-07-08 19:47:36 +000076
Paul Bakker997bbd12011-03-13 15:45:42 +000077 TEST_ASSERT( dhm_make_params( &ctx_srv, x_size, ske, &ske_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +000078 ske[ske_len++] = 0;
79 ske[ske_len++] = 0;
80 TEST_ASSERT( dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
81
Paul Bakker997bbd12011-03-13 15:45:42 +000082 TEST_ASSERT( dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +000083 TEST_ASSERT( dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
84
Manuel Pégourié-Gonnard2d627642013-09-04 14:22:07 +020085 TEST_ASSERT( dhm_calc_secret( &ctx_srv, sec_srv, &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
86 TEST_ASSERT( dhm_calc_secret( &ctx_cli, sec_cli, &sec_cli_len, NULL, NULL ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +000087
88 TEST_ASSERT( sec_srv_len == sec_cli_len );
89 TEST_ASSERT( sec_srv_len != 0 );
90 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
Paul Bakkerc43481a2011-02-20 16:34:26 +000091
92 dhm_free( &ctx_srv );
93 dhm_free( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +000094}
Paul Bakker33b43f12013-08-20 11:48:36 +020095/* END_CASE */