blob: e6fadfb2fa898b82e007b5d2a8bc63860aee8d6b [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
Paul Bakker33b43f12013-08-20 11:48:36 +020038 TEST_ASSERT( mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 );
39 TEST_ASSERT( mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 );
Paul Bakker69998dd2009-07-11 19:15:20 +000040 x_size = mpi_size( &ctx_srv.P );
Paul Bakker5c60de22009-07-08 19:47:36 +000041
Paul Bakker997bbd12011-03-13 15:45:42 +000042 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 +000043 ske[ske_len++] = 0;
44 ske[ske_len++] = 0;
45 TEST_ASSERT( dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
46
47 pub_cli_len = x_size;
Paul Bakker997bbd12011-03-13 15:45:42 +000048 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 +000049
50 TEST_ASSERT( dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
51
Manuel Pégourié-Gonnard2d627642013-09-04 14:22:07 +020052 TEST_ASSERT( dhm_calc_secret( &ctx_srv, sec_srv, &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
53 TEST_ASSERT( dhm_calc_secret( &ctx_cli, sec_cli, &sec_cli_len, NULL, NULL ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +000054
55 TEST_ASSERT( sec_srv_len == sec_cli_len );
56 TEST_ASSERT( sec_srv_len != 0 );
57 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
Paul Bakkerc43481a2011-02-20 16:34:26 +000058
59 dhm_free( &ctx_srv );
60 dhm_free( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +000061}
Paul Bakker33b43f12013-08-20 11:48:36 +020062/* END_CASE */