/**
* gnutls_ocsp_status_request_is_checked:
* @session: is a gnutls session
- * @flags: should be zero
+ * @flags: should be zero or %GNUTLS_OCSP_SR_IS_AVAIL
*
* Check whether an OCSP status response was included in the handshake
* and whether it was checked and valid (not too old or superseded).
* This is a helper function when needing to decide whether to perform an
- * OCSP validity check on the peer's certificate. Must be called after
- * gnutls_certificate_verify_peers3() is called.
+ * OCSP validity check on the peer's certificate. Should be called after
+ * any of gnutls_certificate_verify_peers*() are called.
+ *
+ * If the flag %GNUTLS_OCSP_SR_IS_AVAIL is specified, the return
+ * value of the function indicates whether an OCSP status response have
+ * been received (even if invalid).
*
* Returns: non zero it was valid, or a zero if it wasn't sent,
* or sent and was invalid.
gnutls_ocsp_status_request_is_checked(gnutls_session_t session,
unsigned int flags)
{
+ int ret;
+ gnutls_datum_t data;
+
+ if (flags & GNUTLS_OCSP_SR_IS_AVAIL) {
+ ret = gnutls_ocsp_status_request_get(session, &data);
+ if (ret < 0)
+ return gnutls_assert_val(0);
+
+ if (data.data == NULL)
+ return gnutls_assert_val(0);
+ return 1;
+ }
return session->internals.ocsp_check_ok;
}
int gnutls_ocsp_status_request_get(gnutls_session_t session,
gnutls_datum_t * response);
+#define GNUTLS_OCSP_SR_IS_AVAIL 1
int gnutls_ocsp_status_request_is_checked(gnutls_session_t session,
unsigned int flags);
printf(" safe renegotiation,");
if (gnutls_session_etm_status(session)!=0)
printf(" EtM,");
- if (gnutls_ocsp_status_request_is_checked(session, 0)!=0)
+ if (gnutls_ocsp_status_request_is_checked(session, GNUTLS_OCSP_SR_IS_AVAIL)!=0)
printf(" OCSP status request,");
printf("\n");