From 9514aa2dccddf7551b547e6db4964f0e04716e2a Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Wed, 27 Jan 2021 14:35:37 +0100 Subject: [PATCH] diffie-hellman: Add enum names that match proposal keywords --- src/libstrongswan/crypto/diffie_hellman.c | 39 +++++++++++++++++++ src/libstrongswan/crypto/diffie_hellman.h | 5 +++ .../tests/suites/test_proposal.c | 30 ++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/src/libstrongswan/crypto/diffie_hellman.c b/src/libstrongswan/crypto/diffie_hellman.c index efcfdbc74..173882bce 100644 --- a/src/libstrongswan/crypto/diffie_hellman.c +++ b/src/libstrongswan/crypto/diffie_hellman.c @@ -57,6 +57,45 @@ ENUM_NEXT(diffie_hellman_group_names, MODP_CUSTOM, MODP_CUSTOM, NH_128_BIT, "MODP_CUSTOM"); ENUM_END(diffie_hellman_group_names, MODP_CUSTOM); +ENUM_BEGIN(diffie_hellman_group_names_short, MODP_NONE, MODP_1024_BIT, + "modpnone", + "modp768", + "modp1024"); +ENUM_NEXT(diffie_hellman_group_names_short, MODP_1536_BIT, MODP_1536_BIT, MODP_1024_BIT, + "modp1536"); +ENUM_NEXT(diffie_hellman_group_names_short, MODP_2048_BIT, ECP_521_BIT, MODP_1536_BIT, + "modp2048", + "modp3072", + "modp4096", + "modp6144", + "modp8192", + "ecp256", + "ecp384", + "ecp521"); +ENUM_NEXT(diffie_hellman_group_names_short, MODP_1024_160, CURVE_448, ECP_521_BIT, + "modp1024s160", + "modp2048s224", + "modp2048s256", + "ecp192", + "ecp224", + "ecp224bp", + "ecp256bp", + "ecp384bp", + "ecp512bp", + "curve25519", + "curve448"); +ENUM_NEXT(diffie_hellman_group_names_short, MODP_NULL, MODP_NULL, CURVE_448, + "modpnull"); +ENUM_NEXT(diffie_hellman_group_names_short, NTRU_112_BIT, NTRU_256_BIT, MODP_NULL, + "ntru112", + "ntru128", + "ntru192", + "ntru256"); +ENUM_NEXT(diffie_hellman_group_names_short, NH_128_BIT, NH_128_BIT, NTRU_256_BIT, + "newhope128"); +ENUM_NEXT(diffie_hellman_group_names_short, MODP_CUSTOM, MODP_CUSTOM, NH_128_BIT, + "modpcustom"); +ENUM_END(diffie_hellman_group_names_short, MODP_CUSTOM); /** * List of known diffie hellman group parameters. diff --git a/src/libstrongswan/crypto/diffie_hellman.h b/src/libstrongswan/crypto/diffie_hellman.h index ce01bb346..f9459e77a 100644 --- a/src/libstrongswan/crypto/diffie_hellman.h +++ b/src/libstrongswan/crypto/diffie_hellman.h @@ -82,6 +82,11 @@ enum diffie_hellman_group_t { */ extern enum_name_t *diffie_hellman_group_names; +/** + * enum names for diffie_hellman_group_t (matching proposal keywords). + */ +extern enum_name_t *diffie_hellman_group_names_short; + /** * Implementation of the Diffie-Hellman algorithm, as in RFC2631. */ diff --git a/src/libstrongswan/tests/suites/test_proposal.c b/src/libstrongswan/tests/suites/test_proposal.c index c323119ea..783b2ec96 100644 --- a/src/libstrongswan/tests/suites/test_proposal.c +++ b/src/libstrongswan/tests/suites/test_proposal.c @@ -17,6 +17,32 @@ #include +START_TEST(test_dh_group_mapping) +{ + enum_name_t *e = diffie_hellman_group_names_short; + diffie_hellman_group_t group; + const proposal_token_t *token; + char *name; + + do + { + for (group = e->first; group <= e->last; group++) + { + if (group == MODP_CUSTOM) + { /* can't be configured */ + continue; + } + name = e->names[group - e->first]; + token = lib->proposal->get_token(lib->proposal, name); + ck_assert_msg(token, "%s can't be mapped", name); + ck_assert_int_eq(token->type, DIFFIE_HELLMAN_GROUP); + ck_assert_int_eq(token->algorithm, group); + } + } + while ((e = e->next)); +} +END_TEST + static struct { protocol_id_t proto; char *proposal; @@ -456,6 +482,10 @@ Suite *proposal_suite_create() s = suite_create("proposal"); + tc = tcase_create("proposal keywords"); + tcase_add_test(tc, test_dh_group_mapping); + suite_add_tcase(s, tc); + tc = tcase_create("create_from_string"); tcase_add_loop_test(tc, test_create_from_string, 0, countof(create_data)); suite_add_tcase(s, tc); -- 2.47.3