X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=inc%2Fbearssl_hash.h;h=860ab718b3a50f6e2ffc4f774214fe88d5ca436a;hp=524ac0145d7652dbe7d4444afdb6ccb8e1f87c57;hb=af9c79a0710a45361f9ae4313f8bb5bf738c3b7a;hpb=5f045c759957fdff8c85716e6af99e10901fdac0 diff --git a/inc/bearssl_hash.h b/inc/bearssl_hash.h index 524ac01..860ab71 100644 --- a/inc/bearssl_hash.h +++ b/inc/bearssl_hash.h @@ -29,6 +29,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** \file bearssl_hash.h * * # Hash Functions @@ -1309,4 +1313,34 @@ void br_ghash_pclmul(void *y, const void *h, const void *data, size_t len); */ br_ghash br_ghash_pclmul_get(void); +/** + * \brief GHASH implementation using the POWER8 opcodes. + * + * This implementation is available only on POWER8 platforms (and later). + * To safely obtain a pointer to this function when supported (or 0 + * otherwise), use `br_ghash_pwr8_get()`. + * + * \param y the array to update. + * \param h the GHASH key. + * \param data the input data (may be `NULL` if `len` is zero). + * \param len the input data length (in bytes). + */ +void br_ghash_pwr8(void *y, const void *h, const void *data, size_t len); + +/** + * \brief Obtain the `pwr8` GHASH implementation, if available. + * + * If the `pwr8` implementation was compiled in the library (depending + * on the compiler abilities) _and_ the local CPU appears to support the + * opcode, then this function will return a pointer to the + * `br_ghash_pwr8()` function. Otherwise, it will return `0`. + * + * \return the `pwr8` GHASH implementation, or `0`. + */ +br_ghash br_ghash_pwr8_get(void); + +#ifdef __cplusplus +} +#endif + #endif