BearSSL
Data Structures | Macros | Typedefs | Functions | Variables
bearssl_block.h File Reference
Include dependency graph for bearssl_block.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  br_block_cbcenc_class
 Class type for CBC encryption implementations. More...
 
struct  br_block_cbcdec_class
 Class type for CBC decryption implementations. More...
 
struct  br_block_ctr_class
 Class type for CTR encryption/decryption implementations. More...
 
struct  br_block_ctrcbc_class
 Class type for combined CTR and CBC-MAC implementations. More...
 
struct  br_aes_big_cbcenc_keys
 Context for AES subkeys (aes_big implementation, CBC encryption). More...
 
struct  br_aes_big_cbcdec_keys
 Context for AES subkeys (aes_big implementation, CBC decryption). More...
 
struct  br_aes_big_ctr_keys
 Context for AES subkeys (aes_big implementation, CTR encryption and decryption). More...
 
struct  br_aes_big_ctrcbc_keys
 Context for AES subkeys (aes_big implementation, CTR encryption and decryption + CBC-MAC). More...
 
struct  br_aes_small_cbcenc_keys
 Context for AES subkeys (aes_small implementation, CBC encryption). More...
 
struct  br_aes_small_cbcdec_keys
 Context for AES subkeys (aes_small implementation, CBC decryption). More...
 
struct  br_aes_small_ctr_keys
 Context for AES subkeys (aes_small implementation, CTR encryption and decryption). More...
 
struct  br_aes_small_ctrcbc_keys
 Context for AES subkeys (aes_small implementation, CTR encryption and decryption + CBC-MAC). More...
 
struct  br_aes_ct_cbcenc_keys
 Context for AES subkeys (aes_ct implementation, CBC encryption). More...
 
struct  br_aes_ct_cbcdec_keys
 Context for AES subkeys (aes_ct implementation, CBC decryption). More...
 
struct  br_aes_ct_ctr_keys
 Context for AES subkeys (aes_ct implementation, CTR encryption and decryption). More...
 
struct  br_aes_ct_ctrcbc_keys
 Context for AES subkeys (aes_ct implementation, CTR encryption and decryption + CBC-MAC). More...
 
struct  br_aes_ct64_cbcenc_keys
 Context for AES subkeys (aes_ct64 implementation, CBC encryption). More...
 
struct  br_aes_ct64_cbcdec_keys
 Context for AES subkeys (aes_ct64 implementation, CBC decryption). More...
 
struct  br_aes_ct64_ctr_keys
 Context for AES subkeys (aes_ct64 implementation, CTR encryption and decryption). More...
 
struct  br_aes_ct64_ctrcbc_keys
 Context for AES subkeys (aes_ct64 implementation, CTR encryption and decryption + CBC-MAC). More...
 
struct  br_aes_x86ni_cbcenc_keys
 Context for AES subkeys (aes_x86ni implementation, CBC encryption). More...
 
struct  br_aes_x86ni_cbcdec_keys
 Context for AES subkeys (aes_x86ni implementation, CBC decryption). More...
 
struct  br_aes_x86ni_ctr_keys
 Context for AES subkeys (aes_x86ni implementation, CTR encryption and decryption). More...
 
struct  br_aes_x86ni_ctrcbc_keys
 Context for AES subkeys (aes_x86ni implementation, CTR encryption and decryption + CBC-MAC). More...
 
struct  br_aes_pwr8_cbcenc_keys
 Context for AES subkeys (aes_pwr8 implementation, CBC encryption). More...
 
struct  br_aes_pwr8_cbcdec_keys
 Context for AES subkeys (aes_pwr8 implementation, CBC decryption). More...
 
struct  br_aes_pwr8_ctr_keys
 Context for AES subkeys (aes_pwr8 implementation, CTR encryption and decryption). More...
 
struct  br_aes_pwr8_ctrcbc_keys
 Context for AES subkeys (aes_pwr8 implementation, CTR encryption and decryption + CBC-MAC). More...
 
union  br_aes_gen_cbcenc_keys
 Aggregate structure large enough to be used as context for subkeys (CBC encryption) for all AES implementations. More...
 
union  br_aes_gen_cbcdec_keys
 Aggregate structure large enough to be used as context for subkeys (CBC decryption) for all AES implementations. More...
 
union  br_aes_gen_ctr_keys
 Aggregate structure large enough to be used as context for subkeys (CTR encryption and decryption) for all AES implementations. More...
 
union  br_aes_gen_ctrcbc_keys
 Aggregate structure large enough to be used as context for subkeys (CTR encryption/decryption + CBC-MAC) for all AES implementations. More...
 
struct  br_des_tab_cbcenc_keys
 Context for DES subkeys (des_tab implementation, CBC encryption). More...
 
struct  br_des_tab_cbcdec_keys
 Context for DES subkeys (des_tab implementation, CBC decryption). More...
 
struct  br_des_ct_cbcenc_keys
 Context for DES subkeys (des_ct implementation, CBC encryption). More...
 
struct  br_des_ct_cbcdec_keys
 Context for DES subkeys (des_ct implementation, CBC decryption). More...
 
union  br_des_gen_cbcenc_keys
 Aggregate structure large enough to be used as context for subkeys (CBC encryption) for all DES implementations. More...
 
union  br_des_gen_cbcdec_keys
 Aggregate structure large enough to be used as context for subkeys (CBC decryption) for all DES implementations. More...
 

Macros

#define br_aes_big_BLOCK_SIZE   16
 AES block size (16 bytes). More...
 
#define br_aes_small_BLOCK_SIZE   16
 AES block size (16 bytes). More...
 
#define br_aes_ct_BLOCK_SIZE   16
 AES block size (16 bytes). More...
 
#define br_aes_ct64_BLOCK_SIZE   16
 AES block size (16 bytes). More...
 
#define br_aes_x86ni_BLOCK_SIZE   16
 AES block size (16 bytes). More...
 
#define br_aes_pwr8_BLOCK_SIZE   16
 AES block size (16 bytes). More...
 
#define br_des_tab_BLOCK_SIZE   8
 DES/3DES block size (8 bytes). More...
 
#define br_des_ct_BLOCK_SIZE   8
 DES/3DES block size (8 bytes). More...
 

Typedefs

typedef uint32_t(* br_chacha20_run) (const void *key, const void *iv, uint32_t cc, void *data, size_t len)
 Type for a ChaCha20 implementation. More...
 
typedef void(* br_poly1305_run) (const void *key, const void *iv, void *data, size_t len, const void *aad, size_t aad_len, void *tag, br_chacha20_run ichacha, int encrypt)
 Type for a ChaCha20+Poly1305 AEAD implementation. More...
 

Functions

void br_aes_big_cbcenc_init (br_aes_big_cbcenc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC encryption (aes_big implementation). More...
 
void br_aes_big_cbcdec_init (br_aes_big_cbcdec_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC decryption (aes_big implementation). More...
 
void br_aes_big_ctr_init (br_aes_big_ctr_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR encryption and decryption (aes_big implementation). More...
 
void br_aes_big_ctrcbc_init (br_aes_big_ctrcbc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_big implementation). More...
 
void br_aes_big_cbcenc_run (const br_aes_big_cbcenc_keys *ctx, void *iv, void *data, size_t len)
 CBC encryption with AES (aes_big implementation). More...
 
void br_aes_big_cbcdec_run (const br_aes_big_cbcdec_keys *ctx, void *iv, void *data, size_t len)
 CBC decryption with AES (aes_big implementation). More...
 
uint32_t br_aes_big_ctr_run (const br_aes_big_ctr_keys *ctx, const void *iv, uint32_t cc, void *data, size_t len)
 CTR encryption and decryption with AES (aes_big implementation). More...
 
void br_aes_big_ctrcbc_encrypt (const br_aes_big_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR encryption + CBC-MAC with AES (aes_big implementation). More...
 
void br_aes_big_ctrcbc_decrypt (const br_aes_big_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR decryption + CBC-MAC with AES (aes_big implementation). More...
 
void br_aes_big_ctrcbc_ctr (const br_aes_big_ctrcbc_keys *ctx, void *ctr, void *data, size_t len)
 CTR encryption/decryption with AES (aes_big implementation). More...
 
void br_aes_big_ctrcbc_mac (const br_aes_big_ctrcbc_keys *ctx, void *cbcmac, const void *data, size_t len)
 CBC-MAC with AES (aes_big implementation). More...
 
void br_aes_small_cbcenc_init (br_aes_small_cbcenc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC encryption (aes_small implementation). More...
 
void br_aes_small_cbcdec_init (br_aes_small_cbcdec_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC decryption (aes_small implementation). More...
 
void br_aes_small_ctr_init (br_aes_small_ctr_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR encryption and decryption (aes_small implementation). More...
 
void br_aes_small_ctrcbc_init (br_aes_small_ctrcbc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_small implementation). More...
 
void br_aes_small_cbcenc_run (const br_aes_small_cbcenc_keys *ctx, void *iv, void *data, size_t len)
 CBC encryption with AES (aes_small implementation). More...
 
void br_aes_small_cbcdec_run (const br_aes_small_cbcdec_keys *ctx, void *iv, void *data, size_t len)
 CBC decryption with AES (aes_small implementation). More...
 
uint32_t br_aes_small_ctr_run (const br_aes_small_ctr_keys *ctx, const void *iv, uint32_t cc, void *data, size_t len)
 CTR encryption and decryption with AES (aes_small implementation). More...
 
void br_aes_small_ctrcbc_encrypt (const br_aes_small_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR encryption + CBC-MAC with AES (aes_small implementation). More...
 
void br_aes_small_ctrcbc_decrypt (const br_aes_small_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR decryption + CBC-MAC with AES (aes_small implementation). More...
 
void br_aes_small_ctrcbc_ctr (const br_aes_small_ctrcbc_keys *ctx, void *ctr, void *data, size_t len)
 CTR encryption/decryption with AES (aes_small implementation). More...
 
void br_aes_small_ctrcbc_mac (const br_aes_small_ctrcbc_keys *ctx, void *cbcmac, const void *data, size_t len)
 CBC-MAC with AES (aes_small implementation). More...
 
void br_aes_ct_cbcenc_init (br_aes_ct_cbcenc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC encryption (aes_ct implementation). More...
 
void br_aes_ct_cbcdec_init (br_aes_ct_cbcdec_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC decryption (aes_ct implementation). More...
 
void br_aes_ct_ctr_init (br_aes_ct_ctr_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR encryption and decryption (aes_ct implementation). More...
 
void br_aes_ct_ctrcbc_init (br_aes_ct_ctrcbc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_ct implementation). More...
 
void br_aes_ct_cbcenc_run (const br_aes_ct_cbcenc_keys *ctx, void *iv, void *data, size_t len)
 CBC encryption with AES (aes_ct implementation). More...
 
void br_aes_ct_cbcdec_run (const br_aes_ct_cbcdec_keys *ctx, void *iv, void *data, size_t len)
 CBC decryption with AES (aes_ct implementation). More...
 
uint32_t br_aes_ct_ctr_run (const br_aes_ct_ctr_keys *ctx, const void *iv, uint32_t cc, void *data, size_t len)
 CTR encryption and decryption with AES (aes_ct implementation). More...
 
void br_aes_ct_ctrcbc_encrypt (const br_aes_ct_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR encryption + CBC-MAC with AES (aes_ct implementation). More...
 
void br_aes_ct_ctrcbc_decrypt (const br_aes_ct_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR decryption + CBC-MAC with AES (aes_ct implementation). More...
 
void br_aes_ct_ctrcbc_ctr (const br_aes_ct_ctrcbc_keys *ctx, void *ctr, void *data, size_t len)
 CTR encryption/decryption with AES (aes_ct implementation). More...
 
void br_aes_ct_ctrcbc_mac (const br_aes_ct_ctrcbc_keys *ctx, void *cbcmac, const void *data, size_t len)
 CBC-MAC with AES (aes_ct implementation). More...
 
void br_aes_ct64_cbcenc_init (br_aes_ct64_cbcenc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC encryption (aes_ct64 implementation). More...
 
void br_aes_ct64_cbcdec_init (br_aes_ct64_cbcdec_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC decryption (aes_ct64 implementation). More...
 
void br_aes_ct64_ctr_init (br_aes_ct64_ctr_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR encryption and decryption (aes_ct64 implementation). More...
 
void br_aes_ct64_ctrcbc_init (br_aes_ct64_ctrcbc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_ct64 implementation). More...
 
void br_aes_ct64_cbcenc_run (const br_aes_ct64_cbcenc_keys *ctx, void *iv, void *data, size_t len)
 CBC encryption with AES (aes_ct64 implementation). More...
 
void br_aes_ct64_cbcdec_run (const br_aes_ct64_cbcdec_keys *ctx, void *iv, void *data, size_t len)
 CBC decryption with AES (aes_ct64 implementation). More...
 
uint32_t br_aes_ct64_ctr_run (const br_aes_ct64_ctr_keys *ctx, const void *iv, uint32_t cc, void *data, size_t len)
 CTR encryption and decryption with AES (aes_ct64 implementation). More...
 
void br_aes_ct64_ctrcbc_encrypt (const br_aes_ct64_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR encryption + CBC-MAC with AES (aes_ct64 implementation). More...
 
void br_aes_ct64_ctrcbc_decrypt (const br_aes_ct64_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR decryption + CBC-MAC with AES (aes_ct64 implementation). More...
 
void br_aes_ct64_ctrcbc_ctr (const br_aes_ct64_ctrcbc_keys *ctx, void *ctr, void *data, size_t len)
 CTR encryption/decryption with AES (aes_ct64 implementation). More...
 
void br_aes_ct64_ctrcbc_mac (const br_aes_ct64_ctrcbc_keys *ctx, void *cbcmac, const void *data, size_t len)
 CBC-MAC with AES (aes_ct64 implementation). More...
 
void br_aes_x86ni_cbcenc_init (br_aes_x86ni_cbcenc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC encryption (aes_x86ni implementation). More...
 
void br_aes_x86ni_cbcdec_init (br_aes_x86ni_cbcdec_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC decryption (aes_x86ni implementation). More...
 
void br_aes_x86ni_ctr_init (br_aes_x86ni_ctr_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR encryption and decryption (aes_x86ni implementation). More...
 
void br_aes_x86ni_ctrcbc_init (br_aes_x86ni_ctrcbc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_x86ni implementation). More...
 
void br_aes_x86ni_cbcenc_run (const br_aes_x86ni_cbcenc_keys *ctx, void *iv, void *data, size_t len)
 CBC encryption with AES (aes_x86ni implementation). More...
 
void br_aes_x86ni_cbcdec_run (const br_aes_x86ni_cbcdec_keys *ctx, void *iv, void *data, size_t len)
 CBC decryption with AES (aes_x86ni implementation). More...
 
uint32_t br_aes_x86ni_ctr_run (const br_aes_x86ni_ctr_keys *ctx, const void *iv, uint32_t cc, void *data, size_t len)
 CTR encryption and decryption with AES (aes_x86ni implementation). More...
 
void br_aes_x86ni_ctrcbc_encrypt (const br_aes_x86ni_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR encryption + CBC-MAC with AES (aes_x86ni implementation). More...
 
void br_aes_x86ni_ctrcbc_decrypt (const br_aes_x86ni_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR decryption + CBC-MAC with AES (aes_x86ni implementation). More...
 
void br_aes_x86ni_ctrcbc_ctr (const br_aes_x86ni_ctrcbc_keys *ctx, void *ctr, void *data, size_t len)
 CTR encryption/decryption with AES (aes_x86ni implementation). More...
 
void br_aes_x86ni_ctrcbc_mac (const br_aes_x86ni_ctrcbc_keys *ctx, void *cbcmac, const void *data, size_t len)
 CBC-MAC with AES (aes_x86ni implementation). More...
 
const br_block_cbcenc_class * br_aes_x86ni_cbcenc_get_vtable (void)
 Obtain the aes_x86ni AES-CBC (encryption) implementation, if available. More...
 
const br_block_cbcdec_class * br_aes_x86ni_cbcdec_get_vtable (void)
 Obtain the aes_x86ni AES-CBC (decryption) implementation, if available. More...
 
const br_block_ctr_class * br_aes_x86ni_ctr_get_vtable (void)
 Obtain the aes_x86ni AES-CTR implementation, if available. More...
 
const br_block_ctrcbc_class * br_aes_x86ni_ctrcbc_get_vtable (void)
 Obtain the aes_x86ni AES-CTR + CBC-MAC implementation, if available. More...
 
void br_aes_pwr8_cbcenc_init (br_aes_pwr8_cbcenc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC encryption (aes_pwr8 implementation). More...
 
void br_aes_pwr8_cbcdec_init (br_aes_pwr8_cbcdec_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CBC decryption (aes_pwr8 implementation). More...
 
void br_aes_pwr8_ctr_init (br_aes_pwr8_ctr_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR encryption and decryption (aes_pwr8 implementation). More...
 
void br_aes_pwr8_ctrcbc_init (br_aes_pwr8_ctrcbc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_pwr8 implementation). More...
 
void br_aes_pwr8_cbcenc_run (const br_aes_pwr8_cbcenc_keys *ctx, void *iv, void *data, size_t len)
 CBC encryption with AES (aes_pwr8 implementation). More...
 
void br_aes_pwr8_cbcdec_run (const br_aes_pwr8_cbcdec_keys *ctx, void *iv, void *data, size_t len)
 CBC decryption with AES (aes_pwr8 implementation). More...
 
uint32_t br_aes_pwr8_ctr_run (const br_aes_pwr8_ctr_keys *ctx, const void *iv, uint32_t cc, void *data, size_t len)
 CTR encryption and decryption with AES (aes_pwr8 implementation). More...
 
void br_aes_pwr8_ctrcbc_encrypt (const br_aes_pwr8_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR encryption + CBC-MAC with AES (aes_pwr8 implementation). More...
 
void br_aes_pwr8_ctrcbc_decrypt (const br_aes_pwr8_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)
 CTR decryption + CBC-MAC with AES (aes_pwr8 implementation). More...
 
void br_aes_pwr8_ctrcbc_ctr (const br_aes_pwr8_ctrcbc_keys *ctx, void *ctr, void *data, size_t len)
 CTR encryption/decryption with AES (aes_pwr8 implementation). More...
 
void br_aes_pwr8_ctrcbc_mac (const br_aes_pwr8_ctrcbc_keys *ctx, void *cbcmac, const void *data, size_t len)
 CBC-MAC with AES (aes_pwr8 implementation). More...
 
const br_block_cbcenc_class * br_aes_pwr8_cbcenc_get_vtable (void)
 Obtain the aes_pwr8 AES-CBC (encryption) implementation, if available. More...
 
const br_block_cbcdec_class * br_aes_pwr8_cbcdec_get_vtable (void)
 Obtain the aes_pwr8 AES-CBC (decryption) implementation, if available. More...
 
const br_block_ctr_class * br_aes_pwr8_ctr_get_vtable (void)
 Obtain the aes_pwr8 AES-CTR implementation, if available. More...
 
const br_block_ctrcbc_class * br_aes_pwr8_ctrcbc_get_vtable (void)
 Obtain the aes_pwr8 AES-CTR + CBC-MAC implementation, if available. More...
 
void br_des_tab_cbcenc_init (br_des_tab_cbcenc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for DES CBC encryption (des_tab implementation). More...
 
void br_des_tab_cbcdec_init (br_des_tab_cbcdec_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for DES CBC decryption (des_tab implementation). More...
 
void br_des_tab_cbcenc_run (const br_des_tab_cbcenc_keys *ctx, void *iv, void *data, size_t len)
 CBC encryption with DES (des_tab implementation). More...
 
void br_des_tab_cbcdec_run (const br_des_tab_cbcdec_keys *ctx, void *iv, void *data, size_t len)
 CBC decryption with DES (des_tab implementation). More...
 
void br_des_ct_cbcenc_init (br_des_ct_cbcenc_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for DES CBC encryption (des_ct implementation). More...
 
void br_des_ct_cbcdec_init (br_des_ct_cbcdec_keys *ctx, const void *key, size_t len)
 Context initialisation (key schedule) for DES CBC decryption (des_ct implementation). More...
 
void br_des_ct_cbcenc_run (const br_des_ct_cbcenc_keys *ctx, void *iv, void *data, size_t len)
 CBC encryption with DES (des_ct implementation). More...
 
void br_des_ct_cbcdec_run (const br_des_ct_cbcdec_keys *ctx, void *iv, void *data, size_t len)
 CBC decryption with DES (des_ct implementation). More...
 
uint32_t br_chacha20_ct_run (const void *key, const void *iv, uint32_t cc, void *data, size_t len)
 ChaCha20 implementation (straightforward C code, constant-time). More...
 
uint32_t br_chacha20_sse2_run (const void *key, const void *iv, uint32_t cc, void *data, size_t len)
 ChaCha20 implementation (SSE2 code, constant-time). More...
 
br_chacha20_run br_chacha20_sse2_get (void)
 Obtain the sse2 ChaCha20 implementation, if available. More...
 
void br_poly1305_ctmul_run (const void *key, const void *iv, void *data, size_t len, const void *aad, size_t aad_len, void *tag, br_chacha20_run ichacha, int encrypt)
 ChaCha20+Poly1305 AEAD implementation (mixed 32-bit multiplications). More...
 
void br_poly1305_ctmul32_run (const void *key, const void *iv, void *data, size_t len, const void *aad, size_t aad_len, void *tag, br_chacha20_run ichacha, int encrypt)
 ChaCha20+Poly1305 AEAD implementation (pure 32-bit multiplications). More...
 
void br_poly1305_i15_run (const void *key, const void *iv, void *data, size_t len, const void *aad, size_t aad_len, void *tag, br_chacha20_run ichacha, int encrypt)
 ChaCha20+Poly1305 AEAD implementation (i15). More...
 
void br_poly1305_ctmulq_run (const void *key, const void *iv, void *data, size_t len, const void *aad, size_t aad_len, void *tag, br_chacha20_run ichacha, int encrypt)
 ChaCha20+Poly1305 AEAD implementation (ctmulq). More...
 
br_poly1305_run br_poly1305_ctmulq_get (void)
 Get the ChaCha20+Poly1305 "ctmulq" implementation, if available. More...
 

Variables

const br_block_cbcenc_class br_aes_big_cbcenc_vtable
 Class instance for AES CBC encryption (aes_big implementation). More...
 
const br_block_cbcdec_class br_aes_big_cbcdec_vtable
 Class instance for AES CBC decryption (aes_big implementation). More...
 
const br_block_ctr_class br_aes_big_ctr_vtable
 Class instance for AES CTR encryption and decryption (aes_big implementation). More...
 
const br_block_ctrcbc_class br_aes_big_ctrcbc_vtable
 Class instance for AES CTR encryption/decryption + CBC-MAC (aes_big implementation). More...
 
const br_block_cbcenc_class br_aes_small_cbcenc_vtable
 Class instance for AES CBC encryption (aes_small implementation). More...
 
const br_block_cbcdec_class br_aes_small_cbcdec_vtable
 Class instance for AES CBC decryption (aes_small implementation). More...
 
const br_block_ctr_class br_aes_small_ctr_vtable
 Class instance for AES CTR encryption and decryption (aes_small implementation). More...
 
const br_block_ctrcbc_class br_aes_small_ctrcbc_vtable
 Class instance for AES CTR encryption/decryption + CBC-MAC (aes_small implementation). More...
 
const br_block_cbcenc_class br_aes_ct_cbcenc_vtable
 Class instance for AES CBC encryption (aes_ct implementation). More...
 
const br_block_cbcdec_class br_aes_ct_cbcdec_vtable
 Class instance for AES CBC decryption (aes_ct implementation). More...
 
const br_block_ctr_class br_aes_ct_ctr_vtable
 Class instance for AES CTR encryption and decryption (aes_ct implementation). More...
 
const br_block_ctrcbc_class br_aes_ct_ctrcbc_vtable
 Class instance for AES CTR encryption/decryption + CBC-MAC (aes_ct implementation). More...
 
const br_block_cbcenc_class br_aes_ct64_cbcenc_vtable
 Class instance for AES CBC encryption (aes_ct64 implementation). More...
 
const br_block_cbcdec_class br_aes_ct64_cbcdec_vtable
 Class instance for AES CBC decryption (aes_ct64 implementation). More...
 
const br_block_ctr_class br_aes_ct64_ctr_vtable
 Class instance for AES CTR encryption and decryption (aes_ct64 implementation). More...
 
const br_block_ctrcbc_class br_aes_ct64_ctrcbc_vtable
 Class instance for AES CTR encryption/decryption + CBC-MAC (aes_ct64 implementation). More...
 
const br_block_cbcenc_class br_aes_x86ni_cbcenc_vtable
 Class instance for AES CBC encryption (aes_x86ni implementation). More...
 
const br_block_cbcdec_class br_aes_x86ni_cbcdec_vtable
 Class instance for AES CBC decryption (aes_x86ni implementation). More...
 
const br_block_ctr_class br_aes_x86ni_ctr_vtable
 Class instance for AES CTR encryption and decryption (aes_x86ni implementation). More...
 
const br_block_ctrcbc_class br_aes_x86ni_ctrcbc_vtable
 Class instance for AES CTR encryption/decryption + CBC-MAC (aes_x86ni implementation). More...
 
const br_block_cbcenc_class br_aes_pwr8_cbcenc_vtable
 Class instance for AES CBC encryption (aes_pwr8 implementation). More...
 
const br_block_cbcdec_class br_aes_pwr8_cbcdec_vtable
 Class instance for AES CBC decryption (aes_pwr8 implementation). More...
 
const br_block_ctr_class br_aes_pwr8_ctr_vtable
 Class instance for AES CTR encryption and decryption (aes_pwr8 implementation). More...
 
const br_block_ctrcbc_class br_aes_pwr8_ctrcbc_vtable
 Class instance for AES CTR encryption/decryption + CBC-MAC (aes_pwr8 implementation). More...
 
const br_block_cbcenc_class br_des_tab_cbcenc_vtable
 Class instance for DES CBC encryption (des_tab implementation). More...
 
const br_block_cbcdec_class br_des_tab_cbcdec_vtable
 Class instance for DES CBC decryption (des_tab implementation). More...
 
const br_block_cbcenc_class br_des_ct_cbcenc_vtable
 Class instance for DES CBC encryption (des_ct implementation). More...
 
const br_block_cbcdec_class br_des_ct_cbcdec_vtable
 Class instance for DES CBC decryption (des_ct implementation). More...
 

Detailed Description

Block Ciphers and Symmetric Ciphers

This file documents the API for block ciphers and other symmetric ciphers.

Procedural API

For a block cipher implementation, up to three separate sets of functions are provided, for CBC encryption, CBC decryption, and CTR encryption/decryption. Each set has its own context structure, initialised with the encryption key.

For CBC encryption and decryption, the data to encrypt or decrypt is referenced as a sequence of blocks. The implementations assume that there is no partial block; no padding is applied or removed. The caller is responsible for handling any kind of padding.

Function for CTR encryption are defined only for block ciphers with blocks of 16 bytes or more (i.e. AES, but not DES/3DES).

Each implemented block cipher is identified by an "internal name" from which are derived the names of structures and functions that implement the cipher. For the block cipher of internal name "`xxx`", the following are defined:

It shall be noted that the key expansion functions return void. If the provided key length is not allowed, then there will be no error reporting; implementations need not validate the key length, thus an invalid key length may result in undefined behaviour (e.g. buffer overflow).

Subkey structures contain no interior pointer, and no external resources are allocated upon key expansion. They can thus be discarded without any explicit deallocation.

Object-Oriented API

Each context structure begins with a field (called vtable) that points to an instance of a structure that references the relevant functions through pointers. Each such structure contains the following:

For combined CTR/CBC-MAC encryption, the vtable has a slightly different structure:

For block cipher "`xxx`", static, constant instances of these structures are defined, under the names:

Implemented Block Ciphers

Provided implementations are:

Name Function Block Size (bytes) Key lengths (bytes)
aes_big AES 16 16, 24 and 32
aes_small AES 16 16, 24 and 32
aes_ct AES 16 16, 24 and 32
aes_ct64 AES 16 16, 24 and 32
aes_x86ni AES 16 16, 24 and 32
aes_pwr8 AES 16 16, 24 and 32
des_ct DES/3DES 8 8, 16 and 24
des_tab DES/3DES 8 8, 16 and 24

Note: DES/3DES nominally uses keys of 64, 128 and 192 bits (i.e. 8, 16 and 24 bytes), but some of the bits are ignored by the algorithm, so the effective key lengths, from a security point of view, are 56, 112 and 168 bits, respectively.

aes_big is a "classical" AES implementation, using tables. It is fast but not constant-time, since it makes data-dependent array accesses.

aes_small is an AES implementation optimized for code size. It is substantially slower than aes_big; it is not constant-time either.

aes_ct is a constant-time implementation of AES; its code is about as big as that of aes_big, while its performance is comparable to that of aes_small. However, it is constant-time. This implementation should thus be considered to be the "default" AES in BearSSL, to be used unless the operational context guarantees that a non-constant-time implementation is safe, or an architecture-specific constant-time implementation can be used (e.g. using dedicated hardware opcodes).

aes_ct64 is another constant-time implementation of AES. It is similar to aes_ct but uses 64-bit values. On 32-bit machines, aes_ct64 is not faster than aes_ct, often a bit slower, and has a larger footprint; however, on 64-bit architectures, aes_ct64 is typically twice faster than aes_ct for modes that allow parallel operations (i.e. CTR, and CBC decryption, but not CBC encryption).

aes_x86ni exists only on x86 architectures (32-bit and 64-bit). It uses the AES-NI opcodes when available.

aes_pwr8 exists only on PowerPC / POWER architectures (32-bit and 64-bit, both little-endian and big-endian). It uses the AES opcodes present in POWER8 and later.

des_tab is a classic, table-based implementation of DES/3DES. It is not constant-time.

des_ct is an constant-time implementation of DES/3DES. It is substantially slower than des_tab.

ChaCha20 and Poly1305

ChaCha20 is a stream cipher. Poly1305 is a MAC algorithm. They are described in RFC 7539.

Two function pointer types are defined:

chacha20_ct is a straightforward implementation of ChaCha20 in plain C; it is constant-time, small, and reasonably fast.

chacha20_sse2 leverages SSE2 opcodes (on x86 architectures that support these opcodes). It is faster than chacha20_ct.

poly1305_ctmul is an implementation of the ChaCha20+Poly1305 AEAD construction, where the Poly1305 part is performed with mixed 32-bit multiplications (operands are 32-bit, result is 64-bit).

poly1305_ctmul32 implements ChaCha20+Poly1305 using pure 32-bit multiplications (32-bit operands, 32-bit result). It is slower than poly1305_ctmul, except on some specific architectures such as the ARM Cortex M0+.

poly1305_ctmulq implements ChaCha20+Poly1305 with mixed 64-bit multiplications (operands are 64-bit, result is 128-bit) on 64-bit platforms that support such operations.

poly1305_i15 implements ChaCha20+Poly1305 with the generic "i15" big integer implementation. It is meant mostly for testing purposes, although it can help with saving a few hundred bytes of code footprint on systems where code size is scarce.

Macro Definition Documentation

◆ br_aes_big_BLOCK_SIZE

#define br_aes_big_BLOCK_SIZE   16

AES block size (16 bytes).

◆ br_aes_ct64_BLOCK_SIZE

#define br_aes_ct64_BLOCK_SIZE   16

AES block size (16 bytes).

◆ br_aes_ct_BLOCK_SIZE

#define br_aes_ct_BLOCK_SIZE   16

AES block size (16 bytes).

◆ br_aes_pwr8_BLOCK_SIZE

#define br_aes_pwr8_BLOCK_SIZE   16

AES block size (16 bytes).

◆ br_aes_small_BLOCK_SIZE

#define br_aes_small_BLOCK_SIZE   16

AES block size (16 bytes).

◆ br_aes_x86ni_BLOCK_SIZE

#define br_aes_x86ni_BLOCK_SIZE   16

AES block size (16 bytes).

◆ br_des_ct_BLOCK_SIZE

#define br_des_ct_BLOCK_SIZE   8

DES/3DES block size (8 bytes).

◆ br_des_tab_BLOCK_SIZE

#define br_des_tab_BLOCK_SIZE   8

DES/3DES block size (8 bytes).

Typedef Documentation

◆ br_chacha20_run

typedef uint32_t(* br_chacha20_run) (const void *key, const void *iv, uint32_t cc, void *data, size_t len)

Type for a ChaCha20 implementation.

An implementation follows the description in RFC 7539:

  • Key is 256 bits (key points to exactly 32 bytes).
  • IV is 96 bits (iv points to exactly 12 bytes).
  • Block counter is over 32 bits and starts at value cc; the resulting value is returned.

Data (pointed to by data, of length len) is encrypted/decrypted in place. If len is not a multiple of 64, then the excess bytes from the last block processing are dropped (therefore, "chunked" processing works only as long as each non-final chunk has a length multiple of 64).

Parameters
keysecret key (32 bytes).
ivIV (12 bytes).
ccinitial counter value.
datadata to encrypt or decrypt.
lendata length (in bytes).

◆ br_poly1305_run

typedef void(* br_poly1305_run) (const void *key, const void *iv, void *data, size_t len, const void *aad, size_t aad_len, void *tag, br_chacha20_run ichacha, int encrypt)

Type for a ChaCha20+Poly1305 AEAD implementation.

The provided data is encrypted or decrypted with ChaCha20. The authentication tag is computed on the concatenation of the additional data and the ciphertext, with the padding and lengths as described in RFC 7539 (section 2.8).

After decryption, the caller is responsible for checking that the computed tag matches the expected value.

Parameters
keysecret key (32 bytes).
ivnonce (12 bytes).
datadata to encrypt or decrypt.
lendata length (in bytes).
aadadditional authenticated data.
aad_lenlength of additional authenticated data (in bytes).
tagoutput buffer for the authentication tag.
ichachaimplementation of ChaCha20.
encryptnon-zero for encryption, zero for decryption.

Function Documentation

◆ br_aes_big_cbcdec_init()

void br_aes_big_cbcdec_init ( br_aes_big_cbcdec_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC decryption (aes_big implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_big_cbcdec_run()

void br_aes_big_cbcdec_run ( const br_aes_big_cbcdec_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC decryption with AES (aes_big implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_big_cbcenc_init()

void br_aes_big_cbcenc_init ( br_aes_big_cbcenc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC encryption (aes_big implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_big_cbcenc_run()

void br_aes_big_cbcenc_run ( const br_aes_big_cbcenc_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC encryption with AES (aes_big implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_big_ctr_init()

void br_aes_big_ctr_init ( br_aes_big_ctr_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR encryption and decryption (aes_big implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_big_ctr_run()

uint32_t br_aes_big_ctr_run ( const br_aes_big_ctr_keys ctx,
const void *  iv,
uint32_t  cc,
void *  data,
size_t  len 
)

CTR encryption and decryption with AES (aes_big implementation).

Parameters
ctxcontext (already initialised).
ivIV (constant, 12 bytes).
ccinitial block counter value.
datadata to encrypt or decrypt (updated).
lendata length (in bytes).
Returns
new block counter value.

◆ br_aes_big_ctrcbc_ctr()

void br_aes_big_ctrcbc_ctr ( const br_aes_big_ctrcbc_keys ctx,
void *  ctr,
void *  data,
size_t  len 
)

CTR encryption/decryption with AES (aes_big implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
datadata to MAC (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_big_ctrcbc_decrypt()

void br_aes_big_ctrcbc_decrypt ( const br_aes_big_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR decryption + CBC-MAC with AES (aes_big implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_big_ctrcbc_encrypt()

void br_aes_big_ctrcbc_encrypt ( const br_aes_big_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR encryption + CBC-MAC with AES (aes_big implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_big_ctrcbc_init()

void br_aes_big_ctrcbc_init ( br_aes_big_ctrcbc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_big implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_big_ctrcbc_mac()

void br_aes_big_ctrcbc_mac ( const br_aes_big_ctrcbc_keys ctx,
void *  cbcmac,
const void *  data,
size_t  len 
)

CBC-MAC with AES (aes_big implementation).

Parameters
ctxcontext (already initialised).
cbcmacIV for CBC-MAC (updated).
datadata to MAC (unmodified).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_ct64_cbcdec_init()

void br_aes_ct64_cbcdec_init ( br_aes_ct64_cbcdec_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC decryption (aes_ct64 implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_ct64_cbcdec_run()

void br_aes_ct64_cbcdec_run ( const br_aes_ct64_cbcdec_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC decryption with AES (aes_ct64 implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_ct64_cbcenc_init()

void br_aes_ct64_cbcenc_init ( br_aes_ct64_cbcenc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC encryption (aes_ct64 implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_ct64_cbcenc_run()

void br_aes_ct64_cbcenc_run ( const br_aes_ct64_cbcenc_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC encryption with AES (aes_ct64 implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_ct64_ctr_init()

void br_aes_ct64_ctr_init ( br_aes_ct64_ctr_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR encryption and decryption (aes_ct64 implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_ct64_ctr_run()

uint32_t br_aes_ct64_ctr_run ( const br_aes_ct64_ctr_keys ctx,
const void *  iv,
uint32_t  cc,
void *  data,
size_t  len 
)

CTR encryption and decryption with AES (aes_ct64 implementation).

Parameters
ctxcontext (already initialised).
ivIV (constant, 12 bytes).
ccinitial block counter value.
datadata to decrypt (updated).
lendata length (in bytes).
Returns
new block counter value.

◆ br_aes_ct64_ctrcbc_ctr()

void br_aes_ct64_ctrcbc_ctr ( const br_aes_ct64_ctrcbc_keys ctx,
void *  ctr,
void *  data,
size_t  len 
)

CTR encryption/decryption with AES (aes_ct64 implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
datadata to MAC (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_ct64_ctrcbc_decrypt()

void br_aes_ct64_ctrcbc_decrypt ( const br_aes_ct64_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR decryption + CBC-MAC with AES (aes_ct64 implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_ct64_ctrcbc_encrypt()

void br_aes_ct64_ctrcbc_encrypt ( const br_aes_ct64_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR encryption + CBC-MAC with AES (aes_ct64 implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_ct64_ctrcbc_init()

void br_aes_ct64_ctrcbc_init ( br_aes_ct64_ctrcbc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_ct64 implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_ct64_ctrcbc_mac()

void br_aes_ct64_ctrcbc_mac ( const br_aes_ct64_ctrcbc_keys ctx,
void *  cbcmac,
const void *  data,
size_t  len 
)

CBC-MAC with AES (aes_ct64 implementation).

Parameters
ctxcontext (already initialised).
cbcmacIV for CBC-MAC (updated).
datadata to MAC (unmodified).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_ct_cbcdec_init()

void br_aes_ct_cbcdec_init ( br_aes_ct_cbcdec_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC decryption (aes_ct implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_ct_cbcdec_run()

void br_aes_ct_cbcdec_run ( const br_aes_ct_cbcdec_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC decryption with AES (aes_ct implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_ct_cbcenc_init()

void br_aes_ct_cbcenc_init ( br_aes_ct_cbcenc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC encryption (aes_ct implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_ct_cbcenc_run()

void br_aes_ct_cbcenc_run ( const br_aes_ct_cbcenc_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC encryption with AES (aes_ct implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_ct_ctr_init()

void br_aes_ct_ctr_init ( br_aes_ct_ctr_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR encryption and decryption (aes_ct implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_ct_ctr_run()

uint32_t br_aes_ct_ctr_run ( const br_aes_ct_ctr_keys ctx,
const void *  iv,
uint32_t  cc,
void *  data,
size_t  len 
)

CTR encryption and decryption with AES (aes_ct implementation).

Parameters
ctxcontext (already initialised).
ivIV (constant, 12 bytes).
ccinitial block counter value.
datadata to decrypt (updated).
lendata length (in bytes).
Returns
new block counter value.

◆ br_aes_ct_ctrcbc_ctr()

void br_aes_ct_ctrcbc_ctr ( const br_aes_ct_ctrcbc_keys ctx,
void *  ctr,
void *  data,
size_t  len 
)

CTR encryption/decryption with AES (aes_ct implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
datadata to MAC (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_ct_ctrcbc_decrypt()

void br_aes_ct_ctrcbc_decrypt ( const br_aes_ct_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR decryption + CBC-MAC with AES (aes_ct implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_ct_ctrcbc_encrypt()

void br_aes_ct_ctrcbc_encrypt ( const br_aes_ct_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR encryption + CBC-MAC with AES (aes_ct implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_ct_ctrcbc_init()

void br_aes_ct_ctrcbc_init ( br_aes_ct_ctrcbc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_ct implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_ct_ctrcbc_mac()

void br_aes_ct_ctrcbc_mac ( const br_aes_ct_ctrcbc_keys ctx,
void *  cbcmac,
const void *  data,
size_t  len 
)

CBC-MAC with AES (aes_ct implementation).

Parameters
ctxcontext (already initialised).
cbcmacIV for CBC-MAC (updated).
datadata to MAC (unmodified).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_pwr8_cbcdec_get_vtable()

const br_block_cbcdec_class* br_aes_pwr8_cbcdec_get_vtable ( void  )

Obtain the aes_pwr8 AES-CBC (decryption) implementation, if available.

This function returns a pointer to br_aes_pwr8_cbcdec_vtable, if that implementation was compiled in the library and the POWER8 crypto opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns NULL.

Returns
the aes_pwr8 AES-CBC (decryption) implementation, or NULL.

◆ br_aes_pwr8_cbcdec_init()

void br_aes_pwr8_cbcdec_init ( br_aes_pwr8_cbcdec_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC decryption (aes_pwr8 implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_pwr8_cbcdec_run()

void br_aes_pwr8_cbcdec_run ( const br_aes_pwr8_cbcdec_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC decryption with AES (aes_pwr8 implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_pwr8_cbcenc_get_vtable()

const br_block_cbcenc_class* br_aes_pwr8_cbcenc_get_vtable ( void  )

Obtain the aes_pwr8 AES-CBC (encryption) implementation, if available.

This function returns a pointer to br_aes_pwr8_cbcenc_vtable, if that implementation was compiled in the library and the POWER8 crypto opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns NULL.

Returns
the aes_pwr8 AES-CBC (encryption) implementation, or NULL.

◆ br_aes_pwr8_cbcenc_init()

void br_aes_pwr8_cbcenc_init ( br_aes_pwr8_cbcenc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC encryption (aes_pwr8 implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_pwr8_cbcenc_run()

void br_aes_pwr8_cbcenc_run ( const br_aes_pwr8_cbcenc_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC encryption with AES (aes_pwr8 implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_pwr8_ctr_get_vtable()

const br_block_ctr_class* br_aes_pwr8_ctr_get_vtable ( void  )

Obtain the aes_pwr8 AES-CTR implementation, if available.

This function returns a pointer to br_aes_pwr8_ctr_vtable, if that implementation was compiled in the library and the POWER8 crypto opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns NULL.

Returns
the aes_pwr8 AES-CTR implementation, or NULL.

◆ br_aes_pwr8_ctr_init()

void br_aes_pwr8_ctr_init ( br_aes_pwr8_ctr_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR encryption and decryption (aes_pwr8 implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_pwr8_ctr_run()

uint32_t br_aes_pwr8_ctr_run ( const br_aes_pwr8_ctr_keys ctx,
const void *  iv,
uint32_t  cc,
void *  data,
size_t  len 
)

CTR encryption and decryption with AES (aes_pwr8 implementation).

Parameters
ctxcontext (already initialised).
ivIV (constant, 12 bytes).
ccinitial block counter value.
datadata to decrypt (updated).
lendata length (in bytes).
Returns
new block counter value.

◆ br_aes_pwr8_ctrcbc_ctr()

void br_aes_pwr8_ctrcbc_ctr ( const br_aes_pwr8_ctrcbc_keys ctx,
void *  ctr,
void *  data,
size_t  len 
)

CTR encryption/decryption with AES (aes_pwr8 implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
datadata to MAC (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_pwr8_ctrcbc_decrypt()

void br_aes_pwr8_ctrcbc_decrypt ( const br_aes_pwr8_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR decryption + CBC-MAC with AES (aes_pwr8 implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_pwr8_ctrcbc_encrypt()

void br_aes_pwr8_ctrcbc_encrypt ( const br_aes_pwr8_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR encryption + CBC-MAC with AES (aes_pwr8 implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_pwr8_ctrcbc_get_vtable()

const br_block_ctrcbc_class* br_aes_pwr8_ctrcbc_get_vtable ( void  )

Obtain the aes_pwr8 AES-CTR + CBC-MAC implementation, if available.

This function returns a pointer to br_aes_pwr8_ctrcbc_vtable, if that implementation was compiled in the library and the POWER8 AES opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns NULL.

Returns
the aes_pwr8 AES-CTR implementation, or NULL.

◆ br_aes_pwr8_ctrcbc_init()

void br_aes_pwr8_ctrcbc_init ( br_aes_pwr8_ctrcbc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_pwr8 implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_pwr8_ctrcbc_mac()

void br_aes_pwr8_ctrcbc_mac ( const br_aes_pwr8_ctrcbc_keys ctx,
void *  cbcmac,
const void *  data,
size_t  len 
)

CBC-MAC with AES (aes_pwr8 implementation).

Parameters
ctxcontext (already initialised).
cbcmacIV for CBC-MAC (updated).
datadata to MAC (unmodified).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_small_cbcdec_init()

void br_aes_small_cbcdec_init ( br_aes_small_cbcdec_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC decryption (aes_small implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_small_cbcdec_run()

void br_aes_small_cbcdec_run ( const br_aes_small_cbcdec_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC decryption with AES (aes_small implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_small_cbcenc_init()

void br_aes_small_cbcenc_init ( br_aes_small_cbcenc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC encryption (aes_small implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_small_cbcenc_run()

void br_aes_small_cbcenc_run ( const br_aes_small_cbcenc_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC encryption with AES (aes_small implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_small_ctr_init()

void br_aes_small_ctr_init ( br_aes_small_ctr_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR encryption and decryption (aes_small implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_small_ctr_run()

uint32_t br_aes_small_ctr_run ( const br_aes_small_ctr_keys ctx,
const void *  iv,
uint32_t  cc,
void *  data,
size_t  len 
)

CTR encryption and decryption with AES (aes_small implementation).

Parameters
ctxcontext (already initialised).
ivIV (constant, 12 bytes).
ccinitial block counter value.
datadata to decrypt (updated).
lendata length (in bytes).
Returns
new block counter value.

◆ br_aes_small_ctrcbc_ctr()

void br_aes_small_ctrcbc_ctr ( const br_aes_small_ctrcbc_keys ctx,
void *  ctr,
void *  data,
size_t  len 
)

CTR encryption/decryption with AES (aes_small implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
datadata to MAC (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_small_ctrcbc_decrypt()

void br_aes_small_ctrcbc_decrypt ( const br_aes_small_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR decryption + CBC-MAC with AES (aes_small implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_small_ctrcbc_encrypt()

void br_aes_small_ctrcbc_encrypt ( const br_aes_small_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR encryption + CBC-MAC with AES (aes_small implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_small_ctrcbc_init()

void br_aes_small_ctrcbc_init ( br_aes_small_ctrcbc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_small implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_small_ctrcbc_mac()

void br_aes_small_ctrcbc_mac ( const br_aes_small_ctrcbc_keys ctx,
void *  cbcmac,
const void *  data,
size_t  len 
)

CBC-MAC with AES (aes_small implementation).

Parameters
ctxcontext (already initialised).
cbcmacIV for CBC-MAC (updated).
datadata to MAC (unmodified).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_x86ni_cbcdec_get_vtable()

const br_block_cbcdec_class* br_aes_x86ni_cbcdec_get_vtable ( void  )

Obtain the aes_x86ni AES-CBC (decryption) implementation, if available.

This function returns a pointer to br_aes_x86ni_cbcdec_vtable, if that implementation was compiled in the library and the x86 AES opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns NULL.

Returns
the aes_x86ni AES-CBC (decryption) implementation, or NULL.

◆ br_aes_x86ni_cbcdec_init()

void br_aes_x86ni_cbcdec_init ( br_aes_x86ni_cbcdec_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC decryption (aes_x86ni implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_x86ni_cbcdec_run()

void br_aes_x86ni_cbcdec_run ( const br_aes_x86ni_cbcdec_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC decryption with AES (aes_x86ni implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_x86ni_cbcenc_get_vtable()

const br_block_cbcenc_class* br_aes_x86ni_cbcenc_get_vtable ( void  )

Obtain the aes_x86ni AES-CBC (encryption) implementation, if available.

This function returns a pointer to br_aes_x86ni_cbcenc_vtable, if that implementation was compiled in the library and the x86 AES opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns NULL.

Returns
the aes_x86ni AES-CBC (encryption) implementation, or NULL.

◆ br_aes_x86ni_cbcenc_init()

void br_aes_x86ni_cbcenc_init ( br_aes_x86ni_cbcenc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CBC encryption (aes_x86ni implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_x86ni_cbcenc_run()

void br_aes_x86ni_cbcenc_run ( const br_aes_x86ni_cbcenc_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC encryption with AES (aes_x86ni implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be multiple of 16).

◆ br_aes_x86ni_ctr_get_vtable()

const br_block_ctr_class* br_aes_x86ni_ctr_get_vtable ( void  )

Obtain the aes_x86ni AES-CTR implementation, if available.

This function returns a pointer to br_aes_x86ni_ctr_vtable, if that implementation was compiled in the library and the x86 AES opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns NULL.

Returns
the aes_x86ni AES-CTR implementation, or NULL.

◆ br_aes_x86ni_ctr_init()

void br_aes_x86ni_ctr_init ( br_aes_x86ni_ctr_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR encryption and decryption (aes_x86ni implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_x86ni_ctr_run()

uint32_t br_aes_x86ni_ctr_run ( const br_aes_x86ni_ctr_keys ctx,
const void *  iv,
uint32_t  cc,
void *  data,
size_t  len 
)

CTR encryption and decryption with AES (aes_x86ni implementation).

Parameters
ctxcontext (already initialised).
ivIV (constant, 12 bytes).
ccinitial block counter value.
datadata to decrypt (updated).
lendata length (in bytes).
Returns
new block counter value.

◆ br_aes_x86ni_ctrcbc_ctr()

void br_aes_x86ni_ctrcbc_ctr ( const br_aes_x86ni_ctrcbc_keys ctx,
void *  ctr,
void *  data,
size_t  len 
)

CTR encryption/decryption with AES (aes_x86ni implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
datadata to MAC (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_x86ni_ctrcbc_decrypt()

void br_aes_x86ni_ctrcbc_decrypt ( const br_aes_x86ni_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR decryption + CBC-MAC with AES (aes_x86ni implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_x86ni_ctrcbc_encrypt()

void br_aes_x86ni_ctrcbc_encrypt ( const br_aes_x86ni_ctrcbc_keys ctx,
void *  ctr,
void *  cbcmac,
void *  data,
size_t  len 
)

CTR encryption + CBC-MAC with AES (aes_x86ni implementation).

Parameters
ctxcontext (already initialised).
ctrcounter for CTR (16 bytes, updated).
cbcmacIV for CBC-MAC (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_aes_x86ni_ctrcbc_get_vtable()

const br_block_ctrcbc_class* br_aes_x86ni_ctrcbc_get_vtable ( void  )

Obtain the aes_x86ni AES-CTR + CBC-MAC implementation, if available.

This function returns a pointer to br_aes_x86ni_ctrcbc_vtable, if that implementation was compiled in the library and the x86 AES opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns NULL.

Returns
the aes_x86ni AES-CTR implementation, or NULL.

◆ br_aes_x86ni_ctrcbc_init()

void br_aes_x86ni_ctrcbc_init ( br_aes_x86ni_ctrcbc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for AES CTR + CBC-MAC (aes_x86ni implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_aes_x86ni_ctrcbc_mac()

void br_aes_x86ni_ctrcbc_mac ( const br_aes_x86ni_ctrcbc_keys ctx,
void *  cbcmac,
const void *  data,
size_t  len 
)

CBC-MAC with AES (aes_x86ni implementation).

Parameters
ctxcontext (already initialised).
cbcmacIV for CBC-MAC (updated).
datadata to MAC (unmodified).
lendata length (in bytes, MUST be a multiple of 16).

◆ br_chacha20_ct_run()

uint32_t br_chacha20_ct_run ( const void *  key,
const void *  iv,
uint32_t  cc,
void *  data,
size_t  len 
)

ChaCha20 implementation (straightforward C code, constant-time).

See also
br_chacha20_run
Parameters
keysecret key (32 bytes).
ivIV (12 bytes).
ccinitial counter value.
datadata to encrypt or decrypt.
lendata length (in bytes).

◆ br_chacha20_sse2_get()

br_chacha20_run br_chacha20_sse2_get ( void  )

Obtain the sse2 ChaCha20 implementation, if available.

This function returns a pointer to br_chacha20_sse2_run, if that implementation was compiled in the library and the SSE2 opcodes are available on the currently running CPU. If either of these conditions is not met, then this function returns 0.

Returns
the sse2 ChaCha20 implementation, or 0.

◆ br_chacha20_sse2_run()

uint32_t br_chacha20_sse2_run ( const void *  key,
const void *  iv,
uint32_t  cc,
void *  data,
size_t  len 
)

ChaCha20 implementation (SSE2 code, constant-time).

This implementation is available only on x86 platforms, depending on compiler support. Moreover, in 32-bit mode, it might not actually run, if the underlying hardware does not implement the SSE2 opcode (in 64-bit mode, SSE2 is part of the ABI, so if the code could be compiled at all, then it can run). Use br_chacha20_sse2_get() to safely obtain a pointer to that function.

See also
br_chacha20_run
Parameters
keysecret key (32 bytes).
ivIV (12 bytes).
ccinitial counter value.
datadata to encrypt or decrypt.
lendata length (in bytes).

◆ br_des_ct_cbcdec_init()

void br_des_ct_cbcdec_init ( br_des_ct_cbcdec_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for DES CBC decryption (des_ct implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_des_ct_cbcdec_run()

void br_des_ct_cbcdec_run ( const br_des_ct_cbcdec_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC decryption with DES (des_ct implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be multiple of 8).

◆ br_des_ct_cbcenc_init()

void br_des_ct_cbcenc_init ( br_des_ct_cbcenc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for DES CBC encryption (des_ct implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_des_ct_cbcenc_run()

void br_des_ct_cbcenc_run ( const br_des_ct_cbcenc_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC encryption with DES (des_ct implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be multiple of 8).

◆ br_des_tab_cbcdec_init()

void br_des_tab_cbcdec_init ( br_des_tab_cbcdec_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for DES CBC decryption (des_tab implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_des_tab_cbcdec_run()

void br_des_tab_cbcdec_run ( const br_des_tab_cbcdec_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC decryption with DES (des_tab implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to decrypt (updated).
lendata length (in bytes, MUST be multiple of 8).

◆ br_des_tab_cbcenc_init()

void br_des_tab_cbcenc_init ( br_des_tab_cbcenc_keys ctx,
const void *  key,
size_t  len 
)

Context initialisation (key schedule) for DES CBC encryption (des_tab implementation).

Parameters
ctxcontext to initialise.
keysecret key.
lensecret key length (in bytes).

◆ br_des_tab_cbcenc_run()

void br_des_tab_cbcenc_run ( const br_des_tab_cbcenc_keys ctx,
void *  iv,
void *  data,
size_t  len 
)

CBC encryption with DES (des_tab implementation).

Parameters
ctxcontext (already initialised).
ivIV (updated).
datadata to encrypt (updated).
lendata length (in bytes, MUST be multiple of 8).

◆ br_poly1305_ctmul32_run()

void br_poly1305_ctmul32_run ( const void *  key,
const void *  iv,
void *  data,
size_t  len,
const void *  aad,
size_t  aad_len,
void *  tag,
br_chacha20_run  ichacha,
int  encrypt 
)

ChaCha20+Poly1305 AEAD implementation (pure 32-bit multiplications).

See also
br_poly1305_run
Parameters
keysecret key (32 bytes).
ivnonce (12 bytes).
datadata to encrypt or decrypt.
lendata length (in bytes).
aadadditional authenticated data.
aad_lenlength of additional authenticated data (in bytes).
tagoutput buffer for the authentication tag.
ichachaimplementation of ChaCha20.
encryptnon-zero for encryption, zero for decryption.

◆ br_poly1305_ctmul_run()

void br_poly1305_ctmul_run ( const void *  key,
const void *  iv,
void *  data,
size_t  len,
const void *  aad,
size_t  aad_len,
void *  tag,
br_chacha20_run  ichacha,
int  encrypt 
)

ChaCha20+Poly1305 AEAD implementation (mixed 32-bit multiplications).

See also
br_poly1305_run
Parameters
keysecret key (32 bytes).
ivnonce (12 bytes).
datadata to encrypt or decrypt.
lendata length (in bytes).
aadadditional authenticated data.
aad_lenlength of additional authenticated data (in bytes).
tagoutput buffer for the authentication tag.
ichachaimplementation of ChaCha20.
encryptnon-zero for encryption, zero for decryption.

◆ br_poly1305_ctmulq_get()

br_poly1305_run br_poly1305_ctmulq_get ( void  )

Get the ChaCha20+Poly1305 "ctmulq" implementation, if available.

This function returns a pointer to the br_poly1305_ctmulq_run() function if supported on the current platform; otherwise, it returns 0.

Returns
the ctmulq ChaCha20+Poly1305 implementation, or 0.

◆ br_poly1305_ctmulq_run()

void br_poly1305_ctmulq_run ( const void *  key,
const void *  iv,
void *  data,
size_t  len,
const void *  aad,
size_t  aad_len,
void *  tag,
br_chacha20_run  ichacha,
int  encrypt 
)

ChaCha20+Poly1305 AEAD implementation (ctmulq).

This implementation uses 64-bit multiplications (result over 128 bits). It is available only on platforms that offer such a primitive (in practice, 64-bit architectures). Use br_poly1305_ctmulq_get() to dynamically obtain a pointer to that function, or 0 if not supported.

See also
br_poly1305_run
Parameters
keysecret key (32 bytes).
ivnonce (12 bytes).
datadata to encrypt or decrypt.
lendata length (in bytes).
aadadditional authenticated data.
aad_lenlength of additional authenticated data (in bytes).
tagoutput buffer for the authentication tag.
ichachaimplementation of ChaCha20.
encryptnon-zero for encryption, zero for decryption.

◆ br_poly1305_i15_run()

void br_poly1305_i15_run ( const void *  key,
const void *  iv,
void *  data,
size_t  len,
const void *  aad,
size_t  aad_len,
void *  tag,
br_chacha20_run  ichacha,
int  encrypt 
)

ChaCha20+Poly1305 AEAD implementation (i15).

This implementation relies on the generic big integer code "i15" (which uses pure 32-bit multiplications). As such, it may save a little code footprint in a context where "i15" is already included (e.g. for elliptic curves or for RSA); however, it is also substantially slower than the ctmul and ctmul32 implementations.

See also
br_poly1305_run
Parameters
keysecret key (32 bytes).
ivnonce (12 bytes).
datadata to encrypt or decrypt.
lendata length (in bytes).
aadadditional authenticated data.
aad_lenlength of additional authenticated data (in bytes).
tagoutput buffer for the authentication tag.
ichachaimplementation of ChaCha20.
encryptnon-zero for encryption, zero for decryption.

Variable Documentation

◆ br_aes_big_cbcdec_vtable

const br_block_cbcdec_class br_aes_big_cbcdec_vtable

Class instance for AES CBC decryption (aes_big implementation).

◆ br_aes_big_cbcenc_vtable

const br_block_cbcenc_class br_aes_big_cbcenc_vtable

Class instance for AES CBC encryption (aes_big implementation).

◆ br_aes_big_ctr_vtable

const br_block_ctr_class br_aes_big_ctr_vtable

Class instance for AES CTR encryption and decryption (aes_big implementation).

◆ br_aes_big_ctrcbc_vtable

const br_block_ctrcbc_class br_aes_big_ctrcbc_vtable

Class instance for AES CTR encryption/decryption + CBC-MAC (aes_big implementation).

◆ br_aes_ct64_cbcdec_vtable

const br_block_cbcdec_class br_aes_ct64_cbcdec_vtable

Class instance for AES CBC decryption (aes_ct64 implementation).

◆ br_aes_ct64_cbcenc_vtable

const br_block_cbcenc_class br_aes_ct64_cbcenc_vtable

Class instance for AES CBC encryption (aes_ct64 implementation).

◆ br_aes_ct64_ctr_vtable

const br_block_ctr_class br_aes_ct64_ctr_vtable

Class instance for AES CTR encryption and decryption (aes_ct64 implementation).

◆ br_aes_ct64_ctrcbc_vtable

const br_block_ctrcbc_class br_aes_ct64_ctrcbc_vtable

Class instance for AES CTR encryption/decryption + CBC-MAC (aes_ct64 implementation).

◆ br_aes_ct_cbcdec_vtable

const br_block_cbcdec_class br_aes_ct_cbcdec_vtable

Class instance for AES CBC decryption (aes_ct implementation).

◆ br_aes_ct_cbcenc_vtable

const br_block_cbcenc_class br_aes_ct_cbcenc_vtable

Class instance for AES CBC encryption (aes_ct implementation).

◆ br_aes_ct_ctr_vtable

const br_block_ctr_class br_aes_ct_ctr_vtable

Class instance for AES CTR encryption and decryption (aes_ct implementation).

◆ br_aes_ct_ctrcbc_vtable

const br_block_ctrcbc_class br_aes_ct_ctrcbc_vtable

Class instance for AES CTR encryption/decryption + CBC-MAC (aes_ct implementation).

◆ br_aes_pwr8_cbcdec_vtable

const br_block_cbcdec_class br_aes_pwr8_cbcdec_vtable

Class instance for AES CBC decryption (aes_pwr8 implementation).

Since this implementation might be omitted from the library, or the AES opcode unavailable on the current CPU, a pointer to this class instance should be obtained through br_aes_pwr8_cbcdec_get_vtable().

◆ br_aes_pwr8_cbcenc_vtable

const br_block_cbcenc_class br_aes_pwr8_cbcenc_vtable

Class instance for AES CBC encryption (aes_pwr8 implementation).

Since this implementation might be omitted from the library, or the AES opcode unavailable on the current CPU, a pointer to this class instance should be obtained through br_aes_pwr8_cbcenc_get_vtable().

◆ br_aes_pwr8_ctr_vtable

const br_block_ctr_class br_aes_pwr8_ctr_vtable

Class instance for AES CTR encryption and decryption (aes_pwr8 implementation).

Since this implementation might be omitted from the library, or the AES opcode unavailable on the current CPU, a pointer to this class instance should be obtained through br_aes_pwr8_ctr_get_vtable().

◆ br_aes_pwr8_ctrcbc_vtable

const br_block_ctrcbc_class br_aes_pwr8_ctrcbc_vtable

Class instance for AES CTR encryption/decryption + CBC-MAC (aes_pwr8 implementation).

Since this implementation might be omitted from the library, or the AES opcode unavailable on the current CPU, a pointer to this class instance should be obtained through br_aes_pwr8_ctrcbc_get_vtable().

◆ br_aes_small_cbcdec_vtable

const br_block_cbcdec_class br_aes_small_cbcdec_vtable

Class instance for AES CBC decryption (aes_small implementation).

◆ br_aes_small_cbcenc_vtable

const br_block_cbcenc_class br_aes_small_cbcenc_vtable

Class instance for AES CBC encryption (aes_small implementation).

◆ br_aes_small_ctr_vtable

const br_block_ctr_class br_aes_small_ctr_vtable

Class instance for AES CTR encryption and decryption (aes_small implementation).

◆ br_aes_small_ctrcbc_vtable

const br_block_ctrcbc_class br_aes_small_ctrcbc_vtable

Class instance for AES CTR encryption/decryption + CBC-MAC (aes_small implementation).

◆ br_aes_x86ni_cbcdec_vtable

const br_block_cbcdec_class br_aes_x86ni_cbcdec_vtable

Class instance for AES CBC decryption (aes_x86ni implementation).

Since this implementation might be omitted from the library, or the AES opcode unavailable on the current CPU, a pointer to this class instance should be obtained through br_aes_x86ni_cbcdec_get_vtable().

◆ br_aes_x86ni_cbcenc_vtable

const br_block_cbcenc_class br_aes_x86ni_cbcenc_vtable

Class instance for AES CBC encryption (aes_x86ni implementation).

Since this implementation might be omitted from the library, or the AES opcode unavailable on the current CPU, a pointer to this class instance should be obtained through br_aes_x86ni_cbcenc_get_vtable().

◆ br_aes_x86ni_ctr_vtable

const br_block_ctr_class br_aes_x86ni_ctr_vtable

Class instance for AES CTR encryption and decryption (aes_x86ni implementation).

Since this implementation might be omitted from the library, or the AES opcode unavailable on the current CPU, a pointer to this class instance should be obtained through br_aes_x86ni_ctr_get_vtable().

◆ br_aes_x86ni_ctrcbc_vtable

const br_block_ctrcbc_class br_aes_x86ni_ctrcbc_vtable

Class instance for AES CTR encryption/decryption + CBC-MAC (aes_x86ni implementation).

Since this implementation might be omitted from the library, or the AES opcode unavailable on the current CPU, a pointer to this class instance should be obtained through br_aes_x86ni_ctrcbc_get_vtable().

◆ br_des_ct_cbcdec_vtable

const br_block_cbcdec_class br_des_ct_cbcdec_vtable

Class instance for DES CBC decryption (des_ct implementation).

◆ br_des_ct_cbcenc_vtable

const br_block_cbcenc_class br_des_ct_cbcenc_vtable

Class instance for DES CBC encryption (des_ct implementation).

◆ br_des_tab_cbcdec_vtable

const br_block_cbcdec_class br_des_tab_cbcdec_vtable

Class instance for DES CBC decryption (des_tab implementation).

◆ br_des_tab_cbcenc_vtable

const br_block_cbcenc_class br_des_tab_cbcenc_vtable

Class instance for DES CBC encryption (des_tab implementation).