END_TEST START_TEST(test_dh_get_my_pubvalue) { tkm_diffie_hellman_t *dh = tkm_diffie_hellman_create(MODP_4096_BIT); fail_if(!dh, "Unable to create DH"); chunk_t value; dh->dh.get_my_public_value(&dh->dh, &value); dh->dh.destroy(&dh->dh); fail_if(value.ptr == NULL, "Pubvalue is NULL"); fail_if(value.len != 512, "Pubvalue size mismatch"); chunk_free(&value); }
END_TEST START_TEST(test_derive_child_keys) { tkm_diffie_hellman_t *dh = tkm_diffie_hellman_create(MODP_4096_BIT); fail_if(!dh, "Unable to create DH object"); proposal_t *proposal = proposal_create_from_string(PROTO_ESP, "aes256-sha512-modp4096"); fail_if(!proposal, "Unable to create proposal"); proposal->set_spi(proposal, 42); tkm_keymat_t *keymat = tkm_keymat_create(TRUE); fail_if(!keymat, "Unable to create keymat"); chunk_t encr_i, encr_r, integ_i, integ_r; chunk_t nonce = chunk_from_chars("test chunk"); fail_unless(keymat->keymat_v2.derive_child_keys(&keymat->keymat_v2, proposal, (diffie_hellman_t *)dh, nonce, nonce, &encr_i, &integ_i, &encr_r, &integ_r), "Child key derivation failed"); esa_info_t *info = (esa_info_t *)encr_i.ptr; fail_if(!info, "encr_i does not contain esa information"); fail_if(info->isa_id != keymat->get_isa_id(keymat), "Isa context id mismatch (encr_i)"); fail_if(info->spi_r != 42, "SPI mismatch (encr_i)"); fail_unless(chunk_equals(info->nonce_i, nonce), "nonce_i mismatch (encr_i)"); fail_unless(chunk_equals(info->nonce_r, nonce), "nonce_r mismatch (encr_i)"); fail_if(info->is_encr_r, "Flag is_encr_r set for encr_i"); fail_if(info->dh_id != dh->get_id(dh), "DH context id mismatch (encr_i)"); chunk_free(&info->nonce_i); chunk_free(&info->nonce_r); info = (esa_info_t *)encr_r.ptr; fail_if(!info, "encr_r does not contain esa information"); fail_if(info->isa_id != keymat->get_isa_id(keymat), "Isa context id mismatch (encr_r)"); fail_if(info->spi_r != 42, "SPI mismatch (encr_r)"); fail_unless(chunk_equals(info->nonce_i, nonce), "nonce_i mismatch (encr_r)"); fail_unless(chunk_equals(info->nonce_r, nonce), "nonce_r mismatch (encr_r)"); fail_unless(info->is_encr_r, "Flag is_encr_r set for encr_r"); fail_if(info->dh_id != dh->get_id(dh), "DH context id mismatch (encr_i)"); chunk_free(&info->nonce_i); chunk_free(&info->nonce_r); proposal->destroy(proposal); dh->dh.destroy(&dh->dh); keymat->keymat_v2.keymat.destroy(&keymat->keymat_v2.keymat); chunk_free(&encr_i); chunk_free(&encr_r); }