Uh oh!
There was an error while loading. Please reload this page.
Add support for wolfHAL crypto backend - #11033
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds a new wolfCrypt hardware-acceleration port that routes selected crypto operations through the wolfHAL driver stack via the wolfSSL crypto-callback framework, plus the autotools plumbing to build it.
Changes:
- Adds a new
wolfHALport implementation (wolfhal.c/.h) with crypto-callback dispatch for AES (ECB/CBC/GCM/CCM) and optional RNG support. - Introduces
wolfhal_settings.hand wires it intosettings.hearly to enableWOLF_CRYPTO_CBand mapWC_USE_DEVIDfor wolfHAL builds. - Extends autotools build/configure flow (
configure.ac,include.am) to enable the port via--with-wolfhal/--with-wolfhal-board, and to register the device duringwolfCrypt_Init().
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| wolfssl/wolfcrypt/settings.h | Includes wolfHAL macro-only settings early during configuration. |
| wolfssl/wolfcrypt/port/wolfHAL/wolfhal.h | Public port header exposing register/unregister and optional RNG entrypoint. |
| wolfssl/wolfcrypt/port/wolfHAL/wolfhal_settings.h | Macro-only configuration enabling crypto callback + devId mapping. |
| wolfssl/wolfcrypt/include.am | Adds wolfHAL headers to autotools header lists and conditional installs. |
| wolfcrypt/src/wc_port.c | Registers the wolfHAL crypto-callback device during wolfCrypt_Init(). |
| wolfcrypt/src/port/wolfHAL/wolfhal.c | Implements crypto callback dispatch to wolfHAL AES + RNG APIs. |
| wolfcrypt/src/port/wolfHAL/README.md | Documents build flags, board.h contract, and runtime initialization order. |
| wolfcrypt/src/include.am | Adds wolfHAL source/README to autotools distribution and conditional build sources. |
| configure.ac | Adds --with-wolfhal / --with-wolfhal-board configuration and build conditionals. |
Suppressed comments (1)
configure.ac:3683
- The board include path is appended without quoting, so
--with-wolfhal-boardpaths containing spaces will be split into multiple compiler arguments and fail to findboard.h.
AM_CFLAGS="$AM_CFLAGS -I$ENABLED_WOLFHAL_BOARD"
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Uh oh!
There was an error while loading. Please reload this page.
e921fb5 to
71c8934CompareThere was a problem hiding this comment.
Pull request overview
Copilot reviewed 9 out of 9 changed files in this pull request and generated no new comments.
Suppressed comments (3)
wolfssl/wolfcrypt/port/wolfHAL/wolfhal.h:84
- Prototype for wc_wolfHAL_GenerateBlock() uses plain C types, but the implementation uses wolfCrypt types (byte*, word32). On some platforms word32 is unsigned long (not unsigned int), so this mismatch can cause warnings or ABI issues. Match the public prototype to the definition and wolfCrypt conventions (also aligns with wc_RNG_GenerateBlock()).
/* Generate a block of random data using the wolfHAL RNG device.
* Suitable for use as CUSTOM_RAND_GENERATE_BLOCK. */
WOLFSSL_API int wc_wolfHAL_GenerateBlock(unsigned char* output,
unsigned int sz);
wolfssl/wolfcrypt/port/wolfHAL/wolfhal_settings.h:30
- This comment says WOLFSSL_WOLFHAL "must be defined in user_settings.h", but this PR also enables it via configure.ac (AM_CFLAGS += -DWOLFSSL_WOLFHAL). Update the wording so it doesn’t incorrectly imply user_settings.h is required (it can be set by build flags too).
/* Compile time configuration for the wolfHAL port. This header holds only
* preprocessor macros and pulls in no wolfHAL or BSP headers, so wolfSSL
* settings.h can include it to map WC_USE_DEVID before the unmodified
* wolfcrypt test and benchmark read it.
*
* WOLFSSL_WOLFHAL enables the port and must be defined in user_settings.h.
* Which AES modes are offloaded follows the usual wolfCrypt feature gates
* (HAVE_AES_CBC, HAVE_AESGCM, HAVE_AESCCM, HAVE_AES_ECB); the callback
* returns CRYPTOCB_UNAVAILABLE for anything else and wolfCrypt falls back to
configure.ac:3629
- The configure.ac example uses --with-wolfhal-board=stm32wb_nucleo, but the option is documented/validated as a directory PATH containing board.h. Using a concrete path example (like the README does) would prevent confusion and reduce misconfiguration reports.
# wolfHAL hardware abstraction layer crypto-callback port.
# Include-path only: wolfHAL builds no archive (its drivers compile per-board),
# so the application compiles and links wolfHAL itself.
# Example:
# "./configure --with-wolfhal=../wolfHAL --with-wolfhal-board=stm32wb_nucleo"
ENABLED_WOLFHAL="no"
retest this please |
AlexLanzano
commented
Aug 5, 2026
retest this please |
AlexLanzano
commented
Aug 11, 2026
Retest this please |
71c8934 to
110a98bCompareJacobBarthelmeh
commented
Aug 14, 2026
Retest this please Jenkins |
JacobBarthelmeh
commented
Aug 14, 2026
@dgarske and @danielinux I think it would be best to get your expert reviews on HAL implementation/integration. Please take a look at this PR. |
board's hardware accelerators.
implementations. wolfHAL registers as a crypto device at init and operations
route to it by devId.
for that mode; everything else falls back to software. The RNG has no fallback,
since it replaces the entropy source.
board.hon the include path naming its devices,the same contract as
user_settings.h. Stock wolfHAL board headers work as-is.--with-wolfhal=PATH --with-wolfhal-board=PATH, both validated atconfigure time.
I have added examples using this new wolfHAL backend in wolfssl-examples. Here is the PR for that. wolfSSL/wolfssl-examples#615