diff --git a/IDE/ECLIPSE/SIFIVE/README.md b/IDE/ECLIPSE/SIFIVE/README.md index 3e7e39303..030e14049 100644 --- a/IDE/ECLIPSE/SIFIVE/README.md +++ b/IDE/ECLIPSE/SIFIVE/README.md @@ -1,199 +1 @@ -# SiFive RISC-V HiFive1 Port - -## Overview -You can enable the wolfSSL support for RISC-V using the `#define WOLFSSL_SIFIVE_RISC_V`. - -## Prerequisites -1. Follow the instructions on the SiFive GitHub [here](https://github.com/sifive/freedom-e-sdk) and SiFive website [here](https://www.sifive.com/) to download the freedom-e-sdk and software tools. -3. Run a simple hello application on your development board to confirm that your board functions as expected and the communication between your computer and the board works. - -## Usage -You can start with a wolfcrypt example project to integrate the wolfSSL source code. -wolfSSL supports a compile-time user configurable options in the `IDE/ECLIPSE/SIFIVE/user_settings.h` file. - -The `IDE/ECLIPSE/SIFIVE/main.c` example application provides a function to run the selected examples at compile time through the following two #defines in user_settings.h. You can define these macro options to disable the test run. -``` -- #undef NO_CRYPT_TEST -- #undef NO_CRYPT_BENCHMARK -``` - -## Setup -### Setting up the SDK with wolfSSL -1. Download the wolfSSL source code or a zip file from GitHub and place it under your SDK `$HOME` directory. You can also copy or simlink to the source. -``` - For example, - $ cd $HOME - $ git clone --depth=1 https://github.com/wolfSSL/wolfssl.git - -``` -2. Copy the wolfcrypt example project into your `freedom-e-sdk/software` directory. - -``` - $ cp -rf ~/wolfssl/IDE/ECLIPSE/SIFIVE ~/freedom-e-sdk/software/wolfcrypt -``` - -3. Edit your `~/freedom-e-sdk/scripts/standalone.mk` and add the following line after the last RISCV_CFLAGS entry: - -``` - RISCV_CFLAGS += -I$(WOLFSSL_SRC_DIR) -I$(WOLFSSL_SRC_DIR)/IDE/ECLIPSE/SIFIVE -DWOLFSSL_USER_SETTINGS -``` - -4. WOLFSSL_SRC_DIR variable must be set in the environment when GNU make is started. - -``` - $ export WOLFSSL_SRC_DIR=~/wolfssl -``` - -5. Setup your riscv64 compiler - -``` - $ export RISCV_OPENOCD_PATH=/opt/riscv-openocd -``` -6. (Optional) Setup OpenOCD if your target supports it: - -``` - $ export RISCV_OPENOCD_PATH=/opt/riscv-openocd -``` -## Building and Running - -You can build from source or create a static library. - -1. Using command-line: - -``` - $ cd freedom-e-sdk - $ make PROGRAM=wolfcrypt TARGET=sifive-hifive1-revb CONFIGURATION=debug clean software upload -``` -This example cleans, builds and uploads the software on the sifive-hifive1-revb target but you can also combine and build for any of the supported targets. - -Review the test results on the target console. - -2. Building a static library for RISC-V using a cross-compiler: - -``` -$ cd $WOLFSSL_SRC_DIR - -$./configure --host=riscv64-unknown-elf \ -CC=riscv64-unknown-elf-gcc \ -AR=riscv64-unknown-elf-ar \ -AS=riscv64-unknown-elf-as \ -RANLIB=$RISCV_PATH/bin/riscv64-unknown-elf-gcc-ranlib \ -LD=riscv64-unknown-elf-ld \ -CXX=riscv64-unknown-elf-g++ \ ---disable-examples --enable-static --disable-shared \ -CFLAGS="-march=rv32imac -mabi=ilp32 -mcmodel=medlow -ffunction-sections -fdata-sections -I~/freedom-e-sdk/bsp/sifive-hifive1/install/include -O0 -g -DNO_FILESYSTEM -DWOLFSSL_NO_SOCK -DNO_WRITEV -DWOLFCRYPT_ONLY -DWOLFSSL_SIFIVE_RISC_V" - -$make -$sudo make install -``` -You can now build and link your software to the wolfSSL libwolfssl.a static library. - -### `wolfcrypt_test()` - -wolfcrypt_test() prints a message on the target console similar to the following output: - -``` -SiFive HiFive1 Demo -Setting clock to 320MHz -Actual Clock 320MHz - -error test passed! -MEMORY test passed! -base64 test passed! -asn test passed! -SHA test passed! -SHA-256 test passed! -SHA-512 test passed! -Hash test passed! -HMAC-SHA test passed! -HMAC-SHA256 test passed! -HMAC-SHA512 test passed! -GMAC test passed! -Chacha test passed! -POLY1305 test passed! -ChaCha20-Poly1305 AEAD test passed! -AES test passed! -AES192 test passed! -AES256 test passed! -AES-GCM test passed! -RANDOM test passed! -ECC test passed! -ECC buffer test passed! -CURVE25519 test passed! -ED25519 test passed! -logging test passed! -mutex test passed! -Test complete -``` -### `benchmark_test()` - -benchmark_test() prints a message on the target console similar to the following output. - -TARGET=sifive-hifive1-revb: - -``` -SiFive HiFive1 Demo -Setting clock to 320MHz -Actual Clock 320MHz - ------------------------------------------------------------------------------- - wolfSSL version 4.0.0 ------------------------------------------------------------------------------- -wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each) -RNG 250 KB took 1.098 seconds, 227.714 KB/s -AES-128-CBC-enc 50 KB took 1.132 seconds, 44.175 KB/s -AES-128-CBC-dec 50 KB took 1.142 seconds, 43.778 KB/s -AES-192-CBC-enc 50 KB took 1.250 seconds, 40.007 KB/s -AES-192-CBC-dec 50 KB took 1.260 seconds, 39.677 KB/s -AES-256-CBC-enc 50 KB took 1.368 seconds, 36.552 KB/s -AES-256-CBC-dec 50 KB took 1.378 seconds, 36.279 KB/s -AES-128-GCM-enc 25 KB took 1.225 seconds, 20.412 KB/s -AES-128-GCM-dec 25 KB took 1.225 seconds, 20.402 KB/s -AES-192-GCM-enc 25 KB took 1.290 seconds, 19.373 KB/s -AES-192-GCM-dec 25 KB took 1.291 seconds, 19.366 KB/s -AES-256-GCM-enc 25 KB took 1.352 seconds, 18.487 KB/s -AES-256-GCM-dec 25 KB took 1.353 seconds, 18.478 KB/s -CHACHA 1 MB took 1.006 seconds, 1.020 MB/s -CHA-POLY 700 KB took 1.032 seconds, 678.045 KB/s -POLY1305 2 MB took 1.007 seconds, 2.255 MB/s -SHA 2 MB took 1.002 seconds, 1.511 MB/s -SHA-256 525 KB took 1.011 seconds, 519.279 KB/s -SHA-512 275 KB took 1.017 seconds, 270.477 KB/s -HMAC-SHA 1 MB took 1.013 seconds, 1.399 MB/s -HMAC-SHA256 525 KB took 1.019 seconds, 515.020 KB/s -HMAC-SHA512 275 KB took 1.032 seconds, 266.351 KB/s -ECC 256 key gen 2 ops took 1.104 sec, avg 551.834 ms, 1.812 ops/sec -ECDHE 256 agree 2 ops took 1.101 sec, avg 550.400 ms, 1.817 ops/sec -ECDSA 256 sign 2 ops took 1.173 sec, avg 586.502 ms, 1.705 ops/sec -ECDSA 256 verify 2 ops took 2.153 sec, avg 1076.294 ms, 0.929 ops/sec -CURVE 25519 key gen 2 ops took 1.629 sec, avg 814.423 ms, 1.228 ops/sec -CURVE 25519 agree 2 ops took 1.626 sec, avg 813.156 ms, 1.230 ops/sec -ED 25519 key gen 1 ops took 1.436 sec, avg 1436.096 ms, 0.696 ops/sec -ED 25519 sign 2 ops took 2.913 sec, avg 1456.421 ms, 0.687 ops/sec -ED 25519 verify 2 ops took 5.012 sec, avg 2506.012 ms, 0.399 ops/sec -Benchmark complete -``` - -## Tested Configurations -- P-RNG (NIST DRBG) with SHA-256 -- SHA 1/256/512 -- AES 128/192/256 CBC/GCM -- ECC 256 sign/verify/shared secret with fast math or Single Precision (SP) library -- ED25519/Curve25519 -- HMAC -- ChaCha20/Poly1305 - -## Known Caveats -- If you find the wolfcrypt test stuck on early_trap_vector error, it is like related to memory issues -- Using the `__stack_size` default value of 0x400 will not be enough for the ECC test to pass. -The `IDE/ECLIPSE/SIFIVE/Makefile` overwrites the value with 0x1000 (4 KBytes) -- Enabling RSA will cause the ECC test to fail due to memory shortage. - -## References - -The test results were collected from a SiFive reference platform target with the following hardware, software and tool chains: -- HiFive1 Rev A/Rev B: HiFive1 Development Board with the Freedom Everywhere SoC, E300 -- freedom-e-sdk -- wolfssl [latest version](https://github.com/wolfSSL/wolfssl) - -For more information or questions, please email [support@wolfssl.com](mailto:support@wolfssl.com) +This folder has moved to `IDE/RISCV/SIFIVE-HIFIVE1`. \ No newline at end of file diff --git a/IDE/ECLIPSE/SIFIVE/include.am b/IDE/ECLIPSE/SIFIVE/include.am index 5f9550dc2..448ca0de1 100644 --- a/IDE/ECLIPSE/SIFIVE/include.am +++ b/IDE/ECLIPSE/SIFIVE/include.am @@ -3,7 +3,4 @@ # All paths should be given relative to the root EXTRA_DIST += \ - IDE/ECLIPSE/SIFIVE/README.md \ - IDE/ECLIPSE/SIFIVE/main.c \ - IDE/ECLIPSE/SIFIVE/Makefile\ - IDE/ECLIPSE/SIFIVE/user_settings.h + IDE/ECLIPSE/SIFIVE/README.md diff --git a/IDE/ECLIPSE/SIFIVE/Makefile b/IDE/RISCV/SIFIVE-HIFIVE1/Makefile similarity index 100% rename from IDE/ECLIPSE/SIFIVE/Makefile rename to IDE/RISCV/SIFIVE-HIFIVE1/Makefile diff --git a/IDE/RISCV/SIFIVE-HIFIVE1/README.md b/IDE/RISCV/SIFIVE-HIFIVE1/README.md new file mode 100644 index 000000000..5e1183dea --- /dev/null +++ b/IDE/RISCV/SIFIVE-HIFIVE1/README.md @@ -0,0 +1,199 @@ +# SiFive RISC-V HiFive1 Port + +## Overview +You can enable the wolfSSL support for RISC-V using the `#define WOLFSSL_SIFIVE_RISC_V`. + +## Prerequisites +1. Follow the instructions on the SiFive GitHub [here](https://github.com/sifive/freedom-e-sdk) and SiFive website [here](https://www.sifive.com/) to download the freedom-e-sdk and software tools. +3. Run a simple hello application on your development board to confirm that your board functions as expected and the communication between your computer and the board works. + +## Usage +You can start with a wolfcrypt example project to integrate the wolfSSL source code. +wolfSSL supports a compile-time user configurable options in the `IDE/RISCV/SIFIVE-HIFIVE1/user_settings.h` file. + +The `IDE/RISCV/SIFIVE-HIFIVE1/main.c` example application provides a function to run the selected examples at compile time through the following two #defines in user_settings.h. You can define these macro options to disable the test run. +``` +- #undef NO_CRYPT_TEST +- #undef NO_CRYPT_BENCHMARK +``` + +## Setup +### Setting up the SDK with wolfSSL +1. Download the wolfSSL source code or a zip file from GitHub and place it under your SDK `$HOME` directory. You can also copy or simlink to the source. +``` + For example, + $ cd $HOME + $ git clone --depth=1 https://github.com/wolfSSL/wolfssl.git + +``` +2. Copy the wolfcrypt example project into your `freedom-e-sdk/software` directory. + +``` + $ cp -rf ~/wolfssl/IDE/RISCV/SIFIVE-HIFIVE1 ~/freedom-e-sdk/software/wolfcrypt +``` + +3. Edit your `~/freedom-e-sdk/scripts/standalone.mk` and add the following line after the last RISCV_CFLAGS entry: + +``` + RISCV_CFLAGS += -I$(WOLFSSL_SRC_DIR) -I$(WOLFSSL_SRC_DIR)/IDE/RISCV/SIFIVE-HIFIVE1 -DWOLFSSL_USER_SETTINGS +``` + +4. WOLFSSL_SRC_DIR variable must be set in the environment when GNU make is started. + +``` + $ export WOLFSSL_SRC_DIR=~/wolfssl +``` + +5. Setup your riscv64 compiler + +``` + $ export RISCV_OPENOCD_PATH=/opt/riscv-openocd +``` +6. (Optional) Setup OpenOCD if your target supports it: + +``` + $ export RISCV_OPENOCD_PATH=/opt/riscv-openocd +``` +## Building and Running + +You can build from source or create a static library. + +1. Using command-line: + +``` + $ cd freedom-e-sdk + $ make PROGRAM=wolfcrypt TARGET=sifive-hifive1-revb CONFIGURATION=debug clean software upload +``` +This example cleans, builds and uploads the software on the sifive-hifive1-revb target but you can also combine and build for any of the supported targets. + +Review the test results on the target console. + +2. Building a static library for RISC-V using a cross-compiler: + +``` +$ cd $WOLFSSL_SRC_DIR + +$./configure --host=riscv64-unknown-elf \ +CC=riscv64-unknown-elf-gcc \ +AR=riscv64-unknown-elf-ar \ +AS=riscv64-unknown-elf-as \ +RANLIB=$RISCV_PATH/bin/riscv64-unknown-elf-gcc-ranlib \ +LD=riscv64-unknown-elf-ld \ +CXX=riscv64-unknown-elf-g++ \ +--disable-examples --enable-static --disable-shared \ +CFLAGS="-march=rv32imac -mabi=ilp32 -mcmodel=medlow -ffunction-sections -fdata-sections -I~/freedom-e-sdk/bsp/sifive-hifive1/install/include -O0 -g -DNO_FILESYSTEM -DWOLFSSL_NO_SOCK -DNO_WRITEV -DWOLFCRYPT_ONLY -DWOLFSSL_SIFIVE_RISC_V" + +$make +$sudo make install +``` +You can now build and link your software to the wolfSSL libwolfssl.a static library. + +### `wolfcrypt_test()` + +wolfcrypt_test() prints a message on the target console similar to the following output: + +``` +SiFive HiFive1 Demo +Setting clock to 320MHz +Actual Clock 320MHz + +error test passed! +MEMORY test passed! +base64 test passed! +asn test passed! +SHA test passed! +SHA-256 test passed! +SHA-512 test passed! +Hash test passed! +HMAC-SHA test passed! +HMAC-SHA256 test passed! +HMAC-SHA512 test passed! +GMAC test passed! +Chacha test passed! +POLY1305 test passed! +ChaCha20-Poly1305 AEAD test passed! +AES test passed! +AES192 test passed! +AES256 test passed! +AES-GCM test passed! +RANDOM test passed! +ECC test passed! +ECC buffer test passed! +CURVE25519 test passed! +ED25519 test passed! +logging test passed! +mutex test passed! +Test complete +``` +### `benchmark_test()` + +benchmark_test() prints a message on the target console similar to the following output. + +TARGET=sifive-hifive1-revb: + +``` +SiFive HiFive1 Demo +Setting clock to 320MHz +Actual Clock 320MHz + +------------------------------------------------------------------------------ + wolfSSL version 4.0.0 +------------------------------------------------------------------------------ +wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each) +RNG 250 KB took 1.098 seconds, 227.714 KB/s +AES-128-CBC-enc 50 KB took 1.132 seconds, 44.175 KB/s +AES-128-CBC-dec 50 KB took 1.142 seconds, 43.778 KB/s +AES-192-CBC-enc 50 KB took 1.250 seconds, 40.007 KB/s +AES-192-CBC-dec 50 KB took 1.260 seconds, 39.677 KB/s +AES-256-CBC-enc 50 KB took 1.368 seconds, 36.552 KB/s +AES-256-CBC-dec 50 KB took 1.378 seconds, 36.279 KB/s +AES-128-GCM-enc 25 KB took 1.225 seconds, 20.412 KB/s +AES-128-GCM-dec 25 KB took 1.225 seconds, 20.402 KB/s +AES-192-GCM-enc 25 KB took 1.290 seconds, 19.373 KB/s +AES-192-GCM-dec 25 KB took 1.291 seconds, 19.366 KB/s +AES-256-GCM-enc 25 KB took 1.352 seconds, 18.487 KB/s +AES-256-GCM-dec 25 KB took 1.353 seconds, 18.478 KB/s +CHACHA 1 MB took 1.006 seconds, 1.020 MB/s +CHA-POLY 700 KB took 1.032 seconds, 678.045 KB/s +POLY1305 2 MB took 1.007 seconds, 2.255 MB/s +SHA 2 MB took 1.002 seconds, 1.511 MB/s +SHA-256 525 KB took 1.011 seconds, 519.279 KB/s +SHA-512 275 KB took 1.017 seconds, 270.477 KB/s +HMAC-SHA 1 MB took 1.013 seconds, 1.399 MB/s +HMAC-SHA256 525 KB took 1.019 seconds, 515.020 KB/s +HMAC-SHA512 275 KB took 1.032 seconds, 266.351 KB/s +ECC 256 key gen 2 ops took 1.104 sec, avg 551.834 ms, 1.812 ops/sec +ECDHE 256 agree 2 ops took 1.101 sec, avg 550.400 ms, 1.817 ops/sec +ECDSA 256 sign 2 ops took 1.173 sec, avg 586.502 ms, 1.705 ops/sec +ECDSA 256 verify 2 ops took 2.153 sec, avg 1076.294 ms, 0.929 ops/sec +CURVE 25519 key gen 2 ops took 1.629 sec, avg 814.423 ms, 1.228 ops/sec +CURVE 25519 agree 2 ops took 1.626 sec, avg 813.156 ms, 1.230 ops/sec +ED 25519 key gen 1 ops took 1.436 sec, avg 1436.096 ms, 0.696 ops/sec +ED 25519 sign 2 ops took 2.913 sec, avg 1456.421 ms, 0.687 ops/sec +ED 25519 verify 2 ops took 5.012 sec, avg 2506.012 ms, 0.399 ops/sec +Benchmark complete +``` + +## Tested Configurations +- P-RNG (NIST DRBG) with SHA-256 +- SHA 1/256/512 +- AES 128/192/256 CBC/GCM +- ECC 256 sign/verify/shared secret with fast math or Single Precision (SP) library +- ED25519/Curve25519 +- HMAC +- ChaCha20/Poly1305 + +## Known Caveats +- If you find the wolfcrypt test stuck on early_trap_vector error, it is like related to memory issues +- Using the `__stack_size` default value of 0x400 will not be enough for the ECC test to pass. +The `IDE/RISCV/SIFIVE-HIFIVE1/Makefile` overwrites the value with 0x1000 (4 KBytes) +- Enabling RSA will cause the ECC test to fail due to memory shortage. + +## References + +The test results were collected from a SiFive reference platform target with the following hardware, software and tool chains: +- HiFive1 Rev A/Rev B: HiFive1 Development Board with the Freedom Everywhere SoC, E300 +- freedom-e-sdk +- wolfssl [latest version](https://github.com/wolfSSL/wolfssl) + +For more information or questions, please email [support@wolfssl.com](mailto:support@wolfssl.com) diff --git a/IDE/RISCV/SIFIVE-HIFIVE1/include.am b/IDE/RISCV/SIFIVE-HIFIVE1/include.am new file mode 100644 index 000000000..4e90b624e --- /dev/null +++ b/IDE/RISCV/SIFIVE-HIFIVE1/include.am @@ -0,0 +1,9 @@ +# vim:ft=automake +# included from Top Level Makefile.am +# All paths should be given relative to the root + +EXTRA_DIST += \ + IDE/RISCV/SIFIVE-HIFIVE1/README.md \ + IDE/RISCV/SIFIVE-HIFIVE1/main.c \ + IDE/RISCV/SIFIVE-HIFIVE1/Makefile\ + IDE/RISCV/SIFIVE-HIFIVE1/user_settings.h diff --git a/IDE/ECLIPSE/SIFIVE/main.c b/IDE/RISCV/SIFIVE-HIFIVE1/main.c similarity index 100% rename from IDE/ECLIPSE/SIFIVE/main.c rename to IDE/RISCV/SIFIVE-HIFIVE1/main.c diff --git a/IDE/ECLIPSE/SIFIVE/user_settings.h b/IDE/RISCV/SIFIVE-HIFIVE1/user_settings.h similarity index 100% rename from IDE/ECLIPSE/SIFIVE/user_settings.h rename to IDE/RISCV/SIFIVE-HIFIVE1/user_settings.h diff --git a/IDE/RISCV/README.md b/IDE/RISCV/SIFIVE-UNLEASHED/README.md similarity index 99% rename from IDE/RISCV/README.md rename to IDE/RISCV/SIFIVE-UNLEASHED/README.md index a8f901313..a68068281 100644 --- a/IDE/RISCV/README.md +++ b/IDE/RISCV/SIFIVE-UNLEASHED/README.md @@ -24,7 +24,7 @@ See `freedom-u-sdk/README.md` file for instructions on updating the SD card U-Bo ### Installing U-Boot -Insert SD card from Unleashed into host and determine the assigned character sequence (X) for the media. +Insert SD card from Unleashed into host and determine the assigned `/dev/sdX` for the media. From `freedom-u-sdk` directory: diff --git a/IDE/RISCV/SIFIVE-UNLEASHED/include.am b/IDE/RISCV/SIFIVE-UNLEASHED/include.am new file mode 100644 index 000000000..047847c71 --- /dev/null +++ b/IDE/RISCV/SIFIVE-UNLEASHED/include.am @@ -0,0 +1,5 @@ +# vim:ft=automake +# included from Top Level Makefile.am +# All paths should be given relative to the root + +EXTRA_DIST+= IDE/RISCV/SIFIVE-UNLEASHED/README.md diff --git a/IDE/RISCV/include.am b/IDE/RISCV/include.am index 5c0e8d8e4..b9deeab06 100644 --- a/IDE/RISCV/include.am +++ b/IDE/RISCV/include.am @@ -2,4 +2,5 @@ # included from Top Level Makefile.am # All paths should be given relative to the root -EXTRA_DIST+= IDE/RISCV/README.md +include IDE/RISCV/SIFIVE-HIFIVE1/include.am +include IDE/RISCV/SIFIVE-UNLEASHED/include.am diff --git a/wolfcrypt/src/include.am b/wolfcrypt/src/include.am index 06bf677fe..f6961baec 100644 --- a/wolfcrypt/src/include.am +++ b/wolfcrypt/src/include.am @@ -83,7 +83,7 @@ EXTRA_DIST += wolfcrypt/src/port/ti/ti-aes.c \ wolfcrypt/src/port/Renesas/renesas_tsip_aes.c \ wolfcrypt/src/port/Renesas/renesas_tsip_sha.c \ wolfcrypt/src/port/Renesas/renesas_tsip_util.c \ - wolfcrypt/src/port/Renesas/README_TSIP.md + wolfcrypt/src/port/Renesas/README.md if BUILD_CRYPTOCB