summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2017-06-07 09:50:29 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2017-07-17 17:08:01 +0200
commit3761340bf38d151439f8155039a3a367fc51a283 (patch)
treebd6775f6b9a20db5f3e5e31ce0eaef7432b8792c
parentd3b07f1a2700cc19c82dc7671cdbde112cc4b00e (diff)
downloadgnutls-3761340bf38d151439f8155039a3a367fc51a283.tar.gz
handshake: return better error code on unwanted algorithm
That is, when a signature algorithm is available which was not asked by the peer, then return GNUTLS_E_UNWANTED_ALGORITHM instead of the UNKNOWN_ALGORITHM. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
-rw-r--r--lib/alert.c1
-rw-r--r--lib/tls-sig.c4
-rw-r--r--tests/server_ecdsa_key.c2
3 files changed, 4 insertions, 3 deletions
diff --git a/lib/alert.c b/lib/alert.c
index d3d58888fc..0aa3a69aa8 100644
--- a/lib/alert.c
+++ b/lib/alert.c
@@ -250,6 +250,7 @@ int gnutls_error_to_alert(int err, int *level)
case GNUTLS_E_SAFE_RENEGOTIATION_FAILED:
case GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL:
case GNUTLS_E_UNKNOWN_PK_ALGORITHM:
+ case GNUTLS_E_UNWANTED_ALGORITHM:
ret = GNUTLS_A_HANDSHAKE_FAILURE;
_level = GNUTLS_AL_FATAL;
break;
diff --git a/lib/tls-sig.c b/lib/tls-sig.c
index 6425c508c7..378ed3e1a3 100644
--- a/lib/tls-sig.c
+++ b/lib/tls-sig.c
@@ -178,7 +178,7 @@ _gnutls_handshake_sign_data(gnutls_session_t session,
*sign_algo = _gnutls_session_get_sign_algo(session, cert, 0);
if (*sign_algo == GNUTLS_SIGN_UNKNOWN) {
gnutls_assert();
- return GNUTLS_E_UNKNOWN_PK_ALGORITHM;
+ return GNUTLS_E_UNWANTED_ALGORITHM;
}
gnutls_sign_algorithm_set_server(session, *sign_algo);
@@ -552,7 +552,7 @@ _gnutls_handshake_sign_crt_vrfy12(gnutls_session_t session,
sign_algo = _gnutls_session_get_sign_algo(session, cert, 1);
if (sign_algo == GNUTLS_SIGN_UNKNOWN) {
gnutls_assert();
- return GNUTLS_E_UNKNOWN_PK_ALGORITHM;
+ return GNUTLS_E_UNWANTED_ALGORITHM;
}
}
diff --git a/tests/server_ecdsa_key.c b/tests/server_ecdsa_key.c
index 3a8848f90c..d2c400208f 100644
--- a/tests/server_ecdsa_key.c
+++ b/tests/server_ecdsa_key.c
@@ -89,7 +89,7 @@ void doit(void)
}
test_cli_serv_expect(serv_cred, cli_cred, "NORMAL", "NORMAL:-SIGN-ALL", NULL, GNUTLS_E_AGAIN, GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM);
- test_cli_serv_expect(serv_cred, cli_cred, "NORMAL", "NORMAL:-SIGN-ECDSA-SHA224:-SIGN-ECDSA-SHA1:-SIGN-ECDSA-SHA256:-SIGN-ECDSA-SHA384:-SIGN-ECDSA-SHA512", NULL, GNUTLS_E_UNKNOWN_PK_ALGORITHM, GNUTLS_E_AGAIN);
+ test_cli_serv_expect(serv_cred, cli_cred, "NORMAL", "NORMAL:-SIGN-ECDSA-SHA224:-SIGN-ECDSA-SHA1:-SIGN-ECDSA-SHA256:-SIGN-ECDSA-SHA384:-SIGN-ECDSA-SHA512", NULL, GNUTLS_E_UNWANTED_ALGORITHM, GNUTLS_E_AGAIN);
gnutls_certificate_free_credentials(serv_cred);
gnutls_certificate_free_credentials(cli_cred);