wolfSSL Espressif ESP32-C3 RISC-V Support

The wolfSSL team continues to embrace the open source community for the ever expanding product line of Espressif chips with support for the RISC-V architecture of the ESP32-C3.

Do you want to use world-class encryption software on your next ESP32 project? Check out the fully open-source wolfSSL codebase. The code continues to be free to use for makers under the terms of GPLv2. Commercial users for any size project are encouraged to contact us for licensing, professional support, and engineering development services.

Try out the wolfSSL encryption libraries today! Wondering which board to use? Check out our friends creating the ICE-V Wireless RISC-V ESP32-C3 and ice40 FPGA board. There’s a community example using this board for the wolfSSL SSH to UART Server.

We are currently working on adding RISC-V cryptographic hardware acceleration and support for the Espressif ESP-IDF Version 5.0.

For the RISC-V ESP32-C3-MINI with software only running at 160MHz here are our current wolfSSL benchmarks, using a user_settings.h file from GitHub, but hardware acceleration disabled:

ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x1 (POWERON),boot:0xc (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd5820,len:0x16dc
load:0x403cc710,len:0x96c
load:0x403ce710,len:0x2e2c
entry 0x403cc710
I (30) boot: ESP-IDF v5.0-dirty 2nd stage bootloader
I (30) boot: compile time 15:02:47
I (30) boot: chip revision: v0.3
I (32) boot.esp32c3: SPI Speed      : 80MHz
I (37) boot.esp32c3: SPI Mode       : DIO
I (42) boot.esp32c3: SPI Flash Size : 2MB
I (47) boot: Enabling RNG early entropy source...
I (52) boot: Partition Table:
I (56) boot: ## Label            Usage          Type ST Offset   Length
I (63) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (70) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (78) boot:  2 factory          factory app      00 00 00010000 00177000
I (85) boot: End of partition table
I (90) esp_image: segment 0: paddr=00010020 vaddr=3c050020 size=149b8h ( 84408) map
I (111) esp_image: segment 1: paddr=000249e0 vaddr=3fc8a400 size=01508h (  5384) load
I (112) esp_image: segment 2: paddr=00025ef0 vaddr=40380000 size=0a128h ( 41256) load
I (125) esp_image: segment 3: paddr=00030020 vaddr=42000020 size=409b4h (264628) map
I (167) esp_image: segment 4: paddr=000709dc vaddr=4038a128 size=001b8h (   440) load
I (167) esp_image: segment 5: paddr=00070b9c vaddr=50000010 size=00014h (    20) load
I (175) boot: Loaded app from partition at offset 0x10000
I (179) boot: Disabling RNG early entropy source...
I (195) cpu_start: Pro cpu up.
I (204) cpu_start: Pro cpu start user code
I (204) cpu_start: cpu freq: 160000000 Hz
I (204) cpu_start: Application information:
I (207) cpu_start: Project name:     wolfssl_benchmark
I (213) cpu_start: App version:      v5.6.4-stable-328-gb7b20eded-di
I (220) cpu_start: Compile time:     Dec 13 2023 15:02:38
I (226) cpu_start: ELF file SHA256:  310a92e2d70d3422...
I (232) cpu_start: ESP-IDF:          v5.0-dirty
I (237) heap_init: Initializing. RAM available for dynamic allocation:
I (244) heap_init: At 3FC8C890 len 0004FE80 (319 KiB): DRAM
I (251) heap_init: At 3FCDC710 len 00002950 (10 KiB): STACK/DRAM
I (257) heap_init: At 50000024 len 00001FDC (7 KiB): RTCRAM
I (264) spi_flash: detected chip: generic
I (268) spi_flash: flash io: dio
W (272) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
I (286) cpu_start: Starting scheduler.
I (290) wolfssl_benchmark: ---------------- wolfSSL Benchmark Example ------------
I (298) wolfssl_benchmark: --------------------------------------------------------
I (306) wolfssl_benchmark: --------------------------------------------------------
I (314) wolfssl_benchmark: ---------------------- BEGIN MAIN ----------------------
I (323) wolfssl_benchmark: --------------------------------------------------------
I (331) wolfssl_benchmark: --------------------------------------------------------
I (339) esp32_util: Extended Version and Platform Information.
I (346) esp32_util: Chip revision: v0.3
I (350) esp32_util: SSID and plain text WiFi password not displayed in startup logs.
I (359) esp32_util:   Define SHOW_SSID_AND_PASSWORD to enable display.
I (366) esp32_util: Using wolfSSL user_settings.h in C:/workspace/wolfssl-master/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/components/wolfssl/include/user_settings.h
I (382) esp32_util: LIBWOLFSSL_VERSION_STRING = 5.6.4
I (388) esp32_util: LIBWOLFSSL_VERSION_HEX = 5006004
I (393) esp32_util: CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ = 160 MHz
I (400) esp32_util: Stack HWM: 54312
I (404) esp32_util:
I (407) esp32_util: Macro Name                 Defined   Not Defined
I (414) esp32_util: ------------------------- --------- -------------
I (421) esp32_util: NO_ESPIDF_DEFAULT........                 X
I (428) esp32_util: HW_MATH_ENABLED..........     X
I (433) esp32_util: WOLFSSL_SHA224...........     X
I (439) esp32_util: WOLFSSL_SHA384...........     X
I (444) esp32_util: WOLFSSL_SHA512...........     X
I (450) esp32_util: WOLFSSL_SHA3.............     X
I (455) esp32_util: HAVE_ED25519.............     X
I (461) esp32_util: HAVE_AES_ECB.............                 X
I (468) esp32_util: HAVE_AES_DIRECT..........                 X
I (474) esp32_util: USE_FAST_MATH............     X
I (480) esp32_util: WOLFSSL_SP_MATH_ALL......                 X
I (486) esp32_util: SP_MATH..................                 X
I (493) esp32_util: WOLFSSL_HW_METRICS.......     X
I (499) esp32_util: RSA_LOW_MEM..............     X
I (504) esp32_util: WC_NO_HARDEN.............                 X
I (511) esp32_util: TFM_TIMING_RESISTANT.....     X
I (516) esp32_util: ECC_TIMING_RESISTANT.....     X
I (522) esp32_util: WC_NO_CACHE_RESISTANT....     X
I (527) esp32_util: WC_AES_BITSLICED.........                 X
I (534) esp32_util: WOLFSSL_AES_NO_UNROLL....                 X
I (541) esp32_util: TFM_TIMING_RESISTANT.....     X
I (546) esp32_util: ECC_TIMING_RESISTANT.....     X
I (552) esp32_util: WC_RSA_BLINDING..........     X
I (557) esp32_util: NO_WRITEV................     X
I (563) esp32_util: FREERTOS.................     X
I (568) esp32_util: NO_WOLFSSL_DIR...........     X
I (574) esp32_util: WOLFSSL_NO_CURRDIR.......     X
I (579) esp32_util: WOLFSSL_LWIP.............     X
I (585) esp32_util:
I (588) esp32_util: Compiler Optimization: Performance
I (594) esp32_util:
I (596) esp32_util: LIBWOLFSSL_VERSION_GIT_ORIGIN = https://github.com/gojimmypi/wolfssl.git
I (606) esp32_util: LIBWOLFSSL_VERSION_GIT_BRANCH = master
I (612) esp32_util: LIBWOLFSSL_VERSION_GIT_HASH = b7b20ededda4cea208fb7745629904fda64c7524
I (621) esp32_util: LIBWOLFSSL_VERSION_GIT_SHORT_HASH = b7b20eded
I (628) esp32_util: LIBWOLFSSL_VERSION_GIT_HASH_DATE = 'Wed Dec 13 14:36:23 2023 +1000'
I (636) esp32_util: CONFIG_IDF_TARGET = esp32c3
I (641) esp32_util: NO_ESP32_CRYPT defined! HW acceleration DISABLED.
I (649) esp32_util: NOT SINGLE_THREADED
I (653) esp32_util: Boot count: 1
I (657) wolfssl_benchmark: app_main CONFIG_BENCH_ARGV = -lng 0
I (666) wolfssl_benchmark: Stack HWM: 54112

I (669) wolfssl_benchmark: construct_argv arg:-lng 0

------------------------------------------------------------------------------
 wolfSSL version 5.6.4
------------------------------------------------------------------------------
wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each)
RNG                        575 KiB took 1.014 seconds,  567.061 KiB/s
AES-128-CBC-enc           1725 KiB took 1.011 seconds, 1706.231 KiB/s
AES-128-CBC-dec           1675 KiB took 1.006 seconds, 1665.010 KiB/s
AES-192-CBC-enc           1475 KiB took 1.004 seconds, 1469.124 KiB/s
AES-192-CBC-dec           1450 KiB took 1.006 seconds, 1441.352 KiB/s
AES-256-CBC-enc           1300 KiB took 1.007 seconds, 1290.963 KiB/s
AES-256-CBC-dec           1275 KiB took 1.002 seconds, 1272.455 KiB/s
AES-128-GCM-enc            450 KiB took 1.058 seconds,  425.331 KiB/s
AES-128-GCM-dec            450 KiB took 1.058 seconds,  425.331 KiB/s
AES-192-GCM-enc            425 KiB took 1.039 seconds,  409.047 KiB/s
AES-192-GCM-dec            425 KiB took 1.040 seconds,  408.654 KiB/s
AES-256-GCM-enc            400 KiB took 1.016 seconds,  393.701 KiB/s
AES-256-GCM-dec            400 KiB took 1.016 seconds,  393.701 KiB/s
GMAC Default               567 KiB took 1.000 seconds,  567.000 KiB/s
3DES                       400 KiB took 1.061 seconds,  377.003 KiB/s
MD5                      10650 KiB took 1.001 seconds, 10639.361 KiB/
SHA                       5425 KiB took 1.004 seconds, 5403.386 KiB/s
SHA-224                   1450 KiB took 1.008 seconds, 1438.492 KiB/s
SHA-256                   1450 KiB took 1.008 seconds, 1438.492 KiB/s
SHA-384                   1300 KiB took 1.011 seconds, 1285.856 KiB/s
SHA-512                   1300 KiB took 1.011 seconds, 1285.856 KiB/s
SHA-512/224               1300 KiB took 1.011 seconds, 1285.856 KiB/s
SHA-512/256               1300 KiB took 1.011 seconds, 1285.856 KiB/s
SHA3-224                   950 KiB took 1.019 seconds,  932.287 KiB/s
SHA3-256                   900 KiB took 1.022 seconds,  880.626 KiB/s
SHA3-384                   700 KiB took 1.034 seconds,  676.983 KiB/s
SHA3-512                   475 KiB took 1.004 seconds,  473.108 KiB/s
SHAKE128                  1100 KiB took 1.018 seconds, 1080.550 KiB/s
SHAKE256                   900 KiB took 1.023 seconds,  879.765 KiB/s
RIPEMD                    4325 KiB took 1.004 seconds, 4307.769 KiB/s
HMAC-MD5                 10525 KiB took 1.000 seconds, 10525.000 KiB/
HMAC-SHA                  5375 KiB took 1.004 seconds, 5353.586 KiB/s
HMAC-SHA224               1450 KiB took 1.016 seconds, 1427.165 KiB/s
HMAC-SHA256               1450 KiB took 1.016 seconds, 1427.165 KiB/s
HMAC-SHA384               1275 KiB took 1.007 seconds, 1266.137 KiB/s
HMAC-SHA512               1275 KiB took 1.007 seconds, 1266.137 KiB/s
PBKDF2                       0 KiB took 1.084 seconds,    0.173 KiB/s
RSA     1024  key gen         1 ops took 5.502 sec, avg 5502.000 ms
RSA     2048  key gen         1 ops took 34.705 sec, avg 34705.000 ms
RSA     2048   public        46 ops took 1.016 sec, avg 22.087 ms
RSA     2048  private         2 ops took 8.848 sec, avg 4424.000 ms
ECC   [      SECP256R1]   256  key gen         4 ops took 1.165 sec, avg 291.250 ms
ECDHE [      SECP256R1]   256    agree         4 ops took 1.159 sec, avg 289.750 ms
ECDSA [      SECP256R1]   256     sign         4 ops took 1.178 sec, avg 294.500 ms
ECDSA [      SECP256R1]   256   verify         2 ops took 1.120 sec, avg 560.000 ms
CURVE  25519  key gen         3 ops took 1.144 sec, avg 381.333 ms
CURVE  25519    agree         4 ops took 1.524 sec, avg 381.000 ms
ED     25519  key gen        73 ops took 1.005 sec, avg 13.767 ms
ED     25519     sign        62 ops took 1.005 sec, avg 16.210 ms
ED     25519   verify        40 ops took 1.042 sec, avg 26.050 ms
Benchmark complete

ESP-32-C3 Benchmark Metrics updated December 2023 with the latest version of wolfSSL.

See also:

If you have questions about any of the above, please contact us at facts@wolfSSL.com or cacll us at +1 425 245 8247.

Download wolfSSL Now