Sortix volatile manual
This manual documents Sortix volatile, a development build that has not been officially released. You can instead view this document in the latest official manual.
| PEM_ASN1_READ(3) | Library Functions Manual | PEM_ASN1_READ(3) |
NAME
d2i_of_void,
PEM_ASN1_read,
PEM_ASN1_read_bio — PEM and
DER decode an arbitrary ASN.1 value
SYNOPSIS
#include
<openssl/pem.h>
typedef void *
d2i_of_void(void **val_out,
const unsigned char **der_in, long
length);
void *
PEM_ASN1_read(d2i_of_void *d2i,
const char *name, FILE *in_fp,
void **val_out, pem_password_cb
*cb, void *u);
void *
PEM_ASN1_read_bio(d2i_of_void
*d2i, const char *name, BIO
*in_bp, void **val_out,
pem_password_cb *cb, void
*u);
DESCRIPTION
These functions read one object from in_fp or in_bp and perform both PEM and DER decoding. They are needed when more specific decoding functions like those documented in PEM_read_bio_PrivateKey(3) and PEM_read_SSL_SESSION(3) are inadequate for the type name.
For PEM decoding,
PEM_bytes_read_bio(3)
is called internally. Consequently, the first object of type
name is returned and preceding objects of other types
are discarded. If necessary, data is decrypted, using
cb and/or u if they are not
NULL, as described in the
pem_password_cb(3)
manual page.
For subsequent DER decoding, pass a d2i
callback function that is adequate for the type name,
typically returning a pointer of a type more specific than
void *. For example,
d2i_ASN1_TYPE(3) can
always be used and its manual page describes the required behaviour of the
callback function to be passed. Normally, passing a more specific function
is more useful; candidate functions can be found with
‘man -k Nm~^d2i_’.
For the name argument, the
PEM_STRING_* string constants defined in
<openssl/pem.h> can be
used.
The val_out argument is useless and its many
dangers are described in detail in the
d2i_ASN1_TYPE(3)
manual page. To reduce the risk of bugs, always passing
NULL is recommended.
RETURN VALUES
These functions return a pointer to the decoded object or
NULL if an error occurs. They fail if
PEM_bytes_read_bio(3)
fails, for example because of invalid syntax in the input, an unknown
encryption, or an invalid passphrase entered by the user. They also fail if
d2i returns NULL, for example
due to DER decoding errors.
PEM_ASN1_read() may also fail if memory is
exhausted.
EXAMPLES
Typical usage of PEM_ASN1_read() is
demonstrated by the implementation of the more specific function to PEM and
DER decode an X.509 certificate:
X509 *
PEM_read_X509(FILE *fp, X509 **val_out, pem_password_cb *cb, void *u)
{
return PEM_ASN1_read((d2i_of_void *)d2i_X509, PEM_STRING_X509,
fp, (void **)val_out, cb, u);
}
ERRORS
Diagnostics that can be retrieved with ERR_get_error(3), ERR_GET_REASON(3), and ERR_reason_error_string(3) include:
ERR_R_BUF_LIB"BUF lib"PEM_ASN1_read() failed to set up a temporary BIO, for example because memory was exhausted.ERR_R_ASN1_LIB"ASN1 lib"- d2i returned
NULL, for example due to a DER syntax error.
Additional types of errors can result from PEM_bytes_read_bio(3).
SEE ALSO
BIO_new(3), d2i_ASN1_TYPE(3), PEM_bytes_read_bio(3), PEM_read(3), PEM_read_bio_PrivateKey(3), PEM_read_SSL_SESSION(3), PEM_X509_INFO_read(3)
HISTORY
These functions first appeared in SSLeay 0.5.1 and have been available since OpenBSD 2.4.
| July 23, 2020 | Sortix 1.1.0-dev |