aboutsummaryrefslogtreecommitdiffstats
path: root/src/libtls/tls_server.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2010-09-03 16:22:49 +0200
committerMartin Willi <martin@revosec.ch>2010-09-03 16:53:36 +0200
commitf4c98ae664ed226b1dd7c0eaac17626b2df9e4ef (patch)
treee207f02eb2a2dd4d2b163777e48679f7ea601154 /src/libtls/tls_server.c
parent7d7711aba4d4330155e1d4bd9fde5b75f2d154c7 (diff)
downloadstrongswan-f4c98ae664ed226b1dd7c0eaac17626b2df9e4ef.tar.bz2
strongswan-f4c98ae664ed226b1dd7c0eaac17626b2df9e4ef.tar.xz
Use ECDH group check where appropriate
Diffstat (limited to 'src/libtls/tls_server.c')
-rw-r--r--src/libtls/tls_server.c67
1 files changed, 25 insertions, 42 deletions
diff --git a/src/libtls/tls_server.c b/src/libtls/tls_server.c
index e965553eb..62a3d1d5c 100644
--- a/src/libtls/tls_server.c
+++ b/src/libtls/tls_server.c
@@ -409,23 +409,12 @@ static status_t process_key_exchange_dhe(private_tls_server_t *this,
tls_reader_t *reader)
{
chunk_t premaster, pub;
- bool ec = FALSE;
+ bool ec;
this->crypto->append_handshake(this->crypto,
TLS_CLIENT_KEY_EXCHANGE, reader->peek(reader));
- switch (this->dh->get_dh_group(this->dh))
- {
- case ECP_256_BIT:
- case ECP_384_BIT:
- case ECP_521_BIT:
- case ECP_192_BIT:
- case ECP_224_BIT:
- ec = TRUE;
- break;
- default:
- break;
- }
+ ec = diffie_hellman_group_is_ec(this->dh->get_dh_group(this->dh));
if ((ec && !reader->read_data8(reader, &pub)) ||
(!ec && !reader->read_data16(reader, &pub)))
{
@@ -823,36 +812,30 @@ static status_t send_server_key_exchange(private_tls_server_t *this,
diffie_hellman_params_t *params = NULL;
chunk_t chunk;
- switch (group)
+ if (diffie_hellman_group_is_ec(group))
{
- case ECP_256_BIT:
- case ECP_384_BIT:
- case ECP_521_BIT:
- case ECP_192_BIT:
- case ECP_224_BIT:
- if (!peer_supports_ec_group(this, group) &&
- !find_supported_group(this, &group))
- {
- DBG1(DBG_TLS, "no EC group supported by client and server");
- this->alert->add(this->alert, TLS_FATAL, TLS_HANDSHAKE_FAILURE);
- return NEED_MORE;
- }
- writer->write_uint8(writer, TLS_ECC_NAMED_CURVE);
- writer->write_uint16(writer, ec_group_to_curve(group));
- break;
- default:
- /* MODP groups */
- params = diffie_hellman_get_params(group);
- if (!params)
- {
- DBG1(DBG_TLS, "no parameters found for DH group %N",
- diffie_hellman_group_names, group);
- this->alert->add(this->alert, TLS_FATAL, TLS_INTERNAL_ERROR);
- return NEED_MORE;
- }
- writer->write_data16(writer, params->prime);
- writer->write_data16(writer, params->generator);
- break;
+ if (!peer_supports_ec_group(this, group) &&
+ !find_supported_group(this, &group))
+ {
+ DBG1(DBG_TLS, "no EC group supported by client and server");
+ this->alert->add(this->alert, TLS_FATAL, TLS_HANDSHAKE_FAILURE);
+ return NEED_MORE;
+ }
+ writer->write_uint8(writer, TLS_ECC_NAMED_CURVE);
+ writer->write_uint16(writer, ec_group_to_curve(group));
+ }
+ else
+ {
+ params = diffie_hellman_get_params(group);
+ if (!params)
+ {
+ DBG1(DBG_TLS, "no parameters found for DH group %N",
+ diffie_hellman_group_names, group);
+ this->alert->add(this->alert, TLS_FATAL, TLS_INTERNAL_ERROR);
+ return NEED_MORE;
+ }
+ writer->write_data16(writer, params->prime);
+ writer->write_data16(writer, params->generator);
}
this->dh = lib->crypto->create_dh(lib->crypto, group);
if (!this->dh)