| Paul Bakker | 33b43f1 | 2013-08-20 11:48:36 +0200 | [diff] [blame] | 1 | /* BEGIN_HEADER */ | 
| Manuel Pégourié-Gonnard | 7f80997 | 2015-03-09 17:05:11 +0000 | [diff] [blame] | 2 | #include "mbedtls/dhm.h" | 
| Paul Bakker | 33b43f1 | 2013-08-20 11:48:36 +0200 | [diff] [blame] | 3 | /* END_HEADER */ | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 4 |  | 
| Paul Bakker | 33b43f1 | 2013-08-20 11:48:36 +0200 | [diff] [blame] | 5 | /* BEGIN_DEPENDENCIES | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 6 | * depends_on:MBEDTLS_DHM_C:MBEDTLS_BIGNUM_C | 
| Paul Bakker | 33b43f1 | 2013-08-20 11:48:36 +0200 | [diff] [blame] | 7 | * END_DEPENDENCIES | 
|  | 8 | */ | 
| Paul Bakker | 5690efc | 2011-05-26 13:16:06 +0000 | [diff] [blame] | 9 |  | 
| Paul Bakker | 33b43f1 | 2013-08-20 11:48:36 +0200 | [diff] [blame] | 10 | /* BEGIN_CASE */ | 
| Manuel Pégourié-Gonnard | ed8a02b | 2013-09-04 16:39:03 +0200 | [diff] [blame] | 11 | void dhm_do_dhm( int radix_P, char *input_P, | 
| Janos Follath | 4b151fa | 2017-09-20 13:46:37 +0100 | [diff] [blame] | 12 | int radix_G, char *input_G, int result ) | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 13 | { | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 14 | mbedtls_dhm_context ctx_srv; | 
|  | 15 | mbedtls_dhm_context ctx_cli; | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 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 Bakker | f4a3f30 | 2011-04-24 15:53:29 +0000 | [diff] [blame] | 21 | size_t ske_len = 0; | 
|  | 22 | size_t pub_cli_len = 0; | 
| Manuel Pégourié-Gonnard | 3335205 | 2015-06-02 16:17:08 +0100 | [diff] [blame] | 23 | size_t sec_srv_len; | 
|  | 24 | size_t sec_cli_len; | 
| Manuel Pégourié-Gonnard | 15d5de1 | 2013-09-17 11:34:11 +0200 | [diff] [blame] | 25 | int x_size, i; | 
| Paul Bakker | 997bbd1 | 2011-03-13 15:45:42 +0000 | [diff] [blame] | 26 | rnd_pseudo_info rnd_info; | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 27 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 28 | mbedtls_dhm_init( &ctx_srv ); | 
|  | 29 | mbedtls_dhm_init( &ctx_cli ); | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 30 | memset( ske, 0x00, 1000 ); | 
|  | 31 | memset( pub_cli, 0x00, 1000 ); | 
|  | 32 | memset( sec_srv, 0x00, 1000 ); | 
|  | 33 | memset( sec_cli, 0x00, 1000 ); | 
| Paul Bakker | 997bbd1 | 2011-03-13 15:45:42 +0000 | [diff] [blame] | 34 | memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) ); | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 35 |  | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 36 | /* | 
|  | 37 | * Set params | 
|  | 38 | */ | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 39 | TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 ); | 
|  | 40 | TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 ); | 
|  | 41 | x_size = mbedtls_mpi_size( &ctx_srv.P ); | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 42 | pub_cli_len = x_size; | 
|  | 43 |  | 
|  | 44 | /* | 
|  | 45 | * First key exchange | 
|  | 46 | */ | 
| Janos Follath | 4b151fa | 2017-09-20 13:46:37 +0100 | [diff] [blame] | 47 | TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len, &rnd_pseudo_rand, &rnd_info ) == result ); | 
|  | 48 | if ( result != 0 ) | 
|  | 49 | goto exit; | 
|  | 50 |  | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 51 | ske[ske_len++] = 0; | 
|  | 52 | ske[ske_len++] = 0; | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 53 | TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 ); | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 54 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 55 | TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, &rnd_pseudo_rand, &rnd_info ) == 0 ); | 
|  | 56 | TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 ); | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 57 |  | 
| Manuel Pégourié-Gonnard | 3335205 | 2015-06-02 16:17:08 +0100 | [diff] [blame] | 58 | TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ), &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 ); | 
|  | 59 | TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_cli, sec_cli, sizeof( sec_cli ), &sec_cli_len, NULL, NULL ) == 0 ); | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 60 |  | 
|  | 61 | TEST_ASSERT( sec_srv_len == sec_cli_len ); | 
|  | 62 | TEST_ASSERT( sec_srv_len != 0 ); | 
|  | 63 | TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 ); | 
|  | 64 |  | 
| Manuel Pégourié-Gonnard | 15d5de1 | 2013-09-17 11:34:11 +0200 | [diff] [blame] | 65 | /* Re-do calc_secret on server a few times to test update of blinding values */ | 
|  | 66 | for( i = 0; i < 3; i++ ) | 
|  | 67 | { | 
|  | 68 | sec_srv_len = 1000; | 
| Manuel Pégourié-Gonnard | 3335205 | 2015-06-02 16:17:08 +0100 | [diff] [blame] | 69 | TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ), &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 ); | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 70 |  | 
| Manuel Pégourié-Gonnard | 15d5de1 | 2013-09-17 11:34:11 +0200 | [diff] [blame] | 71 | TEST_ASSERT( sec_srv_len == sec_cli_len ); | 
|  | 72 | TEST_ASSERT( sec_srv_len != 0 ); | 
|  | 73 | TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 ); | 
|  | 74 | } | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 75 |  | 
|  | 76 | /* | 
|  | 77 | * Second key exchange to test change of blinding values on server | 
|  | 78 | */ | 
| Manuel Pégourié-Gonnard | 143b502 | 2013-09-04 16:29:59 +0200 | [diff] [blame] | 79 | p = ske; | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 80 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 81 | TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len, &rnd_pseudo_rand, &rnd_info ) == 0 ); | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 82 | ske[ske_len++] = 0; | 
|  | 83 | ske[ske_len++] = 0; | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 84 | TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 ); | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 85 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 86 | TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, &rnd_pseudo_rand, &rnd_info ) == 0 ); | 
|  | 87 | TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 ); | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 88 |  | 
| Manuel Pégourié-Gonnard | 3335205 | 2015-06-02 16:17:08 +0100 | [diff] [blame] | 89 | TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ), &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 ); | 
|  | 90 | TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_cli, sec_cli, sizeof( sec_cli ), &sec_cli_len, NULL, NULL ) == 0 ); | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 91 |  | 
|  | 92 | TEST_ASSERT( sec_srv_len == sec_cli_len ); | 
|  | 93 | TEST_ASSERT( sec_srv_len != 0 ); | 
|  | 94 | TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 ); | 
| Paul Bakker | c43481a | 2011-02-20 16:34:26 +0000 | [diff] [blame] | 95 |  | 
| Paul Bakker | bd51b26 | 2014-07-10 15:26:12 +0200 | [diff] [blame] | 96 | exit: | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 97 | mbedtls_dhm_free( &ctx_srv ); | 
|  | 98 | mbedtls_dhm_free( &ctx_cli ); | 
| Paul Bakker | 5c60de2 | 2009-07-08 19:47:36 +0000 | [diff] [blame] | 99 | } | 
| Paul Bakker | 33b43f1 | 2013-08-20 11:48:36 +0200 | [diff] [blame] | 100 | /* END_CASE */ | 
| Paul Bakker | 40ce79f | 2013-09-15 17:43:54 +0200 | [diff] [blame] | 101 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 102 | /* BEGIN_CASE depends_on:MBEDTLS_FS_IO */ | 
| Azim Khan | f1aaec9 | 2017-05-30 14:23:15 +0100 | [diff] [blame] | 103 | void dhm_file( char * filename, char * p, char * g, int len ) | 
| Manuel Pégourié-Gonnard | 3fec220 | 2014-03-29 16:42:38 +0100 | [diff] [blame] | 104 | { | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 105 | mbedtls_dhm_context ctx; | 
|  | 106 | mbedtls_mpi P, G; | 
| Manuel Pégourié-Gonnard | 3fec220 | 2014-03-29 16:42:38 +0100 | [diff] [blame] | 107 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 108 | mbedtls_dhm_init( &ctx ); | 
|  | 109 | mbedtls_mpi_init( &P ); mbedtls_mpi_init( &G ); | 
| Manuel Pégourié-Gonnard | 3fec220 | 2014-03-29 16:42:38 +0100 | [diff] [blame] | 110 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 111 | TEST_ASSERT( mbedtls_mpi_read_string( &P, 16, p ) == 0 ); | 
|  | 112 | TEST_ASSERT( mbedtls_mpi_read_string( &G, 16, g ) == 0 ); | 
| Manuel Pégourié-Gonnard | 3fec220 | 2014-03-29 16:42:38 +0100 | [diff] [blame] | 113 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 114 | TEST_ASSERT( mbedtls_dhm_parse_dhmfile( &ctx, filename ) == 0 ); | 
| Manuel Pégourié-Gonnard | 3fec220 | 2014-03-29 16:42:38 +0100 | [diff] [blame] | 115 |  | 
|  | 116 | TEST_ASSERT( ctx.len == (size_t) len ); | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 117 | TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.P, &P ) == 0 ); | 
|  | 118 | TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.G, &G ) == 0 ); | 
| Manuel Pégourié-Gonnard | 3fec220 | 2014-03-29 16:42:38 +0100 | [diff] [blame] | 119 |  | 
| Paul Bakker | bd51b26 | 2014-07-10 15:26:12 +0200 | [diff] [blame] | 120 | exit: | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 121 | mbedtls_mpi_free( &P ); mbedtls_mpi_free( &G ); | 
|  | 122 | mbedtls_dhm_free( &ctx ); | 
| Manuel Pégourié-Gonnard | 3fec220 | 2014-03-29 16:42:38 +0100 | [diff] [blame] | 123 | } | 
|  | 124 | /* END_CASE */ | 
|  | 125 |  | 
| Manuel Pégourié-Gonnard | 2cf5a7c | 2015-04-08 12:49:31 +0200 | [diff] [blame] | 126 | /* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ | 
| Azim Khan | f1aaec9 | 2017-05-30 14:23:15 +0100 | [diff] [blame] | 127 | void dhm_selftest(  ) | 
| Paul Bakker | 40ce79f | 2013-09-15 17:43:54 +0200 | [diff] [blame] | 128 | { | 
| Andres AG | 93012e8 | 2016-09-09 09:10:28 +0100 | [diff] [blame] | 129 | TEST_ASSERT( mbedtls_dhm_self_test( 1 ) == 0 ); | 
| Paul Bakker | 40ce79f | 2013-09-15 17:43:54 +0200 | [diff] [blame] | 130 | } | 
|  | 131 | /* END_CASE */ |