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.
| BIO_F_CIPHER(3) | Library Functions Manual | BIO_F_CIPHER(3) | 
NAME
BIO_f_cipher,
    BIO_set_cipher,
    BIO_get_cipher_status,
    BIO_get_cipher_ctx — cipher
    BIO filter
SYNOPSIS
#include
    <openssl/bio.h>
  
  #include <openssl/evp.h>
const BIO_METHOD *
  
  BIO_f_cipher(void);
int
  
  BIO_set_cipher(BIO *b,
    const EVP_CIPHER *cipher, unsigned
    char *key, unsigned char *iv,
    int enc);
long
  
  BIO_get_cipher_status(BIO
  *b);
long
  
  BIO_get_cipher_ctx(BIO *b,
    EVP_CIPHER_CTX **pctx);
DESCRIPTION
BIO_f_cipher()
    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 cipher routines
    EVP_CipherInit(3),
    EVP_CipherUpdate(3),
    and
    EVP_CipherFinal(3).
Cipher BIOs do not support BIO_gets(3) or BIO_puts(3).
BIO_flush(3) 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.
BIO_set_cipher()
    sets the cipher of BIO b to
    cipher using key key and IV
    iv. 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.
    BIO_get_cipher_status()
    is a BIO_ctrl(3) macro
    which can be called to determine whether the decryption operation was
    successful.
BIO_get_cipher_ctx()
    is a BIO_ctrl(3) 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 needs.
When a chain containing a cipher BIO is copied with BIO_dup_chain(3), the cipher context is automatically copied from the existing BIO object to the new one and the init flag that can be retrieved with BIO_get_init(3) is set to 1.
When encrypting, BIO_flush(3) must be called to flush the final block through the BIO. If it is not, then 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.
    BIO_get_cipher_status()
    should be called to determine if the decrypt was successful.
As always, if BIO_gets(3) or BIO_puts(3) support is needed, then it can be achieved by preceding the cipher BIO with a buffering BIO.
BIO_ctrl(3) cmd arguments correspond to macros as follows:
| cmd constant | corresponding macro | 
| BIO_C_GET_CIPHER_CTX | BIO_get_cipher_ctx() | 
| BIO_C_GET_CIPHER_STATUS | BIO_get_cipher_status() | 
| BIO_CTRL_FLUSH | BIO_flush(3) | 
| BIO_CTRL_PENDING | BIO_pending(3) | 
| BIO_CTRL_RESET | BIO_reset(3) | 
| BIO_CTRL_WPENDING | BIO_wpending(3) | 
RETURN VALUES
BIO_f_cipher() returns the cipher BIO
    method.
When called on a cipher BIO object,
    BIO_method_type(3)
    returns the constant BIO_TYPE_CIPHER and
    BIO_method_name(3)
    returns a pointer to the static string "cipher".
BIO_set_cipher() returns 1 on success and
    0 on error.
BIO_get_cipher_status() returns 1 for a
    successful decrypt and 0 for failure.
BIO_get_cipher_ctx() currently always
    returns 1.
SEE ALSO
HISTORY
BIO_f_cipher(),
    BIO_set_cipher(), and
    BIO_get_cipher_status() first appeared in SSLeay
    0.6.5 and have been available since OpenBSD 2.4.
BIO_get_cipher_ctx() first appeared in
    SSLeay 0.9.1 and has been available since OpenBSD
    2.6.
| April 29, 2023 | Sortix 1.1.0-dev | 
