blob: edd96989aaa4a252349fdd7df50b2f057e5098d5 [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
4static int check_dhm_param_output( const mbedtls_mpi *expected,
5 const unsigned char *buffer,
6 size_t size,
7 size_t *offset )
8{
9 size_t n;
10 mbedtls_mpi actual;
11 int ok = 0;
12 mbedtls_mpi_init( &actual );
13
14 ++mbedtls_test_info.step;
15
16 TEST_ASSERT( size >= *offset + 2 );
17 n = ( buffer[*offset] << 8 ) | buffer[*offset + 1];
18 *offset += 2;
19 TEST_EQUAL( n, mbedtls_mpi_size( expected ) );
20 TEST_ASSERT( size >= *offset + n );
21 TEST_EQUAL( 0, mbedtls_mpi_read_binary( &actual, buffer + *offset, n ) );
22 TEST_EQUAL( 0, mbedtls_mpi_cmp_mpi( expected, &actual ) );
23 *offset += n;
24
25 ok = 1;
26exit:
27 mbedtls_mpi_free( &actual );
28 return( ok );
29}
30
31static int check_dhm_params( const mbedtls_dhm_context *ctx,
32 size_t x_size,
33 const unsigned char *ske, size_t ske_len )
34{
35 size_t offset = 0;
36
37 /* Check that ctx->X and ctx->GX are within range. */
38 TEST_ASSERT( mbedtls_mpi_cmp_int( &ctx->X, 1 ) > 0 );
39 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) < 0 );
40 TEST_ASSERT( mbedtls_mpi_size( &ctx->X ) <= x_size );
41 TEST_ASSERT( mbedtls_mpi_cmp_int( &ctx->GX, 1 ) > 0 );
42 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx->GX, &ctx->P ) < 0 );
43
44 /* Check ske: it must contain P, G and G^X, each prefixed with a
45 * 2-byte size. */
46 if( !check_dhm_param_output( &ctx->P, ske, ske_len, &offset ) )
47 goto exit;
48 if( !check_dhm_param_output( &ctx->G, ske, ske_len, &offset ) )
49 goto exit;
50 if( !check_dhm_param_output( &ctx->GX, ske, ske_len, &offset ) )
51 goto exit;
52 TEST_EQUAL( offset, ske_len );
53
54 return( 1 );
55exit:
56 return( 0 );
57}
58
Paul Bakker33b43f12013-08-20 11:48:36 +020059/* END_HEADER */
Paul Bakker5c60de22009-07-08 19:47:36 +000060
Paul Bakker33b43f12013-08-20 11:48:36 +020061/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020062 * depends_on:MBEDTLS_DHM_C:MBEDTLS_BIGNUM_C
Paul Bakker33b43f12013-08-20 11:48:36 +020063 * END_DEPENDENCIES
64 */
Paul Bakker5690efc2011-05-26 13:16:06 +000065
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050066/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
67void dhm_invalid_params( )
68{
69 mbedtls_dhm_context ctx;
70 unsigned char buf[42] = { 0 };
71 unsigned char *buf_null = NULL;
72 mbedtls_mpi X;
73 size_t const buflen = sizeof( buf );
74 size_t len;
75
76 TEST_INVALID_PARAM( mbedtls_dhm_init( NULL ) );
77 TEST_VALID_PARAM( mbedtls_dhm_free( NULL ) );
78
79 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
80 mbedtls_dhm_read_params( NULL,
81 (unsigned char**) &buf,
82 buf ) );
83 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
84 mbedtls_dhm_read_params( &ctx, &buf_null, buf ) );
85 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
86 mbedtls_dhm_read_params( &ctx, NULL, buf ) );
87 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
88 mbedtls_dhm_read_params( &ctx,
89 (unsigned char**) &buf,
90 NULL ) );
91
92 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
93 mbedtls_dhm_make_params( NULL, buflen,
94 buf, &len,
Ronald Cron351f0ee2020-06-10 12:12:18 +020095 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050096 NULL ) );
97 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
98 mbedtls_dhm_make_params( &ctx, buflen,
99 NULL, &len,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200100 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500101 NULL ) );
102 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
103 mbedtls_dhm_make_params( &ctx, buflen,
104 buf, NULL,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200105 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500106 NULL ) );
107 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
108 mbedtls_dhm_make_params( &ctx, buflen,
109 buf, &len,
110 NULL,
111 NULL ) );
112
113 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
114 mbedtls_dhm_set_group( NULL, &X, &X ) );
115 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
116 mbedtls_dhm_set_group( &ctx, NULL, &X ) );
117 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
118 mbedtls_dhm_set_group( &ctx, &X, NULL ) );
119
120 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
121 mbedtls_dhm_read_public( NULL, buf, buflen ) );
122 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
123 mbedtls_dhm_read_public( &ctx, NULL, buflen ) );
124
125 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
126 mbedtls_dhm_make_public( NULL, buflen,
127 buf, buflen,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200128 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500129 NULL ) );
130 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
131 mbedtls_dhm_make_public( &ctx, buflen,
132 NULL, buflen,
Ronald Cron351f0ee2020-06-10 12:12:18 +0200133 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500134 NULL ) );
135 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
136 mbedtls_dhm_make_public( &ctx, buflen,
137 buf, buflen,
138 NULL,
139 NULL ) );
140
141 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200142 mbedtls_dhm_calc_secret( NULL, buf, buflen, &len,
143 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500144 NULL ) );
145 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200146 mbedtls_dhm_calc_secret( &ctx, NULL, buflen, &len,
147 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500148 NULL ) );
149 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200150 mbedtls_dhm_calc_secret( &ctx, buf, buflen, NULL,
151 mbedtls_test_rnd_std_rand,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500152 NULL ) );
153
154#if defined(MBEDTLS_ASN1_PARSE_C)
155 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
156 mbedtls_dhm_parse_dhm( NULL, buf, buflen ) );
157 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
158 mbedtls_dhm_parse_dhm( &ctx, NULL, buflen ) );
159
160#if defined(MBEDTLS_FS_IO)
161 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
162 mbedtls_dhm_parse_dhmfile( NULL, "" ) );
163 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
164 mbedtls_dhm_parse_dhmfile( &ctx, NULL ) );
165#endif /* MBEDTLS_FS_IO */
166#endif /* MBEDTLS_ASN1_PARSE_C */
167
168exit:
169 return;
170}
171/* END_CASE */
172
Paul Bakker33b43f12013-08-20 11:48:36 +0200173/* BEGIN_CASE */
Gilles Peskine2baf2b02021-03-30 23:44:22 +0200174void dhm_do_dhm( int radix_P, char *input_P, int x_size,
Janos Follath4b151fa2017-09-20 13:46:37 +0100175 int radix_G, char *input_G, int result )
Paul Bakker5c60de22009-07-08 19:47:36 +0000176{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200177 mbedtls_dhm_context ctx_srv;
178 mbedtls_dhm_context ctx_cli;
Paul Bakker5c60de22009-07-08 19:47:36 +0000179 unsigned char ske[1000];
180 unsigned char *p = ske;
181 unsigned char pub_cli[1000];
182 unsigned char sec_srv[1000];
183 unsigned char sec_cli[1000];
Paul Bakkerf4a3f302011-04-24 15:53:29 +0000184 size_t ske_len = 0;
185 size_t pub_cli_len = 0;
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100186 size_t sec_srv_len;
187 size_t sec_cli_len;
Gilles Peskine2baf2b02021-03-30 23:44:22 +0200188 int i;
Ronald Cron351f0ee2020-06-10 12:12:18 +0200189 mbedtls_test_rnd_pseudo_info rnd_info;
Paul Bakker5c60de22009-07-08 19:47:36 +0000190
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200191 mbedtls_dhm_init( &ctx_srv );
192 mbedtls_dhm_init( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +0000193 memset( ske, 0x00, 1000 );
194 memset( pub_cli, 0x00, 1000 );
195 memset( sec_srv, 0x00, 1000 );
196 memset( sec_cli, 0x00, 1000 );
Ronald Cron351f0ee2020-06-10 12:12:18 +0200197 memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) );
Paul Bakker5c60de22009-07-08 19:47:36 +0000198
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200199 /*
200 * Set params
201 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200202 TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 );
203 TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 );
Gilles Peskine2baf2b02021-03-30 23:44:22 +0200204 pub_cli_len = mbedtls_mpi_size( &ctx_srv.P );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200205
206 /*
207 * First key exchange
208 */
Gilles Peskine02db8f42021-03-30 23:28:51 +0200209 mbedtls_test_set_step( 10 );
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200210 TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len,
211 &mbedtls_test_rnd_pseudo_rand,
212 &rnd_info ) == result );
Janos Follath4b151fa2017-09-20 13:46:37 +0100213 if ( result != 0 )
214 goto exit;
Gilles Peskine02db8f42021-03-30 23:28:51 +0200215 if( !check_dhm_params( &ctx_srv, x_size, ske, ske_len ) )
216 goto exit;
Janos Follath4b151fa2017-09-20 13:46:37 +0100217
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200218 ske[ske_len++] = 0;
219 ske[ske_len++] = 0;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200220 TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200221
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200222 TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len,
223 &mbedtls_test_rnd_pseudo_rand,
224 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200225 TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200226
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200227 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ),
228 &sec_srv_len,
229 &mbedtls_test_rnd_pseudo_rand,
230 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100231 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 +0200232
233 TEST_ASSERT( sec_srv_len == sec_cli_len );
234 TEST_ASSERT( sec_srv_len != 0 );
235 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
236
Manuel Pégourié-Gonnard15d5de12013-09-17 11:34:11 +0200237 /* Re-do calc_secret on server a few times to test update of blinding values */
238 for( i = 0; i < 3; i++ )
239 {
Gilles Peskine02db8f42021-03-30 23:28:51 +0200240 mbedtls_test_set_step( 20 + i );
Manuel Pégourié-Gonnard15d5de12013-09-17 11:34:11 +0200241 sec_srv_len = 1000;
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200242 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv,
243 sizeof( sec_srv ), &sec_srv_len,
244 &mbedtls_test_rnd_pseudo_rand,
245 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200246
Manuel Pégourié-Gonnard15d5de12013-09-17 11:34:11 +0200247 TEST_ASSERT( sec_srv_len == sec_cli_len );
248 TEST_ASSERT( sec_srv_len != 0 );
249 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
250 }
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200251
252 /*
253 * Second key exchange to test change of blinding values on server
254 */
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200255 p = ske;
Paul Bakker5c60de22009-07-08 19:47:36 +0000256
Gilles Peskine02db8f42021-03-30 23:28:51 +0200257 mbedtls_test_set_step( 30 );
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200258 TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len,
259 &mbedtls_test_rnd_pseudo_rand,
260 &rnd_info ) == 0 );
Gilles Peskine02db8f42021-03-30 23:28:51 +0200261 if( !check_dhm_params( &ctx_srv, x_size, ske, ske_len ) )
262 goto exit;
Paul Bakker5c60de22009-07-08 19:47:36 +0000263 ske[ske_len++] = 0;
264 ske[ske_len++] = 0;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200265 TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +0000266
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200267 TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len,
268 &mbedtls_test_rnd_pseudo_rand,
269 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200270 TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +0000271
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200272 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ),
273 &sec_srv_len,
274 &mbedtls_test_rnd_pseudo_rand,
275 &rnd_info ) == 0 );
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100276 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 +0000277
278 TEST_ASSERT( sec_srv_len == sec_cli_len );
279 TEST_ASSERT( sec_srv_len != 0 );
280 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
Paul Bakkerc43481a2011-02-20 16:34:26 +0000281
Paul Bakkerbd51b262014-07-10 15:26:12 +0200282exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200283 mbedtls_dhm_free( &ctx_srv );
284 mbedtls_dhm_free( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +0000285}
Paul Bakker33b43f12013-08-20 11:48:36 +0200286/* END_CASE */
Paul Bakker40ce79f2013-09-15 17:43:54 +0200287
Chris Jonesd10b3312020-12-02 10:41:50 +0000288/* BEGIN_CASE */
289void dhm_make_public( int P_bytes, int radix_G, char *input_G, int result )
290{
291 mbedtls_mpi P, G;
292 mbedtls_dhm_context ctx;
293 unsigned char output[MBEDTLS_MPI_MAX_SIZE];
294
295 mbedtls_mpi_init( &P );
296 mbedtls_mpi_init( &G );
297 mbedtls_dhm_init( &ctx );
298
299 TEST_ASSERT( mbedtls_mpi_lset( &P, 1 ) == 0 );
300 TEST_ASSERT( mbedtls_mpi_shift_l( &P, ( P_bytes * 8 ) - 1 ) == 0 );
301 TEST_ASSERT( mbedtls_mpi_set_bit( &P, 0, 1 ) == 0 );
302
303 TEST_ASSERT( mbedtls_mpi_read_string( &G, radix_G, input_G ) == 0 );
304
305 TEST_ASSERT( mbedtls_dhm_set_group( &ctx, &P, &G ) == 0 );
306 TEST_ASSERT( mbedtls_dhm_make_public( &ctx, (int) mbedtls_mpi_size( &P ),
307 output, sizeof(output),
308 &mbedtls_test_rnd_pseudo_rand,
309 NULL ) == result );
310
311exit:
312 mbedtls_mpi_free( &P );
313 mbedtls_mpi_free( &G );
314 mbedtls_dhm_free( &ctx );
315}
316/* END_CASE */
317
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200318/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Azim Khanf1aaec92017-05-30 14:23:15 +0100319void dhm_file( char * filename, char * p, char * g, int len )
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100320{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200321 mbedtls_dhm_context ctx;
322 mbedtls_mpi P, G;
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100323
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200324 mbedtls_dhm_init( &ctx );
325 mbedtls_mpi_init( &P ); mbedtls_mpi_init( &G );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100326
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200327 TEST_ASSERT( mbedtls_mpi_read_string( &P, 16, p ) == 0 );
328 TEST_ASSERT( mbedtls_mpi_read_string( &G, 16, g ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100329
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200330 TEST_ASSERT( mbedtls_dhm_parse_dhmfile( &ctx, filename ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100331
332 TEST_ASSERT( ctx.len == (size_t) len );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200333 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.P, &P ) == 0 );
334 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.G, &G ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100335
Paul Bakkerbd51b262014-07-10 15:26:12 +0200336exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200337 mbedtls_mpi_free( &P ); mbedtls_mpi_free( &G );
338 mbedtls_dhm_free( &ctx );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100339}
340/* END_CASE */
341
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200342/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Azim Khanf1aaec92017-05-30 14:23:15 +0100343void dhm_selftest( )
Paul Bakker40ce79f2013-09-15 17:43:54 +0200344{
Andres AG93012e82016-09-09 09:10:28 +0100345 TEST_ASSERT( mbedtls_dhm_self_test( 1 ) == 0 );
Paul Bakker40ce79f2013-09-15 17:43:54 +0200346}
347/* END_CASE */