BIO

From OpenSSLWiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

A BIO is an I/O stream abstraction; essentially OpenSSL's answer to the C library's FILE *. OpenSSL comes with a number of useful BIO types predefined, or you can create your own.

BIOs come in two flavors: source/sink, or filter. BIOs can be chained together. Each chain always has exactly one source/sink, but can have any number (zero or more) of filters.

Reading from a BIO can be done with Manual:BIO_read(3) and BIO_gets.

Writing to a BIO can be done with BIO_write, BIO_puts, BIO_printf, and BIO_vprintf.

Filter BIOs

Source/sink BIOs

implementation of those bio are within bio/bss_xxx.c bss stading for Bio Source Sink

Combining Filters and Source Sink BIOs

new_head = BIO_push(BIO * local_head, BIO * tail)

will connect tail at end of local_head chain.

WARNING BIO_push will never fail, but can create invalid chains.

In standard usage end of a chain is a source sink, and all other elements are filters.

two separated BIOs can then be connected with BIO_make_bio_pair() into a connected pair.