BIO_f_cipher, BIO_set_cipher, BIO_get_cipher_status,
BIO_get_cipher_ctx - Cipher BIO filter
#include <openssl/bio.h> #include <openssl/evp.h>
BIO_METHOD * BIO_f_cipher(
void ); void BIO_set_cipher(
const EVP_CIPHER *cipher,
unsigned char *key,
unsigned char *iv,
int enc ); int BIO_get_cipher_status(
BIO *b ); int BIO_get_cipher_ctx(
EVP_CIPHER_CTX **pctx );
The BIO_f_cipher() function returns the cipher BIO method.
This is a filter BIO that encrypts any data written
through it, and decrypts any data read from it. It is a
BIO wrapper for the EVP_CipherInit(), EVP_CipherUpdate(),
and EVP_CipherFinal() cipher functions .
Cipher BIOs do not support BIO_gets() or BIO_puts().
The BIO_flush() function on an encryption BIO that is
being written through is used to signal that no more data
is to be encrypted. This is used to flush and possibly
pad the final block through the BIO.
The BIO_set_cipher() function sets the cipher of BIO b to
cipher using key and iv. The enc should be set to 1 for
encryption and zero for decryption.
When reading from an encryption BIO the final block is
automatically decrypted and checked when EOF is detected.
The BIO_get_cipher_status() function is a BIO_ctrl() macro
which can be called to determine whether the decryption
operation was successful.
The BIO_get_cipher_ctx() function is a BIO_ctrl() macro
which retrieves the internal BIO cipher context. The
retrieved context can be used in conjunction with the
standard cipher routines to set it up. This is useful when
BIO_set_cipher() is not flexible enough for the applications
When encrypting, BIO_flush() must be called to flush the
final block through the BIO. Otherwise, the final block
will fail a subsequent decrypt.
When decrypting, an error on the final block is signalled
by a zero return value from the read operation. A successful
decrypt followed by EOF will also return zero for the
final read. The BIO_get_cipher_status() function should be
called to determine if the decrypt was successful.
If BIO_gets() or BIO_puts() support is needed then it can
be achieved by preceding the cipher BIO with a buffering
BIO_f_cipher() returns the cipher BIO method.
BIO_set_cipher() does not return a value.
BIO_get_cipher_status() returns 1 for a successful decrypt
and 0 for failure.
BIO_get_cipher_ctx() always returns 1.
[ Back ]