@deftypefun {int} {gnutls_x509_crt_get_authority_info_access} (gnutls_x509_crt_t @var{crt}, unsigned int @var{seq}, int @var{what}, gnutls_datum_t * @var{data}, unsigned int * @var{critical})
@var{crt}: Holds the certificate
@var{seq}: specifies the sequence number of the access descriptor (0 for the first one, 1 for the second etc.)
@var{what}: what data to get, a @code{gnutls_info_access_what_t} type.
@var{data}: output data to be freed with @code{gnutls_free()} .
@var{critical}: pointer to output integer that is set to non-zero if the extension is marked as critical (may be @code{NULL} )
Note that a simpler API to access the authority info data is provided
by @code{gnutls_x509_aia_get()} and @code{gnutls_x509_ext_import_aia()} .
This function extracts the Authority Information Access (AIA)
extension, see RFC 5280 section 4.2.2.1 for more information. The
AIA extension holds a sequence of AccessDescription (AD) data.
The @code{seq} input parameter is used to indicate which member of the
sequence the caller is interested in. The first member is 0, the
second member 1 and so on. When the @code{seq} value is out of bounds,
@code{GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE} is returned.
The type of data returned in @code{data} is specified via @code{what} which
should be @code{gnutls_info_access_what_t} values.
If @code{what} is @code{GNUTLS_IA_ACCESSMETHOD_OID} then @code{data} will hold the
accessMethod OID (e.g., "1.3.6.1.5.5.7.48.1").
If @code{what} is @code{GNUTLS_IA_ACCESSLOCATION_GENERALNAME_TYPE} , @code{data} will
hold the accessLocation GeneralName type (e.g.,
"uniformResourceIdentifier").
If @code{what} is @code{GNUTLS_IA_URI} , @code{data} will hold the accessLocation URI
data. Requesting this @code{what} value leads to an error if the
accessLocation is not of the "uniformResourceIdentifier" type.
If @code{what} is @code{GNUTLS_IA_OCSP_URI} , @code{data} will hold the OCSP URI.
Requesting this @code{what} value leads to an error if the accessMethod
is not 1.3.6.1.5.5.7.48.1 aka OCSP, or if accessLocation is not of
the "uniformResourceIdentifier" type. In that case @code{GNUTLS_E_UNKNOWN_ALGORITHM}
will be returned, and @code{seq} should be increased and this function
called again.
If @code{what} is @code{GNUTLS_IA_CAISSUERS_URI} , @code{data} will hold the caIssuers
URI. Requesting this @code{what} value leads to an error if the
accessMethod is not 1.3.6.1.5.5.7.48.2 aka caIssuers, or if
accessLocation is not of the "uniformResourceIdentifier" type.
In that case handle as in @code{GNUTLS_IA_OCSP_URI} .
More @code{what} values may be allocated in the future as needed.
If @code{data} is NULL, the function does the same without storing the
output data, that is, it will set @code{critical} and do error checking
as usual.
The value of the critical flag is returned in * @code{critical} . Supply a
NULL @code{critical} if you want the function to make sure the extension
is non-critical, as required by RFC 5280.
@strong{Returns:} @code{GNUTLS_E_SUCCESS} on success, @code{GNUTLS_E_INVALID_REQUEST} on
invalid @code{crt} , @code{GNUTLS_E_CONSTRAINT_ERROR} if the extension is
incorrectly marked as critical (use a non-NULL @code{critical} to
override), @code{GNUTLS_E_UNKNOWN_ALGORITHM} if the requested OID does
not match (e.g., when using @code{GNUTLS_IA_OCSP_URI} ), otherwise a
negative error code.
@strong{Since:} 3.0
@end deftypefun