1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */ 2*62c56f98SSadaf Ebrahimi#include "mbedtls/dhm.h" 3*62c56f98SSadaf Ebrahimi 4*62c56f98SSadaf Ebrahimiint check_get_value(const mbedtls_dhm_context *ctx, 5*62c56f98SSadaf Ebrahimi mbedtls_dhm_parameter param, 6*62c56f98SSadaf Ebrahimi const mbedtls_mpi *expected) 7*62c56f98SSadaf Ebrahimi{ 8*62c56f98SSadaf Ebrahimi mbedtls_mpi actual; 9*62c56f98SSadaf Ebrahimi int ok = 0; 10*62c56f98SSadaf Ebrahimi mbedtls_mpi_init(&actual); 11*62c56f98SSadaf Ebrahimi 12*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_get_value(ctx, param, &actual) == 0); 13*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_cmp_mpi(&actual, expected) == 0); 14*62c56f98SSadaf Ebrahimi ok = 1; 15*62c56f98SSadaf Ebrahimi 16*62c56f98SSadaf Ebrahimiexit: 17*62c56f98SSadaf Ebrahimi mbedtls_mpi_free(&actual); 18*62c56f98SSadaf Ebrahimi return ok; 19*62c56f98SSadaf Ebrahimi} 20*62c56f98SSadaf Ebrahimi 21*62c56f98SSadaf Ebrahimi/* Sanity checks on a Diffie-Hellman parameter: check the length-value 22*62c56f98SSadaf Ebrahimi * syntax and check that the value is the expected one (taken from the 23*62c56f98SSadaf Ebrahimi * DHM context by the caller). */ 24*62c56f98SSadaf Ebrahimistatic int check_dhm_param_output(const mbedtls_mpi *expected, 25*62c56f98SSadaf Ebrahimi const unsigned char *buffer, 26*62c56f98SSadaf Ebrahimi size_t size, 27*62c56f98SSadaf Ebrahimi size_t *offset) 28*62c56f98SSadaf Ebrahimi{ 29*62c56f98SSadaf Ebrahimi size_t n; 30*62c56f98SSadaf Ebrahimi mbedtls_mpi actual; 31*62c56f98SSadaf Ebrahimi int ok = 0; 32*62c56f98SSadaf Ebrahimi mbedtls_mpi_init(&actual); 33*62c56f98SSadaf Ebrahimi 34*62c56f98SSadaf Ebrahimi ++mbedtls_test_info.step; 35*62c56f98SSadaf Ebrahimi 36*62c56f98SSadaf Ebrahimi TEST_ASSERT(size >= *offset + 2); 37*62c56f98SSadaf Ebrahimi n = (buffer[*offset] << 8) | buffer[*offset + 1]; 38*62c56f98SSadaf Ebrahimi *offset += 2; 39*62c56f98SSadaf Ebrahimi /* The DHM param output from Mbed TLS has leading zeros stripped, as 40*62c56f98SSadaf Ebrahimi * permitted but not required by RFC 5246 \S4.4. */ 41*62c56f98SSadaf Ebrahimi TEST_EQUAL(n, mbedtls_mpi_size(expected)); 42*62c56f98SSadaf Ebrahimi TEST_ASSERT(size >= *offset + n); 43*62c56f98SSadaf Ebrahimi TEST_EQUAL(0, mbedtls_mpi_read_binary(&actual, buffer + *offset, n)); 44*62c56f98SSadaf Ebrahimi TEST_EQUAL(0, mbedtls_mpi_cmp_mpi(expected, &actual)); 45*62c56f98SSadaf Ebrahimi *offset += n; 46*62c56f98SSadaf Ebrahimi 47*62c56f98SSadaf Ebrahimi ok = 1; 48*62c56f98SSadaf Ebrahimiexit: 49*62c56f98SSadaf Ebrahimi mbedtls_mpi_free(&actual); 50*62c56f98SSadaf Ebrahimi return ok; 51*62c56f98SSadaf Ebrahimi} 52*62c56f98SSadaf Ebrahimi 53*62c56f98SSadaf Ebrahimi/* Sanity checks on Diffie-Hellman parameters: syntax, range, and comparison 54*62c56f98SSadaf Ebrahimi * against the context. */ 55*62c56f98SSadaf Ebrahimistatic int check_dhm_params(const mbedtls_dhm_context *ctx, 56*62c56f98SSadaf Ebrahimi size_t x_size, 57*62c56f98SSadaf Ebrahimi const unsigned char *ske, size_t ske_len) 58*62c56f98SSadaf Ebrahimi{ 59*62c56f98SSadaf Ebrahimi size_t offset = 0; 60*62c56f98SSadaf Ebrahimi 61*62c56f98SSadaf Ebrahimi /* Check that ctx->X and ctx->GX are within range. */ 62*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_cmp_int(&ctx->X, 1) > 0); 63*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_cmp_mpi(&ctx->X, &ctx->P) < 0); 64*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_size(&ctx->X) <= x_size); 65*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_cmp_int(&ctx->GX, 1) > 0); 66*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_cmp_mpi(&ctx->GX, &ctx->P) < 0); 67*62c56f98SSadaf Ebrahimi 68*62c56f98SSadaf Ebrahimi /* Check ske: it must contain P, G and G^X, each prefixed with a 69*62c56f98SSadaf Ebrahimi * 2-byte size. */ 70*62c56f98SSadaf Ebrahimi if (!check_dhm_param_output(&ctx->P, ske, ske_len, &offset)) { 71*62c56f98SSadaf Ebrahimi goto exit; 72*62c56f98SSadaf Ebrahimi } 73*62c56f98SSadaf Ebrahimi if (!check_dhm_param_output(&ctx->G, ske, ske_len, &offset)) { 74*62c56f98SSadaf Ebrahimi goto exit; 75*62c56f98SSadaf Ebrahimi } 76*62c56f98SSadaf Ebrahimi if (!check_dhm_param_output(&ctx->GX, ske, ske_len, &offset)) { 77*62c56f98SSadaf Ebrahimi goto exit; 78*62c56f98SSadaf Ebrahimi } 79*62c56f98SSadaf Ebrahimi TEST_EQUAL(offset, ske_len); 80*62c56f98SSadaf Ebrahimi 81*62c56f98SSadaf Ebrahimi return 1; 82*62c56f98SSadaf Ebrahimiexit: 83*62c56f98SSadaf Ebrahimi return 0; 84*62c56f98SSadaf Ebrahimi} 85*62c56f98SSadaf Ebrahimi 86*62c56f98SSadaf Ebrahimi/* END_HEADER */ 87*62c56f98SSadaf Ebrahimi 88*62c56f98SSadaf Ebrahimi/* BEGIN_DEPENDENCIES 89*62c56f98SSadaf Ebrahimi * depends_on:MBEDTLS_DHM_C:MBEDTLS_BIGNUM_C 90*62c56f98SSadaf Ebrahimi * END_DEPENDENCIES 91*62c56f98SSadaf Ebrahimi */ 92*62c56f98SSadaf Ebrahimi 93*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */ 94*62c56f98SSadaf Ebrahimivoid dhm_do_dhm(char *input_P, int x_size, 95*62c56f98SSadaf Ebrahimi char *input_G, int result) 96*62c56f98SSadaf Ebrahimi{ 97*62c56f98SSadaf Ebrahimi mbedtls_dhm_context ctx_srv; 98*62c56f98SSadaf Ebrahimi mbedtls_dhm_context ctx_cli; 99*62c56f98SSadaf Ebrahimi unsigned char ske[1000]; 100*62c56f98SSadaf Ebrahimi unsigned char *p = ske; 101*62c56f98SSadaf Ebrahimi unsigned char pub_cli[1000]; 102*62c56f98SSadaf Ebrahimi unsigned char sec_srv[1000]; 103*62c56f98SSadaf Ebrahimi unsigned char sec_cli[1000]; 104*62c56f98SSadaf Ebrahimi size_t ske_len = 0; 105*62c56f98SSadaf Ebrahimi size_t pub_cli_len = 0; 106*62c56f98SSadaf Ebrahimi size_t sec_srv_len; 107*62c56f98SSadaf Ebrahimi size_t sec_cli_len; 108*62c56f98SSadaf Ebrahimi int i; 109*62c56f98SSadaf Ebrahimi mbedtls_test_rnd_pseudo_info rnd_info; 110*62c56f98SSadaf Ebrahimi 111*62c56f98SSadaf Ebrahimi mbedtls_dhm_init(&ctx_srv); 112*62c56f98SSadaf Ebrahimi mbedtls_dhm_init(&ctx_cli); 113*62c56f98SSadaf Ebrahimi memset(ske, 0x00, 1000); 114*62c56f98SSadaf Ebrahimi memset(pub_cli, 0x00, 1000); 115*62c56f98SSadaf Ebrahimi memset(sec_srv, 0x00, 1000); 116*62c56f98SSadaf Ebrahimi memset(sec_cli, 0x00, 1000); 117*62c56f98SSadaf Ebrahimi memset(&rnd_info, 0x00, sizeof(mbedtls_test_rnd_pseudo_info)); 118*62c56f98SSadaf Ebrahimi 119*62c56f98SSadaf Ebrahimi /* 120*62c56f98SSadaf Ebrahimi * Set params 121*62c56f98SSadaf Ebrahimi */ 122*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_test_read_mpi(&ctx_srv.P, input_P) == 0); 123*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_test_read_mpi(&ctx_srv.G, input_G) == 0); 124*62c56f98SSadaf Ebrahimi pub_cli_len = mbedtls_mpi_size(&ctx_srv.P); 125*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_srv, MBEDTLS_DHM_PARAM_P, &ctx_srv.P)); 126*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_srv, MBEDTLS_DHM_PARAM_G, &ctx_srv.G)); 127*62c56f98SSadaf Ebrahimi 128*62c56f98SSadaf Ebrahimi /* 129*62c56f98SSadaf Ebrahimi * First key exchange 130*62c56f98SSadaf Ebrahimi */ 131*62c56f98SSadaf Ebrahimi mbedtls_test_set_step(10); 132*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_make_params(&ctx_srv, x_size, ske, &ske_len, 133*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 134*62c56f98SSadaf Ebrahimi &rnd_info) == result); 135*62c56f98SSadaf Ebrahimi if (result != 0) { 136*62c56f98SSadaf Ebrahimi goto exit; 137*62c56f98SSadaf Ebrahimi } 138*62c56f98SSadaf Ebrahimi if (!check_dhm_params(&ctx_srv, x_size, ske, ske_len)) { 139*62c56f98SSadaf Ebrahimi goto exit; 140*62c56f98SSadaf Ebrahimi } 141*62c56f98SSadaf Ebrahimi 142*62c56f98SSadaf Ebrahimi ske[ske_len++] = 0; 143*62c56f98SSadaf Ebrahimi ske[ske_len++] = 0; 144*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_read_params(&ctx_cli, &p, ske + ske_len) == 0); 145*62c56f98SSadaf Ebrahimi /* The domain parameters must be the same on both side. */ 146*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_cli, MBEDTLS_DHM_PARAM_P, &ctx_srv.P)); 147*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_cli, MBEDTLS_DHM_PARAM_G, &ctx_srv.G)); 148*62c56f98SSadaf Ebrahimi 149*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_make_public(&ctx_cli, x_size, pub_cli, pub_cli_len, 150*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 151*62c56f98SSadaf Ebrahimi &rnd_info) == 0); 152*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_read_public(&ctx_srv, pub_cli, pub_cli_len) == 0); 153*62c56f98SSadaf Ebrahimi 154*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_calc_secret(&ctx_srv, sec_srv, sizeof(sec_srv), 155*62c56f98SSadaf Ebrahimi &sec_srv_len, 156*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 157*62c56f98SSadaf Ebrahimi &rnd_info) == 0); 158*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_calc_secret(&ctx_cli, sec_cli, sizeof(sec_cli), 159*62c56f98SSadaf Ebrahimi &sec_cli_len, 160*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 161*62c56f98SSadaf Ebrahimi &rnd_info) == 0); 162*62c56f98SSadaf Ebrahimi 163*62c56f98SSadaf Ebrahimi TEST_ASSERT(sec_srv_len == sec_cli_len); 164*62c56f98SSadaf Ebrahimi TEST_ASSERT(sec_srv_len != 0); 165*62c56f98SSadaf Ebrahimi TEST_ASSERT(memcmp(sec_srv, sec_cli, sec_srv_len) == 0); 166*62c56f98SSadaf Ebrahimi 167*62c56f98SSadaf Ebrahimi /* Internal value checks */ 168*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_cli, MBEDTLS_DHM_PARAM_X, &ctx_cli.X)); 169*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_srv, MBEDTLS_DHM_PARAM_X, &ctx_srv.X)); 170*62c56f98SSadaf Ebrahimi /* Cross-checks */ 171*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_cli, MBEDTLS_DHM_PARAM_GX, &ctx_srv.GY)); 172*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_cli, MBEDTLS_DHM_PARAM_GY, &ctx_srv.GX)); 173*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_cli, MBEDTLS_DHM_PARAM_K, &ctx_srv.K)); 174*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_srv, MBEDTLS_DHM_PARAM_GX, &ctx_cli.GY)); 175*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_srv, MBEDTLS_DHM_PARAM_GY, &ctx_cli.GX)); 176*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx_srv, MBEDTLS_DHM_PARAM_K, &ctx_cli.K)); 177*62c56f98SSadaf Ebrahimi 178*62c56f98SSadaf Ebrahimi /* Re-do calc_secret on server a few times to test update of blinding values */ 179*62c56f98SSadaf Ebrahimi for (i = 0; i < 3; i++) { 180*62c56f98SSadaf Ebrahimi mbedtls_test_set_step(20 + i); 181*62c56f98SSadaf Ebrahimi sec_srv_len = 1000; 182*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_calc_secret(&ctx_srv, sec_srv, 183*62c56f98SSadaf Ebrahimi sizeof(sec_srv), &sec_srv_len, 184*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 185*62c56f98SSadaf Ebrahimi &rnd_info) == 0); 186*62c56f98SSadaf Ebrahimi 187*62c56f98SSadaf Ebrahimi TEST_ASSERT(sec_srv_len == sec_cli_len); 188*62c56f98SSadaf Ebrahimi TEST_ASSERT(sec_srv_len != 0); 189*62c56f98SSadaf Ebrahimi TEST_ASSERT(memcmp(sec_srv, sec_cli, sec_srv_len) == 0); 190*62c56f98SSadaf Ebrahimi } 191*62c56f98SSadaf Ebrahimi 192*62c56f98SSadaf Ebrahimi /* 193*62c56f98SSadaf Ebrahimi * Second key exchange to test change of blinding values on server 194*62c56f98SSadaf Ebrahimi */ 195*62c56f98SSadaf Ebrahimi p = ske; 196*62c56f98SSadaf Ebrahimi 197*62c56f98SSadaf Ebrahimi mbedtls_test_set_step(30); 198*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_make_params(&ctx_srv, x_size, ske, &ske_len, 199*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 200*62c56f98SSadaf Ebrahimi &rnd_info) == 0); 201*62c56f98SSadaf Ebrahimi if (!check_dhm_params(&ctx_srv, x_size, ske, ske_len)) { 202*62c56f98SSadaf Ebrahimi goto exit; 203*62c56f98SSadaf Ebrahimi } 204*62c56f98SSadaf Ebrahimi ske[ske_len++] = 0; 205*62c56f98SSadaf Ebrahimi ske[ske_len++] = 0; 206*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_read_params(&ctx_cli, &p, ske + ske_len) == 0); 207*62c56f98SSadaf Ebrahimi 208*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_make_public(&ctx_cli, x_size, pub_cli, pub_cli_len, 209*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 210*62c56f98SSadaf Ebrahimi &rnd_info) == 0); 211*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_read_public(&ctx_srv, pub_cli, pub_cli_len) == 0); 212*62c56f98SSadaf Ebrahimi 213*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_calc_secret(&ctx_srv, sec_srv, sizeof(sec_srv), 214*62c56f98SSadaf Ebrahimi &sec_srv_len, 215*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 216*62c56f98SSadaf Ebrahimi &rnd_info) == 0); 217*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_calc_secret(&ctx_cli, sec_cli, sizeof(sec_cli), 218*62c56f98SSadaf Ebrahimi &sec_cli_len, 219*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 220*62c56f98SSadaf Ebrahimi &rnd_info) == 0); 221*62c56f98SSadaf Ebrahimi 222*62c56f98SSadaf Ebrahimi TEST_ASSERT(sec_srv_len == sec_cli_len); 223*62c56f98SSadaf Ebrahimi TEST_ASSERT(sec_srv_len != 0); 224*62c56f98SSadaf Ebrahimi TEST_ASSERT(memcmp(sec_srv, sec_cli, sec_srv_len) == 0); 225*62c56f98SSadaf Ebrahimi 226*62c56f98SSadaf Ebrahimiexit: 227*62c56f98SSadaf Ebrahimi mbedtls_dhm_free(&ctx_srv); 228*62c56f98SSadaf Ebrahimi mbedtls_dhm_free(&ctx_cli); 229*62c56f98SSadaf Ebrahimi} 230*62c56f98SSadaf Ebrahimi/* END_CASE */ 231*62c56f98SSadaf Ebrahimi 232*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */ 233*62c56f98SSadaf Ebrahimivoid dhm_make_public(int P_bytes, char *input_G, int result) 234*62c56f98SSadaf Ebrahimi{ 235*62c56f98SSadaf Ebrahimi mbedtls_mpi P, G; 236*62c56f98SSadaf Ebrahimi mbedtls_dhm_context ctx; 237*62c56f98SSadaf Ebrahimi unsigned char output[MBEDTLS_MPI_MAX_SIZE]; 238*62c56f98SSadaf Ebrahimi 239*62c56f98SSadaf Ebrahimi mbedtls_mpi_init(&P); 240*62c56f98SSadaf Ebrahimi mbedtls_mpi_init(&G); 241*62c56f98SSadaf Ebrahimi mbedtls_dhm_init(&ctx); 242*62c56f98SSadaf Ebrahimi 243*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_lset(&P, 1) == 0); 244*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_shift_l(&P, (P_bytes * 8) - 1) == 0); 245*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_mpi_set_bit(&P, 0, 1) == 0); 246*62c56f98SSadaf Ebrahimi 247*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_test_read_mpi(&G, input_G) == 0); 248*62c56f98SSadaf Ebrahimi 249*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_set_group(&ctx, &P, &G) == 0); 250*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_make_public(&ctx, (int) mbedtls_mpi_size(&P), 251*62c56f98SSadaf Ebrahimi output, sizeof(output), 252*62c56f98SSadaf Ebrahimi &mbedtls_test_rnd_pseudo_rand, 253*62c56f98SSadaf Ebrahimi NULL) == result); 254*62c56f98SSadaf Ebrahimi 255*62c56f98SSadaf Ebrahimiexit: 256*62c56f98SSadaf Ebrahimi mbedtls_mpi_free(&P); 257*62c56f98SSadaf Ebrahimi mbedtls_mpi_free(&G); 258*62c56f98SSadaf Ebrahimi mbedtls_dhm_free(&ctx); 259*62c56f98SSadaf Ebrahimi} 260*62c56f98SSadaf Ebrahimi/* END_CASE */ 261*62c56f98SSadaf Ebrahimi 262*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */ 263*62c56f98SSadaf Ebrahimivoid dhm_file(char *filename, char *p, char *g, int len) 264*62c56f98SSadaf Ebrahimi{ 265*62c56f98SSadaf Ebrahimi mbedtls_dhm_context ctx; 266*62c56f98SSadaf Ebrahimi mbedtls_mpi P, G; 267*62c56f98SSadaf Ebrahimi 268*62c56f98SSadaf Ebrahimi mbedtls_dhm_init(&ctx); 269*62c56f98SSadaf Ebrahimi mbedtls_mpi_init(&P); mbedtls_mpi_init(&G); 270*62c56f98SSadaf Ebrahimi 271*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_test_read_mpi(&P, p) == 0); 272*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_test_read_mpi(&G, g) == 0); 273*62c56f98SSadaf Ebrahimi 274*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_parse_dhmfile(&ctx, filename) == 0); 275*62c56f98SSadaf Ebrahimi 276*62c56f98SSadaf Ebrahimi TEST_EQUAL(mbedtls_dhm_get_len(&ctx), (size_t) len); 277*62c56f98SSadaf Ebrahimi TEST_EQUAL(mbedtls_dhm_get_bitlen(&ctx), mbedtls_mpi_bitlen(&P)); 278*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx, MBEDTLS_DHM_PARAM_P, &P)); 279*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_get_value(&ctx, MBEDTLS_DHM_PARAM_G, &G)); 280*62c56f98SSadaf Ebrahimi 281*62c56f98SSadaf Ebrahimiexit: 282*62c56f98SSadaf Ebrahimi mbedtls_mpi_free(&P); mbedtls_mpi_free(&G); 283*62c56f98SSadaf Ebrahimi mbedtls_dhm_free(&ctx); 284*62c56f98SSadaf Ebrahimi} 285*62c56f98SSadaf Ebrahimi/* END_CASE */ 286*62c56f98SSadaf Ebrahimi 287*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ 288*62c56f98SSadaf Ebrahimivoid dhm_selftest() 289*62c56f98SSadaf Ebrahimi{ 290*62c56f98SSadaf Ebrahimi TEST_ASSERT(mbedtls_dhm_self_test(1) == 0); 291*62c56f98SSadaf Ebrahimi} 292*62c56f98SSadaf Ebrahimi/* END_CASE */ 293