diff --git a/.gitignore b/.gitignore index 5bd31033f..833b664af 100644 --- a/.gitignore +++ b/.gitignore @@ -433,3 +433,11 @@ MagicCrypto debian/changelog debian/control *.deb + +# PlatformIO +/**/.pio +/**/.vscode/.browse.c_cpp.db* +/**/.vscode/c_cpp_properties.json +/**/.vscode/launch.json +/**/.vscode/ipch +/**/sdkconfig.esp32dev diff --git a/IDE/PlatformIO/README.md b/IDE/PlatformIO/README.md new file mode 100644 index 000000000..89c8c3c09 --- /dev/null +++ b/IDE/PlatformIO/README.md @@ -0,0 +1,82 @@ +# PlatformIO + +Follow the [instructions](https://docs.platformio.org/en/latest/core/installation/methods/index.html) to install PlatformIO. + +Note there are two options: + +- [Core CLI](https://docs.platformio.org/en/latest/core/index.html) +- [VSCode IDE](https://docs.platformio.org/en/latest/integration/ide/vscode.html#ide-vscode) + + +## Publishing + +The PlatformIO Core CLI is needed to publish wolfSSL: + +See also the [Arduino](../ARDUINO/README.md) publishing notes. + + +### Publish PlatformIO Arduino Library with Windows + +The wolfSSL publishing is done from the `scripts`. Here are somple examples: + +Setup the PlatformIO CLI: + +```dos +set PATH=%PATH%;C:\Users\%USERNAME%\.platformio\penv\Scripts\ +pio --help +pio account show +``` + +Publish + +```dos +pio pkg publish --owner wolfSSL C:\workspace\Arduino-wolfSSL +``` + +### Publish with Linux + +```bash +set PATH=%PATH%;C:\Users\%USERNAME%\.platformio\penv\Scripts\ +pio --help +pio account show +``` + +```bash +pio pkg publish --owner wolfSSL ~\workspace\Arduino-wolfSSL +``` + +### Create a staging / preview wolfssl org + +See + +``` +pio org create wolfssl-staging --email support@wolfssl.com --displayname "testing preview wolfssl" +``` + +### Add user to org + +The creator of an org is automatically added as user / owner at org creation time. Others can be added: + +``` +pio org add wolfssl-staging gojimmypi +``` + +### Publish Arduino wolfSSL to staging / preview site: + +``` +pio pkg publish --owner wolfssl-staging C:\workspace\Arduino-wolfSSL +``` + +### Publish Regular wolfSSL to staging / preview site: + +``` +pio pkg publish --owner wolfssl-staging C:\workspace\wolfssl-gojimmypi\IDE\PlatformIO\PlatformIO_wolfSSL +``` + +### Remove published version from staging site: + +`pio pkg unpublish [/][@] [OPTIONS]` + +``` +pio pkg unpublish wolfssl-staging/wolfssl@5.6.6-test1 +``` diff --git a/IDE/PlatformIO/examples/README.md b/IDE/PlatformIO/examples/README.md new file mode 100644 index 000000000..f4ab16436 --- /dev/null +++ b/IDE/PlatformIO/examples/README.md @@ -0,0 +1,13 @@ +# PlatformIO + +Follow the [instructions](https://docs.platformio.org/en/latest/core/installation/methods/index.html) to install PlatformIO. + +Note there are two options: + +- [Core CLI](https://docs.platformio.org/en/latest/core/index.html) +- [VSCode IDE](https://docs.platformio.org/en/latest/integration/ide/vscode.html#ide-vscode) + +# Examples + +- [wolfssl_benchmark](./wolfssl_benchmark/README.md) +- [wolfssl_test](./wolfssl_test/README.md) diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/CMakeLists.txt b/IDE/PlatformIO/examples/wolfssl_benchmark/CMakeLists.txt new file mode 100644 index 000000000..196bba158 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.16.0) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(ESP_IDF_Hello_World) diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/README.md b/IDE/PlatformIO/examples/wolfssl_benchmark/README.md new file mode 100644 index 000000000..32460b83e --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/README.md @@ -0,0 +1,124 @@ +# wolfSSL Benchmark Example + +This ESP32 example uses the [wolfSSL wolfcrypt Benchmark Application](https://github.com/wolfSSL/wolfssl/tree/master/wolfcrypt/benchmark). + +Other target boards _should_ work, but have not yet been tested. + +For general information on [wolfSSL examples for Espressif](../README.md), see the +[README](https://github.com/wolfSSL/wolfssl/blob/master/IDE/Espressif/ESP-IDF/README.md) file. + +## Example Output + +Note the default wolfSSL `user_settings.h` is configured by default to be the most +compatible across the widest ranges of targets. Contact wolfSSL at support@wolfssl.com +for help in optimizing for your particular application, or see the +[docs](https://www.wolfssl.com/documentation/manuals/wolfssl/index.html). + +Compiled and flashed with `idf.py build flash -p /dev/ttyS7 -b 115200 monitor`: + +``` +--- idf_monitor on /dev/ttyS7 115200 --- +--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + (377) cpu_start: Starting scheduler ets Jun 8 2016 00:22:57 + +rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) +configsip: 0, SPIWP:0xee +clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 +mode:DIO, clock div:2 +load:0x3fff0030,len:6664 +load:0x40078000,len:14848 +load:0x40080400,len:3792 +0x40080400: _init at ??:? + +entry 0x40080694 +I (27) boot: ESP-IDF v4.4.2-dirty 2nd stage bootloader +I (27) boot: compile time 13:41:41 +I (27) boot: chip revision: 1 +I (30) boot_comm: chip revision: 1, min. bootloader chip revision: 0 +I (37) boot.esp32: SPI Speed : 40MHz +I (42) boot.esp32: SPI Mode : DIO +I (46) boot.esp32: SPI Flash Size : 2MB +I (51) boot: Enabling RNG early entropy source... +I (56) boot: Partition Table: +I (60) boot: ## Label Usage Type ST Offset Length +I (67) boot: 0 nvs WiFi data 01 02 00009000 00006000 +I (75) boot: 1 phy_init RF data 01 01 0000f000 00001000 +I (82) boot: 2 factory factory app 00 00 00010000 00100000 +I (90) boot: End of partition table +I (94) boot_comm: chip revision: 1, min. application chip revision: 0 +I (101) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=12bf4h ( 76788) map +I (137) esp_image: segment 1: paddr=00022c1c vaddr=3ffb0000 size=02420h ( 9248) load +I (141) esp_image: segment 2: paddr=00025044 vaddr=40080000 size=0afd4h ( 45012) load +I (161) esp_image: segment 3: paddr=00030020 vaddr=400d0020 size=33148h (209224) map +I (237) esp_image: segment 4: paddr=00063170 vaddr=4008afd4 size=00550h ( 1360) load +I (238) esp_image: segment 5: paddr=000636c8 vaddr=50000000 size=00010h ( 16) load +I (249) boot: Loaded app from partition at offset 0x10000 +I (249) boot: Disabling RNG early entropy source... +I (266) cpu_start: Pro cpu up. +I (266) cpu_start: Starting app cpu, entry point is 0x40081098 +0x40081098: call_start_cpu1 at /mnt/c/SysGCC/esp32/esp-idf/v4.4.2/components/esp_system/port/cpu_start.c:160 + +I (0) cpu_start: App cpu up. +I (280) cpu_start: Pro cpu start user code +I (280) cpu_start: cpu freq: 240000000 +I (280) cpu_start: Application information: +I (285) cpu_start: Project name: wolfssl_benchmark +I (291) cpu_start: App version: v5.5.3-stable-108-gbd7b442df-di +I (298) cpu_start: Compile time: Nov 17 2022 14:10:03 +I (304) cpu_start: ELF file SHA256: fbb520f5bbf963a0... +I (310) cpu_start: ESP-IDF: v4.4.2-dirty +I (316) heap_init: Initializing. RAM available for dynamic allocation: +I (323) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM +I (329) heap_init: At 3FFB3DE8 len 0002C218 (176 KiB): DRAM +I (335) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM +I (341) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM +I (348) heap_init: At 4008B524 len 00014ADC (82 KiB): IRAM +I (355) spi_flash: detected chip: generic +I (359) spi_flash: flash io: dio +W (362) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header. +I (377) cpu_start: Starting scheduler on PRO CPU. +I (0) cpu_start: Starting scheduler on APP CPU. +I (391) wolfssl_benchmark: app_main CONFIG_BENCH_ARGV = -lng 0 +I (397) wolfssl_benchmark: construct_argv arg:-lng 0 + +------------------------------------------------------------------------------ + wolfSSL version 5.5.3 +------------------------------------------------------------------------------ +wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each) +RNG 1 MiB took 1.017 seconds, 1.320 MiB/s +AES-128-CBC-enc 6 MiB took 1.002 seconds, 5.726 MiB/s +AES-128-CBC-dec 5 MiB took 1.000 seconds, 5.347 MiB/s +AES-192-CBC-enc 6 MiB took 1.004 seconds, 5.714 MiB/s +AES-192-CBC-dec 5 MiB took 1.001 seconds, 5.341 MiB/s +AES-256-CBC-enc 6 MiB took 1.000 seconds, 5.713 MiB/s +AES-256-CBC-dec 5 MiB took 1.002 seconds, 5.336 MiB/s +AES-128-GCM-enc 300 KiB took 1.004 seconds, 298.805 KiB/s +AES-128-GCM-dec 300 KiB took 1.004 seconds, 298.805 KiB/s +AES-192-GCM-enc 300 KiB took 1.007 seconds, 297.915 KiB/s +AES-192-GCM-dec 300 KiB took 1.008 seconds, 297.619 KiB/s +AES-256-GCM-enc 300 KiB took 1.011 seconds, 296.736 KiB/s +AES-256-GCM-dec 300 KiB took 1.011 seconds, 296.736 KiB/s +GMAC Default 403 KiB took 1.002 seconds, 402.196 KiB/s +3DES 450 KiB took 1.028 seconds, 437.743 KiB/s +MD5 14 MiB took 1.001 seconds, 13.756 MiB/s +SHA 14 MiB took 1.001 seconds, 14.463 MiB/s +SHA-256 14 MiB took 1.000 seconds, 14.233 MiB/s +SHA-512 17 MiB took 1.000 seconds, 16.626 MiB/s +HMAC-MD5 14 MiB took 1.000 seconds, 13.599 MiB/s +HMAC-SHA 14 MiB took 1.000 seconds, 13.989 MiB/s +HMAC-SHA256 14 MiB took 1.000 seconds, 13.940 MiB/s +HMAC-SHA512 16 MiB took 1.000 seconds, 16.064 MiB/s +PBKDF2 640 bytes took 1.009 seconds, 634.291 bytes/s +RSA 2048 public 52 ops took 1.022 sec, avg 19.654 ms, 50.881 ops/sec +RSA 2048 private 4 ops took 1.056 sec, avg 264.000 ms, 3.788 ops/sec +ECC [ SECP256R1] 256 key gen 4 ops took 1.216 sec, avg 304.000 ms, 3.289 ops/sec +ECDHE [ SECP256R1] 256 agree 4 ops took 1.215 sec, avg 303.750 ms, 3.292 ops/sec +ECDSA [ SECP256R1] 256 sign 4 ops took 1.226 sec, avg 306.500 ms, 3.263 ops/sec +ECDSA [ SECP256R1] 256 verify 2 ops took 1.172 sec, avg 586.000 ms, 1.706 ops/sec +CURVE 25519 key gen 3 ops took 1.279 sec, avg 426.333 ms, 2.346 ops/sec +CURVE 25519 agree 4 ops took 1.701 sec, avg 425.250 ms, 2.352 ops/sec +ED 25519 key gen 46 ops took 1.008 sec, avg 21.913 ms, 45.635 ops/sec +ED 25519 sign 42 ops took 1.038 sec, avg 24.714 ms, 40.462 ops/sec +ED 25519 verify 26 ops took 1.009 sec, avg 38.808 ms, 25.768 ops/sec +Benchmark complete +``` diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/include/README b/IDE/PlatformIO/examples/wolfssl_benchmark/include/README new file mode 100644 index 000000000..45496b1f1 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/include/README @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/lib/README b/IDE/PlatformIO/examples/wolfssl_benchmark/lib/README new file mode 100644 index 000000000..a10cadebe --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into executable file. + +The source code of each library should be placed in an own separate directory +("lib/your_library_name/[here are source files]"). + +For example, see a structure of the following two libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/platformio.ini b/IDE/PlatformIO/examples/wolfssl_benchmark/platformio.ini new file mode 100644 index 000000000..160002614 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/platformio.ini @@ -0,0 +1,20 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:esp32dev] +platform = espressif32 +board = esp32dev +framework = espidf +upload_port = COM82 +monitor_port = COM82 +monitor_speed = 115200 +build_flags = -DWOLFSSL_USER_SETTINGS, -DWOLFSSL_ESP32 +monitor_filters = direct +lib_deps = wolfssl/wolfSSL@^5.7.0-rev.3b diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/sdkconfig.defaults b/IDE/PlatformIO/examples/wolfssl_benchmark/sdkconfig.defaults new file mode 100644 index 000000000..2a5ad756d --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/sdkconfig.defaults @@ -0,0 +1,98 @@ +# sdkconfig.defaults for ESP8266 + ESP32 +# Note that during the build process, settings from sdkconfig.defaults will not override those already in sdkconfig. +# See https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html#custom-sdkconfig-defaults +CONFIG_BENCH_ARGV="-lng 0" +CONFIG_FREERTOS_HZ=1000 +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y + +# +# Default main stack size. See user_settings.h +# +# For wolfSSL SMALL_STACK, 3072 bytes should be sufficient for benchmark app. +# When using RSA, assign at least 10500 bytes, otherwise 5500 usually works for others +CONFIG_ESP_MAIN_TASK_STACK_SIZE=10500 + +# Legacy stack size for older ESP-IDF versions +CONFIG_MAIN_TASK_STACK_SIZE=10500 + +# +# Benchmark must not have CONFIG_NEWLIB_NANO_FORMAT enabled +CONFIG_NEWLIB_NANO_FORMAT=n +# +# Watchdog Timers +# +# We don't want to have the watchdog timeout during tests & benchmarks +# +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=n +# Panic & Watchdog +CONFIG_ESP_INT_WDT_TIMEOUT_MS=10000 +CONFIG_ESP_TASK_WDT_EN=n +CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y +CONFIG_ESP_INT_WDT=n + +# ESP8266 WDT +# CONFIG_ESP_PANIC_PRINT_REBOOT is not set +CONFIG_ESP_PANIC_PRINT_REBOOT=n +CONFIG_ESP_PANIC_PRINT_HALT=y + +# CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set +CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=n + +# ESP8266 Memory +CONFIG_FREERTOS_GLOBAL_DATA_LINK_IRAM=y +CONFIG_HEAP_DISABLE_IRAM=y + +# Performance +# CONFIG_COMPILER_OPTIMIZATION_PERF=y + +# Set max COU frequency (falls back as needed for lower maximum) +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y + +# FreeRTOS ticks at 1ms interval +CONFIG_FREERTOS_UNICORE=y +CONFIG_FREERTOS_HZ=1000 + +# +# Compiler options +# +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y +# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set +# CONFIG_COMPILER_OPTIMIZATION_PERF is not set +# CONFIG_COMPILER_OPTIMIZATION_NONE is not set +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set +CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set +CONFIG_COMPILER_HIDE_PATHS_MACROS=y +# CONFIG_COMPILER_CXX_EXCEPTIONS is not set +# CONFIG_COMPILER_CXX_RTTI is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_NONE is not set +CONFIG_COMPILER_STACK_CHECK_MODE_NORM=y +# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set +CONFIG_COMPILER_STACK_CHECK=y +# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set +# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set +# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DUMP_RTL_FILES is not set +# end of Compiler options + +# We don't know that the min is actually v2, +# but this is the earliest tested. +CONFIG_ESP32C3_REV_MIN_2=y + +# +# Partition Table +# +# CONFIG_PARTITION_TABLE_SINGLE_APP is not set +CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +# CONFIG_PARTITION_TABLE_CUSTOM is not set +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp_large.csv" +CONFIG_PARTITION_TABLE_OFFSET=0x8000 +CONFIG_PARTITION_TABLE_MD5=y +# end of Partition Table diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/src/CMakeLists.txt b/IDE/PlatformIO/examples/wolfssl_benchmark/src/CMakeLists.txt new file mode 100644 index 000000000..ab3ad38f1 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/src/CMakeLists.txt @@ -0,0 +1,6 @@ +# This file was automatically generated for projects +# without default 'CMakeLists.txt' file. + +FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*) + +idf_component_register(SRCS ${app_sources}) diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/src/main.c b/IDE/PlatformIO/examples/wolfssl_benchmark/src/main.c new file mode 100644 index 000000000..be14beb32 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/src/main.c @@ -0,0 +1,26 @@ +#include +#ifdef WOLFSSL_ESPIDF + #include + #include + #include +#endif + +#include +#include +#include + +#define TAG "demo" + +void app_main() { + int ret = 0; +#ifdef WOLFSSL_ESPIDF + ESP_LOGI(TAG, "Found WOLFSSL_ESPIDF!"); +#endif + printf("Hello World wolfSSL Version %s", LIBWOLFSSL_VERSION_STRING); + +#if defined(HAVE_VERSION_EXTENDED_INFO) && defined(WOLFSSL_ESPIDF) + esp_ShowExtendedSystemInfo(); +#endif + ret = benchmark_test(NULL); + printf("benchmark_test result %d", ret); +} diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/test/README b/IDE/PlatformIO/examples/wolfssl_benchmark/test/README new file mode 100644 index 000000000..b0416ad8b --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Test Runner and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/wolfssl_benchmark.code-workspace b/IDE/PlatformIO/examples/wolfssl_benchmark/wolfssl_benchmark.code-workspace new file mode 100644 index 000000000..67488baf2 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/wolfssl_benchmark.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "name": "wolfssl_benchmark", + "path": "." + } + ], + "settings": { + "files.associations": { + "settings.h": "c" + } + } +} diff --git a/IDE/PlatformIO/examples/wolfssl_platformio.code-workspace b/IDE/PlatformIO/examples/wolfssl_platformio.code-workspace new file mode 100644 index 000000000..1c1f91598 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_platformio.code-workspace @@ -0,0 +1,22 @@ +{ + "folders": [ + { + "name": "wolfsl_test", + "path": "wolfsl_test" + }, + { + "name": "wolfsl_benchmark", + "path": "wolfsl_benchmark" + } + ], + "settings": { + "files.associations": { + "version.h": "c", + "types.h": "c", + "settings.h": "c", + "freertos.h": "c", + "esp32-crypt.h": "c", + "esp_log.h": "c" + } + } +} diff --git a/IDE/PlatformIO/examples/wolfssl_test/CMakeLists.txt b/IDE/PlatformIO/examples/wolfssl_test/CMakeLists.txt new file mode 100644 index 000000000..196bba158 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.16.0) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(ESP_IDF_Hello_World) diff --git a/IDE/PlatformIO/examples/wolfssl_test/README.md b/IDE/PlatformIO/examples/wolfssl_test/README.md new file mode 100644 index 000000000..0c7ca935e --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/README.md @@ -0,0 +1,118 @@ +# wolfSSL Crypt Test Example + +This is the ESP32 Version of the [wolfSSL wolfcrypt test application](https://github.com/wolfSSL/wolfssl/tree/master/wolfcrypt/test). + +Other target boards _should_ work, but have not yet been tested. + +For general information on [wolfSSL examples for Espressif](../README.md), see the +[README](https://github.com/wolfSSL/wolfssl/blob/master/IDE/Espressif/ESP-IDF/README.md) file. + + +## Example Output + +Note the default wolfSSL `user_settings.h` is configured by default to be the most +compatible across the widest ranges of targets. Contact wolfSSL at support@wolfssl.com +for help in optimizing for your particular application, or see the +[docs](https://www.wolfssl.com/documentation/manuals/wolfssl/index.html). + +Compiled and flashed with `idf.py build flash -p /dev/ttyS7 -b 115200 monitor`: + +``` +ets Jun 8 2016 00:22:57 + +rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) +configsip: 0, SPIWP:0xee +clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 +mode:DIO, clock div:2 +load:0x3fff0030,len:6612 +load:0x40078000,len:14788 +load:0x40080400,len:3792 +entry 0x40080694 +I (26) boot: ESP-IDF v4.4.1-dirty 2nd stage bootloader +I (26) boot: compile time 15:25:38 +I (26) boot: chip revision: 1 +I (29) boot_comm: chip revision: 1, min. bootloader chip revision: 0 +I (37) boot.esp32: SPI Speed : 40MHz +I (41) boot.esp32: SPI Mode : DIO +I (46) boot.esp32: SPI Flash Size : 2MB +I (50) boot: Enabling RNG early entropy source... +I (56) boot: Partition Table: +I (59) boot: ## Label Usage Type ST Offset Length +I (67) boot: 0 nvs WiFi data 01 02 00009000 00006000 +I (74) boot: 1 phy_init RF data 01 01 0000f000 00001000 +I (81) boot: 2 factory factory app 00 00 00010000 00100000 +I (89) boot: End of partition table +I (93) boot_comm: chip revision: 1, min. application chip revision: 0 +I (100) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=16ca4h ( 93348) map +I (143) esp_image: segment 1: paddr=00026ccc vaddr=3ffb0000 size=024d4h ( 9428) load +I (147) esp_image: segment 2: paddr=000291a8 vaddr=40080000 size=06e70h ( 28272) load +I (160) esp_image: segment 3: paddr=00030020 vaddr=400d0020 size=412d8h (266968) map +I (257) esp_image: segment 4: paddr=00071300 vaddr=40086e70 size=045a8h ( 17832) load +I (265) esp_image: segment 5: paddr=000758b0 vaddr=50000000 size=00010h ( 16) load +I (270) boot: Loaded app from partition at offset 0x10000 +I (270) boot: Disabling RNG early entropy source... +I (285) cpu_start: Pro cpu up. +I (286) cpu_start: Starting app cpu, entry point is 0x40081088 +I (273) cpu_start: App cpu up. +I (300) cpu_start: Pro cpu start user code +I (300) cpu_start: cpu freq: 160000000 +I (300) cpu_start: Application information: +I (305) cpu_start: Project name: wolfssl_test +I (310) cpu_start: App version: v5.5.3-stable-108-gbd7b442df-di +I (317) cpu_start: Compile time: Nov 17 2022 15:24:40 +I (323) cpu_start: ELF file SHA256: 90957eeb4f0d2246... +I (329) cpu_start: ESP-IDF: v4.4.1-dirty +I (335) heap_init: Initializing. RAM available for dynamic allocation: +I (342) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM +I (348) heap_init: At 3FFB2DF0 len 0002D210 (180 KiB): DRAM +I (354) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM +I (360) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM +I (367) heap_init: At 4008B418 len 00014BE8 (82 KiB): IRAM +I (374) spi_flash: detected chip: generic +I (378) spi_flash: flash io: dio +W (382) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header. +I (396) cpu_start: Starting scheduler on PRO CPU. +I (0) cpu_start: Starting scheduler on APP CPU. +------------------------------------------------------------------------------ + wolfSSL version 5.5.3 +------------------------------------------------------------------------------ +error test passed! +MEMORY test passed! +base64 test passed! +asn test passed! +RANDOM test passed! +MD5 test passed! +MD4 test passed! +SHA test passed! +SHA-256 test passed! +SHA-512 test passed! +Hash test passed! +HMAC-MD5 test passed! +HMAC-SHA test passed! +HMAC-SHA256 test passed! +HMAC-SHA512 test passed! +HMAC-KDF test passed! +TLSv1.3 KDF test passed! +GMAC test passed! +DES test passed! +DES3 test passed! +AES test passed! +AES192 test passed! +AES256 test passed! +AES-GCM test passed! +RSA test passed! +PWDBASED test passed! +ECC test passed! +ECC buffer test passed! +CURVE25519 test passed! +ED25519 test passed! +logging test passed! +time test passed! +mutex test passed! +Test complete +I (136548) wolfcrypt_test: Exiting main with return code: 0 + +I (136548) wolfssl_test: wolf_test_task complete success result code = 0 +``` + +See the README.md file in the upper level 'examples' directory for [more information about examples](../README.md). diff --git a/IDE/PlatformIO/examples/wolfssl_test/include/README b/IDE/PlatformIO/examples/wolfssl_test/include/README new file mode 100644 index 000000000..45496b1f1 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/include/README @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/IDE/PlatformIO/examples/wolfssl_test/lib/README b/IDE/PlatformIO/examples/wolfssl_test/lib/README new file mode 100644 index 000000000..a10cadebe --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into executable file. + +The source code of each library should be placed in an own separate directory +("lib/your_library_name/[here are source files]"). + +For example, see a structure of the following two libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/IDE/PlatformIO/examples/wolfssl_test/platformio.ini b/IDE/PlatformIO/examples/wolfssl_test/platformio.ini new file mode 100644 index 000000000..dda24761d --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/platformio.ini @@ -0,0 +1,20 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:esp32dev] +platform = espressif32 +board = esp32dev +framework = espidf +upload_port = COM82 +monitor_port = COM82 +monitor_speed = 115200 +build_flags = -DWOLFSSL_USER_SETTINGS, -DWOLFSSL_ESP32 +monitor_filters = direct +lib_deps = wolfssl-staging/wolfSSL@^5.7.0-test.1 diff --git a/IDE/PlatformIO/examples/wolfssl_test/sdkconfig.defaults b/IDE/PlatformIO/examples/wolfssl_test/sdkconfig.defaults new file mode 100644 index 000000000..2a5ad756d --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/sdkconfig.defaults @@ -0,0 +1,98 @@ +# sdkconfig.defaults for ESP8266 + ESP32 +# Note that during the build process, settings from sdkconfig.defaults will not override those already in sdkconfig. +# See https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html#custom-sdkconfig-defaults +CONFIG_BENCH_ARGV="-lng 0" +CONFIG_FREERTOS_HZ=1000 +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y + +# +# Default main stack size. See user_settings.h +# +# For wolfSSL SMALL_STACK, 3072 bytes should be sufficient for benchmark app. +# When using RSA, assign at least 10500 bytes, otherwise 5500 usually works for others +CONFIG_ESP_MAIN_TASK_STACK_SIZE=10500 + +# Legacy stack size for older ESP-IDF versions +CONFIG_MAIN_TASK_STACK_SIZE=10500 + +# +# Benchmark must not have CONFIG_NEWLIB_NANO_FORMAT enabled +CONFIG_NEWLIB_NANO_FORMAT=n +# +# Watchdog Timers +# +# We don't want to have the watchdog timeout during tests & benchmarks +# +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=n +# Panic & Watchdog +CONFIG_ESP_INT_WDT_TIMEOUT_MS=10000 +CONFIG_ESP_TASK_WDT_EN=n +CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y +CONFIG_ESP_INT_WDT=n + +# ESP8266 WDT +# CONFIG_ESP_PANIC_PRINT_REBOOT is not set +CONFIG_ESP_PANIC_PRINT_REBOOT=n +CONFIG_ESP_PANIC_PRINT_HALT=y + +# CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set +CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=n + +# ESP8266 Memory +CONFIG_FREERTOS_GLOBAL_DATA_LINK_IRAM=y +CONFIG_HEAP_DISABLE_IRAM=y + +# Performance +# CONFIG_COMPILER_OPTIMIZATION_PERF=y + +# Set max COU frequency (falls back as needed for lower maximum) +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y + +# FreeRTOS ticks at 1ms interval +CONFIG_FREERTOS_UNICORE=y +CONFIG_FREERTOS_HZ=1000 + +# +# Compiler options +# +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y +# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set +# CONFIG_COMPILER_OPTIMIZATION_PERF is not set +# CONFIG_COMPILER_OPTIMIZATION_NONE is not set +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set +CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set +CONFIG_COMPILER_HIDE_PATHS_MACROS=y +# CONFIG_COMPILER_CXX_EXCEPTIONS is not set +# CONFIG_COMPILER_CXX_RTTI is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_NONE is not set +CONFIG_COMPILER_STACK_CHECK_MODE_NORM=y +# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set +CONFIG_COMPILER_STACK_CHECK=y +# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set +# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set +# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DUMP_RTL_FILES is not set +# end of Compiler options + +# We don't know that the min is actually v2, +# but this is the earliest tested. +CONFIG_ESP32C3_REV_MIN_2=y + +# +# Partition Table +# +# CONFIG_PARTITION_TABLE_SINGLE_APP is not set +CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +# CONFIG_PARTITION_TABLE_CUSTOM is not set +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp_large.csv" +CONFIG_PARTITION_TABLE_OFFSET=0x8000 +CONFIG_PARTITION_TABLE_MD5=y +# end of Partition Table diff --git a/IDE/PlatformIO/examples/wolfssl_test/src/CMakeLists.txt b/IDE/PlatformIO/examples/wolfssl_test/src/CMakeLists.txt new file mode 100644 index 000000000..ab3ad38f1 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/src/CMakeLists.txt @@ -0,0 +1,6 @@ +# This file was automatically generated for projects +# without default 'CMakeLists.txt' file. + +FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*) + +idf_component_register(SRCS ${app_sources}) diff --git a/IDE/PlatformIO/examples/wolfssl_test/src/main.c b/IDE/PlatformIO/examples/wolfssl_test/src/main.c new file mode 100644 index 000000000..5ef7558df --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/src/main.c @@ -0,0 +1,24 @@ +#include +#ifdef WOLFSSL_ESPIDF + #include + #include + #include +#endif +#include +#include +#include +#define TAG "demo" + +void app_main() { + int ret = 0; +#ifdef WOLFSSL_ESPIDF + ESP_LOGI(TAG, "Found WOLFSSL_ESPIDF!"); +#endif + printf("Hello World wolfSSL Version %s", LIBWOLFSSL_VERSION_STRING); + +#if defined(HAVE_VERSION_EXTENDED_INFO) && defined(WOLFSSL_ESPIDF) + esp_ShowExtendedSystemInfo(); +#endif + ret = wolf_test_task(); + printf("wolf_test_task result %d", ret); +} diff --git a/IDE/PlatformIO/examples/wolfssl_test/test/README b/IDE/PlatformIO/examples/wolfssl_test/test/README new file mode 100644 index 000000000..b0416ad8b --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Test Runner and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html diff --git a/IDE/PlatformIO/examples/wolfssl_test/wolfssl_test.code-workspace b/IDE/PlatformIO/examples/wolfssl_test/wolfssl_test.code-workspace new file mode 100644 index 000000000..782d7ef50 --- /dev/null +++ b/IDE/PlatformIO/examples/wolfssl_test/wolfssl_test.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "name": "wolfssl_test", + "path": "." + } + ], + "settings": { + "files.associations": { + "settings.h": "c" + } + } +} diff --git a/IDE/PlatformIO/include.am b/IDE/PlatformIO/include.am new file mode 100644 index 000000000..a112a337f --- /dev/null +++ b/IDE/PlatformIO/include.am @@ -0,0 +1,39 @@ +# vim:ft=automake +# included from Top Level Makefile.am +# All paths should be given relative to the root +# +# NOTE: append_wolfssl_git_version.sh is not included as the +# distribution file set will not contain GitHub info +# +# see: https://github.com/wolfSSL/wolfssl/pull/5955 +# +# Don't list any config.h files here + +EXTRA_DIST+= IDE/PlatformIO/README.md + +EXTRA_DIST+= IDE/PlatformIO/examples/README.md +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_platformio.code-workspace + +# wolfssl_benchmark example +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/CMakeLists.txt +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/platformio.ini +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/README.md +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/sdkconfig.defaults +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/wolfssl_benchmark.code-workspace +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/include/README +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/lib/README +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/src/CMakeLists.txt +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/src/main.c +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_benchmark/test/README + +# wolfssl_test example +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/CMakeLists.txt +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/platformio.ini +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/README.md +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/sdkconfig.defaults +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/wolfssl_test.code-workspace +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/include/README +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/lib/README +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/src/CMakeLists.txt +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/src/main.c +EXTRA_DIST+= IDE/PlatformIO/examples/wolfssl_test/test/README diff --git a/IDE/include.am b/IDE/include.am index 6343981e1..65e07cc33 100644 --- a/IDE/include.am +++ b/IDE/include.am @@ -31,6 +31,7 @@ include IDE/MQX/include.am include IDE/MSVS-2019-AZSPHERE/include.am include IDE/mynewt/include.am include IDE/NETOS/include.am +include IDE/PlatformIO/include.am include IDE/QNX/include.am include IDE/Renesas/cs+/Projects/include.am include IDE/Renesas/e2studio/DK-S7G2/include.am @@ -70,3 +71,4 @@ EXTRA_DIST+= IDE/LPCXPRESSO EXTRA_DIST+= IDE/MDK-ARM EXTRA_DIST+= IDE/MYSQL EXTRA_DIST+= IDE/OPENSTM32/README.md +EXTRA_DIST+= IDE/PlatformIO