From: Andreas Steffen Date: Sat, 8 Oct 2011 12:12:14 +0000 (+0200) Subject: added pts_dh_group_select X-Git-Tag: 4.6.2~338 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3be8995c3e2c84d9de44654c88c3b5fb7e3e3c2d;p=thirdparty%2Fstrongswan.git added pts_dh_group_select --- diff --git a/src/libpts/pts/pts_dh_group.c b/src/libpts/pts/pts_dh_group.c index c3b7063bb9..7fc914805b 100644 --- a/src/libpts/pts/pts_dh_group.c +++ b/src/libpts/pts/pts_dh_group.c @@ -120,6 +120,40 @@ bool pts_update_supported_dh_groups(char *dh_group, pts_dh_group_t *groups) return FALSE; } +/** + * Described in header. + */ +pts_dh_group_t pts_dh_group_select(pts_dh_group_t supported_dh_groups, + pts_dh_group_t offered_dh_groups) +{ + if ((supported_dh_groups & PTS_DH_GROUP_IKE20) && + (offered_dh_groups & PTS_DH_GROUP_IKE20)) + { + return PTS_DH_GROUP_IKE20; + } + if ((supported_dh_groups & PTS_DH_GROUP_IKE19) && + (offered_dh_groups & PTS_DH_GROUP_IKE19)) + { + return PTS_DH_GROUP_IKE19; + } + if ((supported_dh_groups & PTS_DH_GROUP_IKE14) && + (offered_dh_groups & PTS_DH_GROUP_IKE14)) + { + return PTS_DH_GROUP_IKE14; + } + if ((supported_dh_groups & PTS_DH_GROUP_IKE5) && + (offered_dh_groups & PTS_DH_GROUP_IKE5)) + { + return PTS_DH_GROUP_IKE5; + } + if ((supported_dh_groups & PTS_DH_GROUP_IKE2) && + (offered_dh_groups & PTS_DH_GROUP_IKE2)) + { + return PTS_DH_GROUP_IKE2; + } + return PTS_DH_GROUP_NONE; +} + /** * Described in header. */ diff --git a/src/libpts/pts/pts_dh_group.h b/src/libpts/pts/pts_dh_group.h index 2621e0ef5a..5312e4fe36 100644 --- a/src/libpts/pts/pts_dh_group.h +++ b/src/libpts/pts/pts_dh_group.h @@ -30,10 +30,12 @@ typedef enum pts_dh_group_t pts_dh_group_t; * PTS Diffie Hellman Group Values */ enum pts_dh_group_t { + /** No DH Group */ + PTS_DH_GROUP_NONE = 0, /** IKE Group 2 */ - PTS_DH_GROUP_IKE2 = (1<<15), + PTS_DH_GROUP_IKE2 = (1<<15), /** IKE Group 5 */ - PTS_DH_GROUP_IKE5 = (1<<14), + PTS_DH_GROUP_IKE5 = (1<<14), /** IKE Group 14 */ PTS_DH_GROUP_IKE14 = (1<<13), /** IKE Group 19 */ @@ -63,17 +65,28 @@ enum pts_dh_group_t { bool pts_probe_dh_groups(pts_dh_group_t *groups); /** - * Update supported Diffie Hellman Groups according to configuration + * Update supported Diffie-Hellman groups according to configuration * - * @param dh_group configured Diffie Hellman Group + * @param dh_group configured Diffie-Hellman group * @param groups set of available groups */ bool pts_update_supported_dh_groups(char *dh_group, pts_dh_group_t *groups); +/** + * Select the strongest supported Diffie-Hellman group + * among a set of offered Diffie-Hellman groups + * + * @param dh_group set of supported DH groups + * @param groups set of offered DH groups + * @return selected DH group + */ +pts_dh_group_t pts_dh_group_select(pts_dh_group_t supported_dh_groups, + pts_dh_group_t offered_dh_groups); + /** * Convert pts_dh_group_t to diffie_hellman_group_t * - * @param dh_group PTS Diffie Hellman Group type + * @param dh_group PTS Diffie-Hellman group type * @return libstrongswan diffie hellman group type */ diffie_hellman_group_t pts_dh_group_to_strongswan_dh_group(pts_dh_group_t dh_group);