]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
gnutls_ocsp_status_request_get2: added function
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Fri, 13 Oct 2017 07:31:58 +0000 (09:31 +0200)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Mon, 19 Feb 2018 14:29:36 +0000 (15:29 +0100)
The function extends gnutls_ocsp_status_request_get() to
retrieve more than a single responses.

Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
lib/ext/status_request.c
lib/includes/gnutls/gnutls.h.in
lib/libgnutls.map

index 452a13ed063448fb9b272a898f9656e873bcf0b1..8b16ac0478a75f788388f129aa755e2cf6c35d5f 100644 (file)
@@ -314,6 +314,36 @@ gnutls_ocsp_status_request_enable_client(gnutls_session_t session,
 int
 gnutls_ocsp_status_request_get(gnutls_session_t session,
                               gnutls_datum_t * response)
+{
+       return gnutls_ocsp_status_request_get2(session, 0, response);
+}
+
+/**
+ * gnutls_ocsp_status_request_get2:
+ * @session: is a #gnutls_session_t type.
+ * @idx: the index of peer's certificate
+ * @response: a #gnutls_datum_t with DER encoded OCSP response
+ *
+ * This function returns the OCSP status response received
+ * from the TLS server for the certificate index provided.
+ * The index corresponds to certificates as returned by
+ * gnutls_certificate_get_peers. When index is zero this
+ * function operates identically to gnutls_ocsp_status_request_get().
+ *
+ * The returned @response should be treated as
+ * constant. If no OCSP response is available for the
+ * given index then %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE
+ * is returned.
+ *
+ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned,
+ *   otherwise a negative error code is returned.
+ *
+ * Since: 3.6.xx
+ **/
+int
+gnutls_ocsp_status_request_get2(gnutls_session_t session,
+                               unsigned idx,
+                               gnutls_datum_t * response)
 {
        cert_auth_info_t info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE);
 
@@ -321,13 +351,13 @@ gnutls_ocsp_status_request_get(gnutls_session_t session,
                return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
 
        if (info == NULL || info->raw_ocsp_list == NULL ||
-           info->nocsp == 0 || info->raw_ocsp_list[0].size == 0)
+           idx >= info->nocsp || info->raw_ocsp_list[idx].size == 0)
                return
                    gnutls_assert_val
                    (GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
 
-       response->data = info->raw_ocsp_list[0].data;
-       response->size = info->raw_ocsp_list[0].size;
+       response->data = info->raw_ocsp_list[idx].data;
+       response->size = info->raw_ocsp_list[idx].size;
 
        return 0;
 }
index 5be740374bc9b77d7295be05a5cb4e8f07921471..8e0c764564093dbf6275ebcd3e59fbe365dd7b79 100644 (file)
@@ -1910,6 +1910,11 @@ int gnutls_ocsp_status_request_get(gnutls_session_t session,
 int gnutls_ocsp_status_request_is_checked(gnutls_session_t session,
                                          unsigned int flags);
 
+int
+gnutls_ocsp_status_request_get2(gnutls_session_t session,
+                               unsigned idx,
+                               gnutls_datum_t * response);
+
 /* global state functions
  */
 int gnutls_global_init(void);
index 0641a09bbb41361f3a0f5858bd94c7449db4ec82..9a0660eb4b31cf972bad4f391073dbc5d11a8965 100644 (file)
@@ -1210,6 +1210,7 @@ GNUTLS_3_6_xx
        gnutls_session_key_update;
        gnutls_ext_get_current_msg;
        gnutls_reauth;
+       gnutls_ocsp_status_request_get2;
 } GNUTLS_3_6_2;
 
 GNUTLS_FIPS140_3_4 {