X-Git-Url: https://bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=inc%2Fbearssl_block.h;h=415bc28fb61b0625c479015903a8620bd701dfbd;hp=88f51b255320d8b746edae469e84bf892f072616;hb=2f7a003698b562b4a08e2dbe32f341f57c57563e;hpb=db8f1b664524e3fbeea8a0730b2bbe2f0bdcea86 diff --git a/inc/bearssl_block.h b/inc/bearssl_block.h index 88f51b2..415bc28 100644 --- a/inc/bearssl_block.h +++ b/inc/bearssl_block.h @@ -28,6 +28,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** \file bearssl_block.h * * # Block Ciphers and Symmetric Ciphers @@ -1356,11 +1360,11 @@ uint32_t br_aes_pwr8_ctr_run(const br_aes_pwr8_ctr_keys *ctx, * available. * * This function returns a pointer to `br_aes_pwr8_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`. + * 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`. * - * \return the `aes_x868ni` AES-CBC (encryption) implementation, or `NULL`. + * \return the `aes_pwr8` AES-CBC (encryption) implementation, or `NULL`. */ const br_block_cbcenc_class *br_aes_pwr8_cbcenc_get_vtable(void); @@ -1369,23 +1373,23 @@ const br_block_cbcenc_class *br_aes_pwr8_cbcenc_get_vtable(void); * available. * * This function returns a pointer to `br_aes_pwr8_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`. + * 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`. * - * \return the `aes_x868ni` AES-CBC (decryption) implementation, or `NULL`. + * \return the `aes_pwr8` AES-CBC (decryption) implementation, or `NULL`. */ const br_block_cbcdec_class *br_aes_pwr8_cbcdec_get_vtable(void); /** * \brief 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 x86 AES + * 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`. * - * \return the `aes_x868ni` AES-CTR implementation, or `NULL`. + * \return the `aes_pwr8` AES-CTR implementation, or `NULL`. */ const br_block_ctr_class *br_aes_pwr8_ctr_get_vtable(void); @@ -1768,4 +1772,42 @@ 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); +/** + * \brief 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 br_poly1305_run + * + * \param key secret key (32 bytes). + * \param iv nonce (12 bytes). + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + * \param aad additional authenticated data. + * \param aad_len length of additional authenticated data (in bytes). + * \param tag output buffer for the authentication tag. + * \param ichacha implementation of ChaCha20. + * \param encrypt non-zero for encryption, zero for decryption. + */ +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); + +/** + * \brief 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. + * + * \return the ctmulq ChaCha20+Poly1305 implementation, or 0. + */ +br_poly1305_run br_poly1305_ctmulq_get(void); + +#ifdef __cplusplus +} +#endif + #endif