NAME
BIO_f_asn1
,
asn1_ps_func
,
BIO_asn1_set_prefix
,
BIO_asn1_get_prefix
,
BIO_asn1_set_suffix
,
BIO_asn1_get_suffix
—
BER-encoding filter BIO
SYNOPSIS
#include
<openssl/asn1.h>
const BIO_METHOD *
BIO_f_asn1
(void);
#include
<openssl/bio.h>
typedef int
asn1_ps_func
(BIO *bio,
unsigned char **pbuf, int *plen,
void *parg);
int
BIO_asn1_set_prefix
(BIO *chain,
asn1_ps_func *prefix, asn1_ps_func
*prefix_free);
int
BIO_asn1_get_prefix
(BIO *chain,
asn1_ps_func **pprefix, asn1_ps_func
**pprefix_free);
int
BIO_asn1_set_suffix
(BIO *chain,
asn1_ps_func *suffix, asn1_ps_func
*suffix_free);
int
BIO_asn1_get_suffix
(BIO *chain,
asn1_ps_func **psuffix, asn1_ps_func
**psuffix_free);
DESCRIPTION
BIO_f_asn1
()
returns the "asn1" BIO method. BIOs created from it with
BIO_new(3) are filter BIOs intended to BER-encode data written to
them and pass the encoded data on to the next BIO in the chain. Such BIOs
operate as follows:
- BIO_method_type(3)
- returns
BIO_TYPE_ASN1
. - BIO_method_name(3)
- returns a pointer to the static string "asn1".
- BIO_write(3)
- writes the DER encoding of an ASN.1 OCTET STRING with the
len content octets in buf to
the next BIO in the chain.
If a prefix function was installed with
BIO_asn1_set_prefix
(), that function is called before writing the object. It may for example produce additional output. If it fails, writing fails.If a prefix_free function was installed as well, that function is called after writing any output produced by prefix but before writing the object. Failure of prefix_free is silently ignored.
- BIO_puts(3)
- operates like BIO_write(3) but uses the strlen(3) of buf instead of a len argument.
- BIO_flush(3)
- calls the suffix callback function, if any. If that produces any output, it calls the suffix_free callback function, if any, silently ignoring failure. Finally, it calls BIO_flush(3) on the next BIO in the chain. It fails if no data was previously written or if the suffix callback, writing, or BIO_flush(3) on the next BIO fail.
- BIO_ctrl(3)
- with a cmd of
BIO_C_SET_EX_ARG
stores the pointer parg internally such that it will be passed to theasn1_ps_func
() callback functions. With a cmd ofBIO_C_GET_EX_ARG
, it retrieves that pointer, storing it in *parg. The commandsBIO_C_SET_PREFIX
,BIO_C_GET_PREFIX
,BIO_C_SET_SUFFIX
,BIO_C_GET_SUFFIX
, andBIO_CTRL_FLUSH
are used internally to implementBIO_asn1_set_prefix
(),BIO_asn1_get_prefix
(),BIO_asn1_set_suffix
(),BIO_asn1_get_suffix
() and BIO_flush(3) and are not intended for use by application programs. Other commands are merely forwarded to the next BIO in the chain. - BIO_read(3), BIO_gets(3), and BIO_callback_ctrl(3)
- merely call the same function on the next BIO in the chain.
If the above description of a function mentions the next BIO in the chain, that function fails if the asn1 BIO is the last BIO in the chain.
BIO_asn1_set_prefix
()
and
BIO_asn1_get_prefix
()
install and retrieve the prefix and
prefix_free callback functions in and from the first
asn1 BIO in the given chain. Similarly,
BIO_asn1_set_suffix
()
and
BIO_asn1_get_suffix
()
install and retrieve the suffix and
suffix_free callback functions. Passing a
NULL
pointer for any of the
asn1_ps_func
() arguments disables that particular
callback.
RETURN VALUES
BIO_f_asn1
() always returns a pointer to a
static built-in object.
Functions of the type asn1_ps_func
() are
supposed to return 1 on success or 0 on failure.
BIO_asn1_set_prefix
(),
BIO_asn1_get_prefix
(),
BIO_asn1_set_suffix
(), and
BIO_asn1_get_suffix
() return 1 on success or 0 if
chain is a NULL
pointer or
does not contain any asn1 BIO. They may return -2 if a BIO is encountered in
the chain that is not properly initialized.
SEE ALSO
ASN1_put_object(3), BIO_ctrl(3), BIO_new(3), BIO_new_NDEF(3), BIO_next(3), BIO_write(3), i2d_ASN1_OCTET_STRING(3)
HISTORY
These functions first appeared in OpenSSL 1.0.0 and have been available since OpenBSD 4.9.