blob: 7dd9e970224d03b6ed5ed4b0096b46852ec82aff [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 Peskine92f47142021-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 TEST_ASSERT( size >= *offset + 2 );
15 n = ( buffer[*offset] << 8 ) | buffer[*offset + 1];
16 *offset += 2;
17 TEST_EQUAL( n, mbedtls_mpi_size( expected ) );
18 TEST_ASSERT( size >= *offset + n );
19 TEST_EQUAL( 0, mbedtls_mpi_read_binary( &actual, buffer + *offset, n ) );
20 TEST_EQUAL( 0, mbedtls_mpi_cmp_mpi( expected, &actual ) );
21 *offset += n;
22
23 ok = 1;
24exit:
25 mbedtls_mpi_free( &actual );
26 return( ok );
27}
28
29static int check_dhm_params( const mbedtls_dhm_context *ctx,
30 size_t x_size,
31 const unsigned char *ske, size_t ske_len )
32{
33 size_t offset = 0;
34
35 /* Check that ctx->X and ctx->GX are within range. */
36 TEST_ASSERT( mbedtls_mpi_cmp_int( &ctx->X, 1 ) > 0 );
37 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) < 0 );
38 TEST_ASSERT( mbedtls_mpi_size( &ctx->X ) <= x_size );
39 TEST_ASSERT( mbedtls_mpi_cmp_int( &ctx->GX, 1 ) > 0 );
40 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx->GX, &ctx->P ) < 0 );
41
42 /* Check ske: it must contain P, G and G^X, each prefixed with a
43 * 2-byte size. */
44 if( !check_dhm_param_output( &ctx->P, ske, ske_len, &offset ) )
45 goto exit;
46 if( !check_dhm_param_output( &ctx->G, ske, ske_len, &offset ) )
47 goto exit;
48 if( !check_dhm_param_output( &ctx->GX, ske, ske_len, &offset ) )
49 goto exit;
50 TEST_EQUAL( offset, ske_len );
51
52 return( 1 );
53exit:
54 return( 0 );
55}
56
Paul Bakker33b43f12013-08-20 11:48:36 +020057/* END_HEADER */
Paul Bakker5c60de22009-07-08 19:47:36 +000058
Paul Bakker33b43f12013-08-20 11:48:36 +020059/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020060 * depends_on:MBEDTLS_DHM_C:MBEDTLS_BIGNUM_C
Paul Bakker33b43f12013-08-20 11:48:36 +020061 * END_DEPENDENCIES
62 */
Paul Bakker5690efc2011-05-26 13:16:06 +000063
Hanno Becker8c8a93c2018-12-12 21:10:46 +000064/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
65void dhm_invalid_params( )
66{
67 mbedtls_dhm_context ctx;
68 unsigned char buf[42] = { 0 };
69 unsigned char *buf_null = NULL;
70 mbedtls_mpi X;
Hanno Beckeradc9b172018-12-17 09:34:36 +000071 size_t const buflen = sizeof( buf );
Hanno Becker8c8a93c2018-12-12 21:10:46 +000072 size_t len;
73
74 TEST_INVALID_PARAM( mbedtls_dhm_init( NULL ) );
75 TEST_VALID_PARAM( mbedtls_dhm_free( NULL ) );
76
77 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
78 mbedtls_dhm_read_params( NULL,
79 (unsigned char**) &buf,
80 buf ) );
81 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
82 mbedtls_dhm_read_params( &ctx, &buf_null, buf ) );
83 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
84 mbedtls_dhm_read_params( &ctx, NULL, buf ) );
85 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
86 mbedtls_dhm_read_params( &ctx,
87 (unsigned char**) &buf,
88 NULL ) );
89
90 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +000091 mbedtls_dhm_make_params( NULL, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +000092 buf, &len,
93 rnd_std_rand,
94 NULL ) );
95 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +000096 mbedtls_dhm_make_params( &ctx, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +000097 NULL, &len,
98 rnd_std_rand,
99 NULL ) );
100 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000101 mbedtls_dhm_make_params( &ctx, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000102 buf, NULL,
103 rnd_std_rand,
104 NULL ) );
105 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000106 mbedtls_dhm_make_params( &ctx, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000107 buf, &len,
108 NULL,
109 NULL ) );
110
111 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
112 mbedtls_dhm_set_group( NULL, &X, &X ) );
113 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
114 mbedtls_dhm_set_group( &ctx, NULL, &X ) );
115 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
116 mbedtls_dhm_set_group( &ctx, &X, NULL ) );
117
118 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000119 mbedtls_dhm_read_public( NULL, buf, buflen ) );
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000120 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000121 mbedtls_dhm_read_public( &ctx, NULL, buflen ) );
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000122
123 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000124 mbedtls_dhm_make_public( NULL, buflen,
125 buf, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000126 rnd_std_rand,
127 NULL ) );
128 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000129 mbedtls_dhm_make_public( &ctx, buflen,
130 NULL, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000131 rnd_std_rand,
132 NULL ) );
133 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000134 mbedtls_dhm_make_public( &ctx, buflen,
135 buf, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000136 NULL,
137 NULL ) );
138
139 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000140 mbedtls_dhm_calc_secret( NULL, buf, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000141 &len, rnd_std_rand,
142 NULL ) );
143 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000144 mbedtls_dhm_calc_secret( &ctx, NULL, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000145 &len, rnd_std_rand,
146 NULL ) );
147 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000148 mbedtls_dhm_calc_secret( &ctx, buf, buflen,
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000149 NULL, rnd_std_rand,
150 NULL ) );
151
152#if defined(MBEDTLS_ASN1_PARSE_C)
153 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000154 mbedtls_dhm_parse_dhm( NULL, buf, buflen ) );
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000155 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
Hanno Beckeradc9b172018-12-17 09:34:36 +0000156 mbedtls_dhm_parse_dhm( &ctx, NULL, buflen ) );
Hanno Becker8c8a93c2018-12-12 21:10:46 +0000157
158#if defined(MBEDTLS_FS_IO)
159 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
160 mbedtls_dhm_parse_dhmfile( NULL, "" ) );
161 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
162 mbedtls_dhm_parse_dhmfile( &ctx, NULL ) );
163#endif /* MBEDTLS_FS_IO */
164#endif /* MBEDTLS_ASN1_PARSE_C */
165
166exit:
167 return;
168}
169/* END_CASE */
170
Paul Bakker33b43f12013-08-20 11:48:36 +0200171/* BEGIN_CASE */
Gilles Peskined1eb14a2021-03-30 23:44:22 +0200172void dhm_do_dhm( int radix_P, char *input_P, int x_size,
Janos Follath4b151fa2017-09-20 13:46:37 +0100173 int radix_G, char *input_G, int result )
Paul Bakker5c60de22009-07-08 19:47:36 +0000174{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200175 mbedtls_dhm_context ctx_srv;
176 mbedtls_dhm_context ctx_cli;
Paul Bakker5c60de22009-07-08 19:47:36 +0000177 unsigned char ske[1000];
178 unsigned char *p = ske;
179 unsigned char pub_cli[1000];
180 unsigned char sec_srv[1000];
181 unsigned char sec_cli[1000];
Paul Bakkerf4a3f302011-04-24 15:53:29 +0000182 size_t ske_len = 0;
183 size_t pub_cli_len = 0;
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100184 size_t sec_srv_len;
185 size_t sec_cli_len;
Gilles Peskined1eb14a2021-03-30 23:44:22 +0200186 int i;
Paul Bakker997bbd12011-03-13 15:45:42 +0000187 rnd_pseudo_info rnd_info;
Paul Bakker5c60de22009-07-08 19:47:36 +0000188
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200189 mbedtls_dhm_init( &ctx_srv );
190 mbedtls_dhm_init( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +0000191 memset( ske, 0x00, 1000 );
192 memset( pub_cli, 0x00, 1000 );
193 memset( sec_srv, 0x00, 1000 );
194 memset( sec_cli, 0x00, 1000 );
Paul Bakker997bbd12011-03-13 15:45:42 +0000195 memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
Paul Bakker5c60de22009-07-08 19:47:36 +0000196
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200197 /*
198 * Set params
199 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200200 TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 );
201 TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 );
Gilles Peskined1eb14a2021-03-30 23:44:22 +0200202 pub_cli_len = mbedtls_mpi_size( &ctx_srv.P );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200203
204 /*
205 * First key exchange
206 */
Gilles Peskine92f47142021-03-30 23:28:51 +0200207 TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len,
208 &rnd_pseudo_rand,
209 &rnd_info ) == result );
Janos Follath4b151fa2017-09-20 13:46:37 +0100210 if ( result != 0 )
211 goto exit;
Gilles Peskine92f47142021-03-30 23:28:51 +0200212 if( !check_dhm_params( &ctx_srv, x_size, ske, ske_len ) )
213 goto exit;
Janos Follath4b151fa2017-09-20 13:46:37 +0100214
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200215 ske[ske_len++] = 0;
216 ske[ske_len++] = 0;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200217 TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200218
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200219 TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
220 TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200221
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100222 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ), &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
223 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 +0200224
225 TEST_ASSERT( sec_srv_len == sec_cli_len );
226 TEST_ASSERT( sec_srv_len != 0 );
227 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
228
Manuel Pégourié-Gonnard15d5de12013-09-17 11:34:11 +0200229 /* Re-do calc_secret on server a few times to test update of blinding values */
230 for( i = 0; i < 3; i++ )
231 {
232 sec_srv_len = 1000;
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100233 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é-Gonnard143b5022013-09-04 16:29:59 +0200234
Manuel Pégourié-Gonnard15d5de12013-09-17 11:34:11 +0200235 TEST_ASSERT( sec_srv_len == sec_cli_len );
236 TEST_ASSERT( sec_srv_len != 0 );
237 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
238 }
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200239
240 /*
241 * Second key exchange to test change of blinding values on server
242 */
Manuel Pégourié-Gonnard143b5022013-09-04 16:29:59 +0200243 p = ske;
Paul Bakker5c60de22009-07-08 19:47:36 +0000244
Gilles Peskine92f47142021-03-30 23:28:51 +0200245 TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len,
246 &rnd_pseudo_rand,
247 &rnd_info ) == 0 );
248 if( !check_dhm_params( &ctx_srv, x_size, ske, ske_len ) )
249 goto exit;
Paul Bakker5c60de22009-07-08 19:47:36 +0000250 ske[ske_len++] = 0;
251 ske[ske_len++] = 0;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200252 TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +0000253
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200254 TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
255 TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 );
Paul Bakker5c60de22009-07-08 19:47:36 +0000256
Manuel Pégourié-Gonnard33352052015-06-02 16:17:08 +0100257 TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ), &sec_srv_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
258 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 +0000259
260 TEST_ASSERT( sec_srv_len == sec_cli_len );
261 TEST_ASSERT( sec_srv_len != 0 );
262 TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 );
Paul Bakkerc43481a2011-02-20 16:34:26 +0000263
Paul Bakkerbd51b262014-07-10 15:26:12 +0200264exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200265 mbedtls_dhm_free( &ctx_srv );
266 mbedtls_dhm_free( &ctx_cli );
Paul Bakker5c60de22009-07-08 19:47:36 +0000267}
Paul Bakker33b43f12013-08-20 11:48:36 +0200268/* END_CASE */
Paul Bakker40ce79f2013-09-15 17:43:54 +0200269
Chris Jones415c7be2020-12-02 10:41:50 +0000270/* BEGIN_CASE */
271void dhm_make_public( int P_bytes, int radix_G, char *input_G, int result )
272{
273 mbedtls_mpi P, G;
274 mbedtls_dhm_context ctx;
275 unsigned char output[MBEDTLS_MPI_MAX_SIZE];
276
277 mbedtls_mpi_init( &P );
278 mbedtls_mpi_init( &G );
279 mbedtls_dhm_init( &ctx );
280
281 TEST_ASSERT( mbedtls_mpi_lset( &P, 1 ) == 0 );
282 TEST_ASSERT( mbedtls_mpi_shift_l( &P, ( P_bytes * 8 ) - 1 ) == 0 );
283 TEST_ASSERT( mbedtls_mpi_set_bit( &P, 0, 1 ) == 0 );
284
285 TEST_ASSERT( mbedtls_mpi_read_string( &G, radix_G, input_G ) == 0 );
286
287 TEST_ASSERT( mbedtls_dhm_set_group( &ctx, &P, &G ) == 0 );
288 TEST_ASSERT( mbedtls_dhm_make_public( &ctx, (int) mbedtls_mpi_size( &P ),
289 output, sizeof(output),
Chris Jones74b7ee42020-12-03 17:33:55 +0000290 &rnd_pseudo_rand,
Chris Jones415c7be2020-12-02 10:41:50 +0000291 NULL ) == result );
292
293exit:
294 mbedtls_mpi_free( &P );
295 mbedtls_mpi_free( &G );
296 mbedtls_dhm_free( &ctx );
297}
298/* END_CASE */
299
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200300/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Azim Khanf1aaec92017-05-30 14:23:15 +0100301void dhm_file( char * filename, char * p, char * g, int len )
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100302{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200303 mbedtls_dhm_context ctx;
304 mbedtls_mpi P, G;
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100305
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200306 mbedtls_dhm_init( &ctx );
307 mbedtls_mpi_init( &P ); mbedtls_mpi_init( &G );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100308
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200309 TEST_ASSERT( mbedtls_mpi_read_string( &P, 16, p ) == 0 );
310 TEST_ASSERT( mbedtls_mpi_read_string( &G, 16, g ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100311
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200312 TEST_ASSERT( mbedtls_dhm_parse_dhmfile( &ctx, filename ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100313
314 TEST_ASSERT( ctx.len == (size_t) len );
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200315 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.P, &P ) == 0 );
316 TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.G, &G ) == 0 );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100317
Paul Bakkerbd51b262014-07-10 15:26:12 +0200318exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200319 mbedtls_mpi_free( &P ); mbedtls_mpi_free( &G );
320 mbedtls_dhm_free( &ctx );
Manuel Pégourié-Gonnard3fec2202014-03-29 16:42:38 +0100321}
322/* END_CASE */
323
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200324/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Azim Khanf1aaec92017-05-30 14:23:15 +0100325void dhm_selftest( )
Paul Bakker40ce79f2013-09-15 17:43:54 +0200326{
Andres AG93012e82016-09-09 09:10:28 +0100327 TEST_ASSERT( mbedtls_dhm_self_test( 1 ) == 0 );
Paul Bakker40ce79f2013-09-15 17:43:54 +0200328}
329/* END_CASE */