blob: 31a9004c3d5f4e8eef491713e588c8bc1fdc6aba [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 */
11void dhm_do_dhm( int NOTUSED, int radix_P, char *input_P,
12 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
Paul Bakkerdbd443d2013-08-16 13:38:47 +020028 ((void)NOTUSED);
29
Paul Bakker5c60de22009-07-08 19:47:36 +000030 memset( &ctx_srv, 0x00, sizeof( dhm_context ) );
31 memset( &ctx_cli, 0x00, sizeof( dhm_context ) );
32 memset( ske, 0x00, 1000 );
33 memset( pub_cli, 0x00, 1000 );
34 memset( sec_srv, 0x00, 1000 );
35 memset( sec_cli, 0x00, 1000 );
Paul Bakker997bbd12011-03-13 15:45:42 +000036 memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
Paul Bakker5c60de22009-07-08 19:47:36 +000037
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +020038 /*
39 * Set params
40 */
Paul Bakker33b43f12013-08-20 11:48:36 +020041 TEST_ASSERT( mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 );
42 TEST_ASSERT( mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 );
Paul Bakker69998dd2009-07-11 19:15:20 +000043 x_size = mpi_size( &ctx_srv.P );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +020044 pub_cli_len = x_size;
45
46 /*
47 * First key exchange
48 */
49 TEST_ASSERT( dhm_make_params( &ctx_srv, x_size, ske, &ske_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
50 ske[ske_len++] = 0;
51 ske[ske_len++] = 0;
52 TEST_ASSERT( dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
53
54 TEST_ASSERT( dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
55 TEST_ASSERT( dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
56
57 TEST_ASSERT( dhm_calc_secret( &ctx_srv, sec_srv, &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
58 TEST_ASSERT( dhm_calc_secret( &ctx_cli, sec_cli, &sec_cli_len, NULL, NULL ) == 0 );
59
60 TEST_ASSERT( sec_srv_len == sec_cli_len );
61 TEST_ASSERT( sec_srv_len != 0 );
62 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
63
64 /* Re-do calc_secret on server to test update of blinding values */
65 sec_srv_len = 1000;
66 TEST_ASSERT( dhm_calc_secret( &ctx_srv, sec_srv, &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
67
68 TEST_ASSERT( sec_srv_len == sec_cli_len );
69 TEST_ASSERT( sec_srv_len != 0 );
70 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
71
72 /*
73 * Second key exchange to test change of blinding values on server
74 */
75 sec_cli_len = 1000;
76 sec_srv_len = 1000;
77 p = ske;
Paul Bakker5c60de22009-07-08 19:47:36 +000078
Paul Bakker997bbd12011-03-13 15:45:42 +000079 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 +000080 ske[ske_len++] = 0;
81 ske[ske_len++] = 0;
82 TEST_ASSERT( dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
83
Paul Bakker997bbd12011-03-13 15:45:42 +000084 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 +000085 TEST_ASSERT( dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
86
Manuel Pégourié-Gonnard2d627642013-09-04 14:22:07 +020087 TEST_ASSERT( dhm_calc_secret( &ctx_srv, sec_srv, &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
88 TEST_ASSERT( dhm_calc_secret( &ctx_cli, sec_cli, &sec_cli_len, NULL, NULL ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +000089
90 TEST_ASSERT( sec_srv_len == sec_cli_len );
91 TEST_ASSERT( sec_srv_len != 0 );
92 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
Paul Bakkerc43481a2011-02-20 16:34:26 +000093
94 dhm_free( &ctx_srv );
95 dhm_free( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +000096}
Paul Bakker33b43f12013-08-20 11:48:36 +020097/* END_CASE */