diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libtls/tls_server.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/libtls/tls_server.c b/src/libtls/tls_server.c index d1accbc2e..b0417f6cb 100644 --- a/src/libtls/tls_server.c +++ b/src/libtls/tls_server.c @@ -419,14 +419,18 @@ static status_t process_key_exchange_dhe(private_tls_server_t *this, return NEED_MORE; } - if (pub.ptr[0] != TLS_ANSI_UNCOMPRESSED) + if (ec) { - DBG1(DBG_TLS, "DH point format '%N' not supported", - tls_ansi_point_format_names, pub.ptr[0]); - this->alert->add(this->alert, TLS_FATAL, TLS_INTERNAL_ERROR); - return NEED_MORE; + if (pub.ptr[0] != TLS_ANSI_UNCOMPRESSED) + { + DBG1(DBG_TLS, "DH point format '%N' not supported", + tls_ansi_point_format_names, pub.ptr[0]); + this->alert->add(this->alert, TLS_FATAL, TLS_INTERNAL_ERROR); + return NEED_MORE; + } + pub = chunk_skip(pub, 1); } - this->dh->set_other_public_value(this->dh, chunk_skip(pub, 1)); + this->dh->set_other_public_value(this->dh, pub); if (this->dh->get_shared_secret(this->dh, &premaster) != SUCCESS) { DBG1(DBG_TLS, "calculating premaster from DH failed"); |