proposal: Generalize KE methods

This commit is contained in:
Tobias Brunner
2022-06-29 10:28:50 +02:00
parent b7c167f972
commit 3bebf5bf8d
6 changed files with 111 additions and 41 deletions
+66 -10
View File
@@ -301,38 +301,89 @@ START_TEST(test_select_proposal)
}
END_TEST
START_TEST(test_promote_ke_method)
START_TEST(test_has_transform)
{
proposal_t *proposal;
proposal = proposal_create_from_string(PROTO_IKE,
"aes128-sha256-modp3072-ecp256");
ck_assert(proposal->promote_ke_method(proposal, ECP_256_BIT));
ck_assert(proposal->has_transform(proposal, KEY_EXCHANGE_METHOD,
MODP_3072_BIT));
ck_assert(proposal->has_transform(proposal, KEY_EXCHANGE_METHOD,
ECP_256_BIT));
ck_assert(!proposal->has_transform(proposal, KEY_EXCHANGE_METHOD,
MODP_2048_BIT));
proposal->destroy(proposal);
}
END_TEST
START_TEST(test_has_transform_none)
{
proposal_t *proposal;
proposal = proposal_create_from_string(PROTO_ESP,
"aes128-sha256");
ck_assert(proposal->has_transform(proposal, KEY_EXCHANGE_METHOD,
KE_NONE));
proposal->destroy(proposal);
proposal = proposal_create_from_string(PROTO_ESP,
"aes128-sha256-none");
ck_assert(proposal->has_transform(proposal, KEY_EXCHANGE_METHOD,
KE_NONE));
proposal->destroy(proposal);
proposal = proposal_create_from_string(PROTO_ESP,
"aes128-sha256-modp3072");
ck_assert(!proposal->has_transform(proposal, KEY_EXCHANGE_METHOD,
KE_NONE));
proposal->destroy(proposal);
/* while actually contained in the proposal, KE_NONE is 0 so we expect
* has_transform() to return FALSE if there are other algorithms */
proposal = proposal_create_from_string(PROTO_ESP,
"aes128-sha256-modp3072-none");
ck_assert(!proposal->has_transform(proposal, KEY_EXCHANGE_METHOD,
KE_NONE));
proposal->destroy(proposal);
}
END_TEST
START_TEST(test_promote_transform)
{
proposal_t *proposal;
proposal = proposal_create_from_string(PROTO_IKE,
"aes128-sha256-modp3072-ecp256");
ck_assert(proposal->promote_transform(proposal, KEY_EXCHANGE_METHOD,
ECP_256_BIT));
assert_proposal_eq(proposal, "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256/MODP_3072");
proposal->destroy(proposal);
}
END_TEST
START_TEST(test_promote_ke_method_already_front)
START_TEST(test_promote_transform_already_front)
{
proposal_t *proposal;
proposal = proposal_create_from_string(PROTO_IKE,
"aes128-sha256-modp3072-ecp256");
ck_assert(proposal->promote_ke_method(proposal, MODP_3072_BIT));
ck_assert(proposal->promote_transform(proposal, KEY_EXCHANGE_METHOD,
MODP_3072_BIT));
assert_proposal_eq(proposal, "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072/ECP_256");
proposal->destroy(proposal);
}
END_TEST
START_TEST(test_promote_ke_method_not_contained)
START_TEST(test_promote_transform_not_contained)
{
proposal_t *proposal;
proposal = proposal_create_from_string(PROTO_IKE,
"aes128-sha256-modp3072-ecp256");
ck_assert(!proposal->promote_ke_method(proposal, MODP_2048_BIT));
ck_assert(!proposal->promote_transform(proposal, KEY_EXCHANGE_METHOD,
MODP_2048_BIT));
assert_proposal_eq(proposal, "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072/ECP_256");
proposal->destroy(proposal);
}
@@ -505,10 +556,15 @@ Suite *proposal_suite_create()
countof(select_proposal_data));
suite_add_tcase(s, tc);
tc = tcase_create("promote_ke_method");
tcase_add_test(tc, test_promote_ke_method);
tcase_add_test(tc, test_promote_ke_method_already_front);
tcase_add_test(tc, test_promote_ke_method_not_contained);
tc = tcase_create("has_transform");
tcase_add_test(tc, test_has_transform);
tcase_add_test(tc, test_has_transform_none);
suite_add_tcase(s, tc);
tc = tcase_create("promote_transform");
tcase_add_test(tc, test_promote_transform);
tcase_add_test(tc, test_promote_transform_already_front);
tcase_add_test(tc, test_promote_transform_not_contained);
suite_add_tcase(s, tc);
tc = tcase_create("unknown transform types");