summaryrefslogtreecommitdiff
path: root/lib/auth/srp_rsa.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2017-05-29 16:22:27 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2017-05-31 14:50:22 +0200
commit7288a41662fd8c17fd2af6417b64ff97ee8fee93 (patch)
treef51c20cb6effebd1190b7a1720353187e2228ca2 /lib/auth/srp_rsa.c
parent3ffcff8ddf994e94c6c9c693be0a520ea825fa91 (diff)
downloadgnutls-7288a41662fd8c17fd2af6417b64ff97ee8fee93.tar.gz
tls-sig: re-organize and simplify the TLS signature generation and verification
That makes sure that the high level APIs are used when possible, and separate the TLS 1.2 from other code paths. This will allow supporting signature schemes like EdDSA and others. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
Diffstat (limited to 'lib/auth/srp_rsa.c')
-rw-r--r--lib/auth/srp_rsa.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/auth/srp_rsa.c b/lib/auth/srp_rsa.c
index 33359967da..f7e9cccf02 100644
--- a/lib/auth/srp_rsa.c
+++ b/lib/auth/srp_rsa.c
@@ -177,6 +177,8 @@ proc_srp_cert_server_kx(gnutls_session_t session, uint8_t * data,
gnutls_pcert_st peer_cert;
uint8_t *p;
gnutls_sign_algorithm_t sign_algo = GNUTLS_SIGN_UNKNOWN;
+ gnutls_certificate_credentials_t cred;
+ unsigned vflags;
const version_entry_st *ver = get_version(session);
if (unlikely(ver == NULL))
@@ -188,6 +190,15 @@ proc_srp_cert_server_kx(gnutls_session_t session, uint8_t * data,
data_size = _data_size - ret;
+ cred = (gnutls_certificate_credentials_t)
+ _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE);
+ if (cred == NULL) {
+ gnutls_assert();
+ return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
+ }
+
+ vflags = cred->verify_flags | session->internals.additional_verify_flags;
+
info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE);
if (info == NULL || info->ncerts == 0) {
gnutls_assert();
@@ -236,7 +247,7 @@ proc_srp_cert_server_kx(gnutls_session_t session, uint8_t * data,
}
ret =
- _gnutls_handshake_verify_data(session, &peer_cert, &vparams,
+ _gnutls_handshake_verify_data(session, vflags, &peer_cert, &vparams,
&signature, sign_algo);
gnutls_pcert_deinit(&peer_cert);