/* We should reply with a certificate message,
* even if we have no certificate to send.
*/
- session->internals.crt_requested = 1;
+ session->internals.hsk_flags |= HSK_CRT_ASKED;
/* now we ask the user to tell which one
* he wants to use.
* Returns: 0 if the peer (server) did not request client
* authentication or 1 otherwise.
**/
-int gnutls_certificate_client_get_request_status(gnutls_session_t session)
+unsigned
+gnutls_certificate_client_get_request_status(gnutls_session_t session)
{
- return session->internals.crt_requested;
+ return (session->internals.hsk_flags & HSK_CRT_ASKED)?1:0;
}
/**
#define HSK_CRT_REQ_SENT (1<<5)
#define HSK_CRT_REQ_GOT_SIG_ALGO (1<<6)
#define HSK_KEY_UPDATE_ASKED (1<<7) /* flag is not used during handshake */
- unsigned hsk_flags; /* TLS1.3 only */
+ unsigned hsk_flags;
time_t last_key_update;
- unsigned crt_requested; /* 1 if client auth was requested (i.e., client cert).
- * In case of a server this holds 1 if we should wait
- * for a client certificate verify
- */
-
gnutls_buffer_st hb_local_data;
gnutls_buffer_st hb_remote_data;
struct timespec hb_ping_start; /* timestamp: when first HeartBeat ping was sent */
recv_state_t recv_state; /* state of the receive function */
+ /* if set, server and client random were set by the application */
bool sc_random_set;
unsigned flags; /* the flags in gnutls_init() */
return gnutls_assert_val(ret);
session->internals.used_exts = 0;
- session->internals.crt_requested = 0;
+ session->internals.hsk_flags = 0;
session->internals.handshake_in_progress = 1;
session->internals.vc_status = -1;
gettime(&session->internals.handshake_start_time);
time_t gnutls_certificate_activation_time_peers(gnutls_session_t session);
time_t gnutls_certificate_expiration_time_peers(gnutls_session_t session);
-int gnutls_certificate_client_get_request_status(gnutls_session_t session);
+unsigned gnutls_certificate_client_get_request_status(gnutls_session_t session);
int gnutls_certificate_verify_peers2(gnutls_session_t session,
unsigned int *status);
int gnutls_certificate_verify_peers3(gnutls_session_t session,
/* if certificate verify is not needed just exit
*/
- if (session->internals.crt_requested == 0)
+ if (!(session->internals.hsk_flags & HSK_CRT_ASKED))
return 0;
int ret = 0;
mbuffer_st *bufel = NULL;
- if (session->internals.crt_requested == 0)
+ if (!(session->internals.hsk_flags & HSK_CRT_ASKED))
return 0;
if (session->internals.auth_struct->
if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND && optional != 0)
ret = 0;
else
- session->internals.crt_requested = 1;
+ session->internals.hsk_flags |= HSK_CRT_VRFY_EXPECTED;
cleanup:
_gnutls_buffer_clear(&buf);
return 0;
if (session->internals.send_cert_req == 0 ||
- session->internals.crt_requested == 0) {
+ (!(session->internals.hsk_flags & HSK_CRT_VRFY_EXPECTED))) {
return 0;
}
session->internals.cand_ec_group = 0;
session->internals.cand_dh_group = 0;
- session->internals.hsk_flags = 0;
session->internals.hrr_cs[0] = CS_INVALID_MAJOR;
session->internals.hrr_cs[1] = CS_INVALID_MINOR;
}
goto cleanup;
}
- session->internals.crt_requested = 1;
+ session->internals.hsk_flags |= HSK_CRT_ASKED;
ret = _gnutls_select_client_cert(session, ctx.rdn, ctx.rdn_size,
ctx.pk_algos, ctx.pk_algos_length);
goto cleanup;
}
- session->internals.hsk_flags |= HSK_CRT_ASKED;
-
ret = 0;
cleanup: