blob: 6d3743f94b45d63fd47cab273c286201e7cef542 [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +00002#include "mbedtls/dhm.h"
Gilles Peskine02db8f42021-03-30 23:28:51 +02003
Gilles Peskine19e36202021-04-13 22:16:45 +02004/* Sanity checks on a Diffie-Hellman parameter: check the length-value
5 * syntax and check that the value is the expected one (taken from the
6 * DHM context by the caller). */
Gilles Peskine02db8f42021-03-30 23:28:51 +02007static int check_dhm_param_output( const mbedtls_mpi *expected,
8 const unsigned char *buffer,
9 size_t size,
10 size_t *offset )
11{
12 size_t n;
13 mbedtls_mpi actual;
14 int ok = 0;
15 mbedtls_mpi_init( &actual );
16
17 ++mbedtls_test_info.step;
18
19 TEST_ASSERT( size >= *offset + 2 );
20 n = ( buffer[*offset] << 8 ) | buffer[*offset + 1];
21 *offset += 2;
Gilles Peskine03299dc2021-04-13 22:10:24 +020022 /* The DHM param output from Mbed TLS has leading zeros stripped, as
23 * permitted but not required by RFC 5246 \S4.4. */
Gilles Peskine02db8f42021-03-30 23:28:51 +020024 TEST_EQUAL( n, mbedtls_mpi_size( expected ) );
25 TEST_ASSERT( size >= *offset + n );
26 TEST_EQUAL( 0, mbedtls_mpi_read_binary( &actual, buffer + *offset, n ) );
27 TEST_EQUAL( 0, mbedtls_mpi_cmp_mpi( expected, &actual ) );
28 *offset += n;
29
30 ok = 1;
31exit:
32 mbedtls_mpi_free( &actual );
33 return( ok );
34}
35
Gilles Peskine19e36202021-04-13 22:16:45 +020036/* Sanity checks on Diffie-Hellman parameters: syntax, range, and comparison
37 * against the context. */
Gilles Peskine02db8f42021-03-30 23:28:51 +020038static int check_dhm_params( const mbedtls_dhm_context *ctx,
39 size_t x_size,
40 const unsigned char *ske, size_t ske_len )
41{
42 size_t offset = 0;
43
44 /* Check that ctx->X and ctx->GX are within range. */
45 TEST_ASSERT( mbedtls_mpi_cmp_int( &ctx->X, 1 ) > 0 );
46 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) < 0 );
47 TEST_ASSERT( mbedtls_mpi_size( &ctx->X ) <= x_size );
48 TEST_ASSERT( mbedtls_mpi_cmp_int( &ctx->GX, 1 ) > 0 );
49 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx->GX, &ctx->P ) < 0 );
50
51 /* Check ske: it must contain P, G and G^X, each prefixed with a
52 * 2-byte size. */
53 if( !check_dhm_param_output( &ctx->P, ske, ske_len, &offset ) )
54 goto exit;
55 if( !check_dhm_param_output( &ctx->G, ske, ske_len, &offset ) )
56 goto exit;
57 if( !check_dhm_param_output( &ctx->GX, ske, ske_len, &offset ) )
58 goto exit;
59 TEST_EQUAL( offset, ske_len );
60
61 return( 1 );
62exit:
63 return( 0 );
64}
65
Paul Bakker33b43f12013-08-20 11:48:36 +020066/* END_HEADER */
Paul Bakker5c60de22009-07-08 19:47:36 +000067
Paul Bakker33b43f12013-08-20 11:48:36 +020068/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020069 * depends_on:MBEDTLS_DHM_C:MBEDTLS_BIGNUM_C
Paul Bakker33b43f12013-08-20 11:48:36 +020070 * END_DEPENDENCIES
71 */
Paul Bakker5690efc2011-05-26 13:16:06 +000072
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050073/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
74void dhm_invalid_params( )
75{
76 mbedtls_dhm_context ctx;
77 unsigned char buf[42] = { 0 };
78 unsigned char *buf_null = NULL;
79 mbedtls_mpi X;
80 size_t const buflen = sizeof( buf );
81 size_t len;
82
83 TEST_INVALID_PARAM( mbedtls_dhm_init( NULL ) );
84 TEST_VALID_PARAM( mbedtls_dhm_free( NULL ) );
85
86 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
87 mbedtls_dhm_read_params( NULL,
88 (unsigned char**) &buf,
89 buf ) );
90 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
91 mbedtls_dhm_read_params( &ctx, &buf_null, buf ) );
92 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
93 mbedtls_dhm_read_params( &ctx, NULL, buf ) );
94 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
95 mbedtls_dhm_read_params( &ctx,
96 (unsigned char**) &buf,
97 NULL ) );
98
99 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
100 mbedtls_dhm_make_params( NULL, buflen,
101 buf, &len,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200102 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500103 NULL ) );
104 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
105 mbedtls_dhm_make_params( &ctx, buflen,
106 NULL, &len,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200107 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500108 NULL ) );
109 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
110 mbedtls_dhm_make_params( &ctx, buflen,
111 buf, NULL,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200112 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500113 NULL ) );
114 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
115 mbedtls_dhm_make_params( &ctx, buflen,
116 buf, &len,
117 NULL,
118 NULL ) );
119
120 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
121 mbedtls_dhm_set_group( NULL, &X, &X ) );
122 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
123 mbedtls_dhm_set_group( &ctx, NULL, &X ) );
124 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
125 mbedtls_dhm_set_group( &ctx, &X, NULL ) );
126
127 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
128 mbedtls_dhm_read_public( NULL, buf, buflen ) );
129 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
130 mbedtls_dhm_read_public( &ctx, NULL, buflen ) );
131
132 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
133 mbedtls_dhm_make_public( NULL, buflen,
134 buf, buflen,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200135 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500136 NULL ) );
137 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
138 mbedtls_dhm_make_public( &ctx, buflen,
139 NULL, buflen,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200140 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500141 NULL ) );
142 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
143 mbedtls_dhm_make_public( &ctx, buflen,
144 buf, buflen,
145 NULL,
146 NULL ) );
147
148 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200149 mbedtls_dhm_calc_secret( NULL, buf, buflen, &len,
150 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500151 NULL ) );
152 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200153 mbedtls_dhm_calc_secret( &ctx, NULL, buflen, &len,
154 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500155 NULL ) );
156 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200157 mbedtls_dhm_calc_secret( &ctx, buf, buflen, NULL,
158 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500159 NULL ) );
160
161#if defined(MBEDTLS_ASN1_PARSE_C)
162 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
163 mbedtls_dhm_parse_dhm( NULL, buf, buflen ) );
164 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
165 mbedtls_dhm_parse_dhm( &ctx, NULL, buflen ) );
166
167#if defined(MBEDTLS_FS_IO)
168 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
169 mbedtls_dhm_parse_dhmfile( NULL, "" ) );
170 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
171 mbedtls_dhm_parse_dhmfile( &ctx, NULL ) );
172#endif /* MBEDTLS_FS_IO */
173#endif /* MBEDTLS_ASN1_PARSE_C */
174
175exit:
176 return;
177}
178/* END_CASE */
179
Paul Bakker33b43f12013-08-20 11:48:36 +0200180/* BEGIN_CASE */
Gilles Peskine2baf2b02021-03-30 23:44:22 +0200181void dhm_do_dhm( int radix_P, char *input_P, int x_size,
Janos Follath4b151fa2017-09-20 13:46:37 +0100182 int radix_G, char *input_G, int result )
Paul Bakker5c60de22009-07-08 19:47:36 +0000183{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200184 mbedtls_dhm_context ctx_srv;
185 mbedtls_dhm_context ctx_cli;
Paul Bakker5c60de22009-07-08 19:47:36 +0000186 unsigned char ske[1000];
187 unsigned char *p = ske;
188 unsigned char pub_cli[1000];
189 unsigned char sec_srv[1000];
190 unsigned char sec_cli[1000];
Paul Bakkerf4a3f302011-04-24 15:53:29 +0000191 size_t ske_len = 0;
192 size_t pub_cli_len = 0;
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100193 size_t sec_srv_len;
194 size_t sec_cli_len;
Gilles Peskine2baf2b02021-03-30 23:44:22 +0200195 int i;
Ronald Cron351f0ee2020-06-10 12:12:18 +0200196 mbedtls_test_rnd_pseudo_info rnd_info;
Paul Bakker5c60de22009-07-08 19:47:36 +0000197
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200198 mbedtls_dhm_init( &ctx_srv );
199 mbedtls_dhm_init( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +0000200 memset( ske, 0x00, 1000 );
201 memset( pub_cli, 0x00, 1000 );
202 memset( sec_srv, 0x00, 1000 );
203 memset( sec_cli, 0x00, 1000 );
Ronald Cron351f0ee2020-06-10 12:12:18 +0200204 memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) );
Paul Bakker5c60de22009-07-08 19:47:36 +0000205
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200206 /*
207 * Set params
208 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200209 TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 );
210 TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 );
Gilles Peskine2baf2b02021-03-30 23:44:22 +0200211 pub_cli_len = mbedtls_mpi_size( &ctx_srv.P );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200212
213 /*
214 * First key exchange
215 */
Gilles Peskine02db8f42021-03-30 23:28:51 +0200216 mbedtls_test_set_step( 10 );
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200217 TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len,
218 &mbedtls_test_rnd_pseudo_rand,
219 &rnd_info ) == result );
Janos Follath4b151fa2017-09-20 13:46:37 +0100220 if ( result != 0 )
221 goto exit;
Gilles Peskine02db8f42021-03-30 23:28:51 +0200222 if( !check_dhm_params( &ctx_srv, x_size, ske, ske_len ) )
223 goto exit;
Janos Follath4b151fa2017-09-20 13:46:37 +0100224
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200225 ske[ske_len++] = 0;
226 ske[ske_len++] = 0;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200227 TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200228
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200229 TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len,
230 &mbedtls_test_rnd_pseudo_rand,
231 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200232 TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200233
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200234 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ),
235 &sec_srv_len,
236 &mbedtls_test_rnd_pseudo_rand,
237 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100238 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_cli, sec_cli, sizeof( sec_cli ), &sec_cli_len, NULL, NULL ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200239
240 TEST_ASSERT( sec_srv_len == sec_cli_len );
241 TEST_ASSERT( sec_srv_len != 0 );
242 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
243
Manuel Pégourié-Gonnard15d5de12013-09-17 11:34:11 +0200244 /* Re-do calc_secret on server a few times to test update of blinding values */
245 for( i = 0; i < 3; i++ )
246 {
Gilles Peskine02db8f42021-03-30 23:28:51 +0200247 mbedtls_test_set_step( 20 + i );
Manuel Pégourié-Gonnard15d5de12013-09-17 11:34:11 +0200248 sec_srv_len = 1000;
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200249 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv,
250 sizeof( sec_srv ), &sec_srv_len,
251 &mbedtls_test_rnd_pseudo_rand,
252 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200253
Manuel Pégourié-Gonnard15d5de12013-09-17 11:34:11 +0200254 TEST_ASSERT( sec_srv_len == sec_cli_len );
255 TEST_ASSERT( sec_srv_len != 0 );
256 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
257 }
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200258
259 /*
260 * Second key exchange to test change of blinding values on server
261 */
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200262 p = ske;
Paul Bakker5c60de22009-07-08 19:47:36 +0000263
Gilles Peskine02db8f42021-03-30 23:28:51 +0200264 mbedtls_test_set_step( 30 );
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200265 TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len,
266 &mbedtls_test_rnd_pseudo_rand,
267 &rnd_info ) == 0 );
Gilles Peskine02db8f42021-03-30 23:28:51 +0200268 if( !check_dhm_params( &ctx_srv, x_size, ske, ske_len ) )
269 goto exit;
Paul Bakker5c60de22009-07-08 19:47:36 +0000270 ske[ske_len++] = 0;
271 ske[ske_len++] = 0;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200272 TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +0000273
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200274 TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len,
275 &mbedtls_test_rnd_pseudo_rand,
276 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200277 TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +0000278
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200279 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ),
280 &sec_srv_len,
281 &mbedtls_test_rnd_pseudo_rand,
282 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100283 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_cli, sec_cli, sizeof( sec_cli ), &sec_cli_len, NULL, NULL ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +0000284
285 TEST_ASSERT( sec_srv_len == sec_cli_len );
286 TEST_ASSERT( sec_srv_len != 0 );
287 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
Paul Bakkerc43481a2011-02-20 16:34:26 +0000288
Paul Bakkerbd51b262014-07-10 15:26:12 +0200289exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200290 mbedtls_dhm_free( &ctx_srv );
291 mbedtls_dhm_free( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +0000292}
Paul Bakker33b43f12013-08-20 11:48:36 +0200293/* END_CASE */
Paul Bakker40ce79f2013-09-15 17:43:54 +0200294
Chris Jonesd10b3312020-12-02 10:41:50 +0000295/* BEGIN_CASE */
296void dhm_make_public( int P_bytes, int radix_G, char *input_G, int result )
297{
298 mbedtls_mpi P, G;
299 mbedtls_dhm_context ctx;
300 unsigned char output[MBEDTLS_MPI_MAX_SIZE];
301
302 mbedtls_mpi_init( &P );
303 mbedtls_mpi_init( &G );
304 mbedtls_dhm_init( &ctx );
305
306 TEST_ASSERT( mbedtls_mpi_lset( &P, 1 ) == 0 );
307 TEST_ASSERT( mbedtls_mpi_shift_l( &P, ( P_bytes * 8 ) - 1 ) == 0 );
308 TEST_ASSERT( mbedtls_mpi_set_bit( &P, 0, 1 ) == 0 );
309
310 TEST_ASSERT( mbedtls_mpi_read_string( &G, radix_G, input_G ) == 0 );
311
312 TEST_ASSERT( mbedtls_dhm_set_group( &ctx, &P, &G ) == 0 );
313 TEST_ASSERT( mbedtls_dhm_make_public( &ctx, (int) mbedtls_mpi_size( &P ),
314 output, sizeof(output),
315 &mbedtls_test_rnd_pseudo_rand,
316 NULL ) == result );
317
318exit:
319 mbedtls_mpi_free( &P );
320 mbedtls_mpi_free( &G );
321 mbedtls_dhm_free( &ctx );
322}
323/* END_CASE */
324
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200325/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Azim Khanf1aaec92017-05-30 14:23:15 +0100326void dhm_file( char * filename, char * p, char * g, int len )
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100327{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200328 mbedtls_dhm_context ctx;
329 mbedtls_mpi P, G;
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100330
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200331 mbedtls_dhm_init( &ctx );
332 mbedtls_mpi_init( &P ); mbedtls_mpi_init( &G );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100333
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200334 TEST_ASSERT( mbedtls_mpi_read_string( &P, 16, p ) == 0 );
335 TEST_ASSERT( mbedtls_mpi_read_string( &G, 16, g ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100336
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200337 TEST_ASSERT( mbedtls_dhm_parse_dhmfile( &ctx, filename ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100338
339 TEST_ASSERT( ctx.len == (size_t) len );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200340 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.P, &P ) == 0 );
341 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.G, &G ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100342
Paul Bakkerbd51b262014-07-10 15:26:12 +0200343exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200344 mbedtls_mpi_free( &P ); mbedtls_mpi_free( &G );
345 mbedtls_dhm_free( &ctx );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100346}
347/* END_CASE */
348
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200349/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Azim Khanf1aaec92017-05-30 14:23:15 +0100350void dhm_selftest( )
Paul Bakker40ce79f2013-09-15 17:43:54 +0200351{
Andres AG93012e82016-09-09 09:10:28 +0100352 TEST_ASSERT( mbedtls_dhm_self_test( 1 ) == 0 );
Paul Bakker40ce79f2013-09-15 17:43:54 +0200353}
354/* END_CASE */