mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 18:57:27 +02:00
Merge pull request #1937 from tmael/portingMicriumIII
Micrium uC/OS-III port (updated readme & user_settings)
This commit is contained in:
@ -5,11 +5,11 @@ You can enable the wolfSSL support for Micrium μC/OS-III RTOS available [here](
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You can start with your IDE-based project for Micrium uC/OS-III and uC/TCP stack. You must include the uC-Clk module into your project because wolfSSL uses Micrium’s Clk_GetTS_Unix () function from <clk.h> in order to authenticate certificate date ranges.
|
You can start with your IDE-based example project for Micrium uC/OS-III and uC/TCPIP stack. You must include the uC-Clk module into your project because wolfSSL uses Micrium’s Clk_GetTS_Unix () function from <clk.h> in order to authenticate the start and end dates of certificates.
|
||||||
|
|
||||||
wolfSSL supports a compile-time user configurable options in the `IDE/ECLIPSE/MICRIUM/user_settings.h` file.
|
wolfSSL supports a compile-time user configurable options in the `IDE/ECLIPSE/MICRIUM/user_settings.h` file.
|
||||||
|
|
||||||
The `wolfsslRunTests.c` example application provides a simple function to run the selected examples at compile time through the following four #defines (see user_settings.h).
|
The `wolfsslRunTests.c` example application provides a simple function to run the selected examples at compile time through the following four #defines in user_settings.h.
|
||||||
|
|
||||||
```
|
```
|
||||||
1. #define WOLFSSL_WOLFCRYPT_TEST
|
1. #define WOLFSSL_WOLFCRYPT_TEST
|
||||||
@ -17,10 +17,11 @@ The `wolfsslRunTests.c` example application provides a simple function to run th
|
|||||||
3. #define WOLFSSL_CLIENT_TEST
|
3. #define WOLFSSL_CLIENT_TEST
|
||||||
4. #define WOLFSSL_SERVER_TEST
|
4. #define WOLFSSL_SERVER_TEST
|
||||||
|
|
||||||
Please define one or all of the above options.
|
You can define one or all of the above options.
|
||||||
```
|
```
|
||||||
In your IDE, create the following folder and subfolders structures.
|
1. Open your IDE-based example project for Micrium uC/OS-III (with the uC-Clk module) and uC/TCPIP stack.
|
||||||
The folder hierarcy is the same as the wolfSSL folders with an exception of the exampleTLS folder.
|
|
||||||
|
2. Create the following folder and sub-folders structures in your project.
|
||||||
```
|
```
|
||||||
wolfssl
|
wolfssl
|
||||||
|src
|
|src
|
||||||
@ -33,25 +34,25 @@ wolfssl
|
|||||||
|wolfcrypt
|
|wolfcrypt
|
||||||
|exampleTLS
|
|exampleTLS
|
||||||
```
|
```
|
||||||
In your project, select the exampleTLS folder, add or link all of the header and source files in `IDE/ECLIPSE/MICRIUM/` folder into the exampleTLS folder.
|
The folder hierarchy is the same as the wolfSSL folders with an exception of the exampleTLS folder.
|
||||||
|
|
||||||
For each of the other folders, add or link all the source code in the corresponding folder.
|
3. Right click on the exampleTLS folder, add or link all of the header and source files in `IDE/ECLIPSE/MICRIUM/` folder into the exampleTLS folder.
|
||||||
|
|
||||||
Remove non-C platform dependent files from your build. At the moment, only aes_asm.asm and aes_asm.s must be removed from your wolfssl/wolfcrypt/src folder.
|
4. Right click on each folders, add or link all the source code in the corresponding folder in wolfSSL.
|
||||||
|
|
||||||
In your C/C++ compiler preprocessor settings, add the wolfSSL directory and sub dir to your include paths.
|
5. Remove non-C platform dependent files from your build. At the moment, only aes_asm.asm and aes_asm.s must be removed from your wolfssl/wolfcrypt/src folder.
|
||||||
|
|
||||||
|
6. In your C/C++ compiler preprocessor settings, add the wolfSSL directories to your include paths.
|
||||||
Here's an example of the paths that must be added.
|
Here's an example of the paths that must be added.
|
||||||
```
|
```
|
||||||
$PROJ_DIR$\...\..
|
$PROJ_DIR$\...
|
||||||
$PROJ_DIR$\...\src
|
|
||||||
$PROJ_DIR$\...\wolfcrypt
|
$PROJ_DIR$\...\wolfcrypt
|
||||||
$PROJ_DIR$\...\wolfssl
|
$PROJ_DIR$\...\wolfssl
|
||||||
$PROJ_DIR$\...\wolfssl\wolfcrypt
|
|
||||||
$PROJ_DIR$\...\IDE\ECLIPSE\MICRIUM
|
$PROJ_DIR$\...\IDE\ECLIPSE\MICRIUM
|
||||||
```
|
```
|
||||||
In your C/C++ compiler preprocessor settings, define the WOLFSSL_USER_SETTINGS symbol to enable the addition of user_settings.h file in your projects.
|
7. In your C/C++ compiler preprocessor settings, define the WOLFSSL_USER_SETTINGS symbol to add user_settings.h file in your project.
|
||||||
|
|
||||||
Add a call to `wolfsslRunTests()` from your startup task. Here's an example:
|
8. Add a call to `wolfsslRunTests()` from your startup task. Here's an example:
|
||||||
```
|
```
|
||||||
static void App_TaskStart (void *p_arg)
|
static void App_TaskStart (void *p_arg)
|
||||||
{
|
{
|
||||||
@ -63,8 +64,18 @@ static void App_TaskStart (void *p_arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
The starting project is based on an IAR EWARM project from Micrium download center at [micrium_twr-k70f120m-os3/](https://www.micrium.com/download/micrium_twr-k70f120m-os3/)
|
9. Rebuild all your project.
|
||||||
The following test results were collected from the TWR-K70F120M|Tower System Board|Kinetis MCUs|NXP.
|
|
||||||
|
10. Now you are ready to download and debug your image on the board.
|
||||||
|
|
||||||
|
The test results below were collected from the NXP Kinetis K70 (Freescale TWR-K70F120M MCU) tower system board with the following software and tool chains:
|
||||||
|
|
||||||
|
- IAR Embedded Workbench IDE - ARM 8.32.1 (IAR ELF Linker V8.32.1.169/W32 for ARM)
|
||||||
|
|
||||||
|
- The starting project is based on an IAR EWARM project from Micrium download center at [micrium_twr-k70f120m-os3/](https://www.micrium.com/download/micrium_twr-k70f120m-os3/) but the K70X_FLASH.icf linker script file was slightly modified to configure the stack and heap sizes to 16KB and 20KB. The test was run on a 1 MBytes of program flash and 128 KBytes of static RAM.
|
||||||
|
|
||||||
|
- wolfssl [latest version](https://github.com/wolfSSL/wolfssl)
|
||||||
|
|
||||||
|
|
||||||
### `WOLFSSL_WOLFCRYPT_TEST` output of wolfcrypt_test()
|
### `WOLFSSL_WOLFCRYPT_TEST` output of wolfcrypt_test()
|
||||||
```
|
```
|
||||||
@ -89,50 +100,61 @@ DS3 test passed!
|
|||||||
AES test passed!
|
AES test passed!
|
||||||
AES192 test passed!
|
AES192 test passed!
|
||||||
AES256 test passed!
|
AES256 test passed!
|
||||||
AES-GM test pased!
|
AES-GM test passed!
|
||||||
RANDOM test passed!
|
RANDOM test passed!
|
||||||
RSA test passe!
|
RSA test passed!
|
||||||
DH tes passd!
|
DH test passed!
|
||||||
DSA test passe!
|
DSA test passed!
|
||||||
PWDBASED test passed!
|
PWDBASED test passed!
|
||||||
ECC test passed!
|
ECC test passed!
|
||||||
ECC buffer test pssed!
|
ECC buffer test passed!
|
||||||
CURVE25519 tst passed!
|
CURVE25519 test passed!
|
||||||
ED25519 test passed!
|
ED25519 test passed!
|
||||||
logging tes passd!
|
logging test passed!
|
||||||
mutex testpassed!
|
mutex test passed!
|
||||||
memcb test passed!
|
memcb test passed!
|
||||||
```
|
```
|
||||||
### `WOLFSSL_BENCHMARK_TEST` output of benchmark_test()
|
### `WOLFSSL_BENCHMARK_TEST` output of benchmark_test()
|
||||||
```
|
```
|
||||||
---------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
wolfSSL version 3.5.5
|
wolfSSL version 3.15.5
|
||||||
----------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
wolCrypt Bencmark (bloc byte 1024 min 1.0 se each
|
wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each)
|
||||||
RNG 20 KB tooks 1.108 seconds, 225.701 KB/s
|
RNG 225 KB tooks 1.026 seconds, 219.313 KB/s
|
||||||
AES-128-CBCenc 250 KB tooks 1.056 seconds, 236.759KB/s
|
AES-128-CBC-enc 250 KB toks 1.105 seconds 226.210 KB/s
|
||||||
AES-128-CBC-dec 250KB toks 1.51 seonds, 237.817 KB/s
|
AES-128-CBC-dec 225 KB tooks 1.005 seconds, 223.922 KB/s
|
||||||
AES-192-CBC-enc 225 KB toks 1.025 seconds, 219.473 KB/s
|
AES-192-CBC-enc 225 KB tooks 1.076 seconds, 209.104 KB/s
|
||||||
AES-192-CB-dec 225KB tooks 1.016 econd, 22.348 KB/s
|
AES-192-CBC-dec 225 KB tooks 1.077 seconds, 208.981 K/s
|
||||||
AES256-CBC-enc 225 KB tooks 1.100 seconds, 204.540 KB/s
|
AES-56-CBC-enc 200 KB tooks 1.029 seconds, 19.396 KB/s
|
||||||
AES-256-CBC-dec 225 KB tooks 1.083 seconds, 20.848 KB/s
|
AES-256-CBC-dec 200 KB toks 1.022 seconds, 195.785 KB/s
|
||||||
AES-128-GCM-enc 125 B toos 1.209 seonds, 103.394 KB/s
|
AES-128-GCM-enc 125 KB tooks 1.28 secnds, 101.70 KB/s
|
||||||
AES-128-GCM-dec 125 B tooks 1.09 seconds, 103.376 KB/s
|
AES-128-GC-dec 125 KB tooks 1.228 seconds 101.756 KB/s
|
||||||
AES-192-GCM-dec 100 KB tooks 1.007 seconds, 99.303 KB/s
|
AES-192-GCM-enc 100 KB tooks 1.026 seconds, 97.493 KB/s
|
||||||
AES-256-GM-enc 100 KB tooks 1.043 seconds, 95.885 KB/
|
AES-192-GCM-dec 100 KB tooks 1.026 seconds, 97.480 KB/s
|
||||||
AES-256-GCM-dec 100 KB tooks 1.043 econds, 9.869 B/s
|
AES-256-GCM-enc 100 KB tooks 1.065 seconds, 93.909 KB/s
|
||||||
RABBIT 2 MB tooks 1.001 econd, 2.245 MB/s
|
AES-256-GC-dec 100 KB tooks 1.065 seconds, 93.897 KB/s
|
||||||
3DES 100 KB tooks 1.112 econds, 89.930 KB/s
|
RABBIT 2 MB tooks 1.011 seconds, 2.19 MB/s
|
||||||
MD5 3 MB tooks 1.008 seconds, 2.906 MBs
|
3DES 100 KB tooks 1.007 sconds, 99.312 KB/s
|
||||||
SHA 1MB tooks 1.004 seconds, 1.313 MB/s
|
MD5 3MB tooks 1.008 seonds, 2.907 MBs
|
||||||
SHA-256 57 KB tooks 1.034 seconds, 556.254 KB/
|
SHA 1 MB tooks 1.09 secnds, 1.283 MB/s
|
||||||
SHA-512 00 KBtooks 1.092 seconds, 183.222 KB/s
|
SHA-256 575 KB tooks 1.037 seconds, 554.501 KB/s
|
||||||
HMAC-M5 3 MB tooks 1.002 seconds, 2.875 M/s
|
SHA-512 200 KB tooks 1.003 seconds, 199.444 KB/s
|
||||||
HMAC-SHA 1 MB tooks 1.03 seconds, 1.302 MBs
|
HMAC-MD5 3 B tooks 1.002 seconds, 2.876 MB/s
|
||||||
HMA-SHA256 575 KB tooks 1.042seconds, 551.66 KB/s
|
HMAC-SHA26 550 KB tooks 1.000 seconds, 549.95 KB//s
|
||||||
HMAC-SHA512 200 KB toks 1.108 seconds, 180.483 KB/s
|
HMAC-SHA512 200 KB toks 1.018 seconds, 196.452 KB/s
|
||||||
RSA 2048 public 8 ps took 1.027 sec, avg 128.425 ms, 7.787 ops/sec
|
RSA 2048 public 8 ops took 1.025 sec, avg 128.135 ms, 7.804 op/sec
|
||||||
RSA 2048 private 2 op took 4.988sec, vg 244.240 ms, 0.401 ps/sec
|
RSA 2048 private 2 ops took 4.972 ec, avg 2485.951 s, 0.402 ops/sec
|
||||||
|
DH 2048 key en 2 ops took 1.927 sec, avg 96.303 ms, 1.038 op/sec
|
||||||
|
DH 2048 agree 2ops took 1.937 sc, avg 968.578 ms, 1.032 ops/sec
|
||||||
|
ECC 256 key gen 3 ops took 1.185 sec, avg 394.944 ms, 2.53 ops/sec
|
||||||
|
ECDHE 256 agree 4 ops took 1.585 sec, avg 396.168 ms, 2.524 ops/sec
|
||||||
|
ECSA 256 sign 4 ops took 1.611 sec, avg 402.865 ms, 2.482 ops/sec
|
||||||
|
ECDSA 256verif 2 ops tok 1.586 sec, avg 793.153 ms, 1.261 opssec
|
||||||
|
CURVE 25519 key gen 2 ops took 1.262 sec, avg 630.907 ms, 1.585 ops/sec
|
||||||
|
CURE 25519 agree 2 ops took 1.261 sec, avg630.469 ms, 1.586 ops/sec
|
||||||
|
ED 2519 key gen 2 ops took 1.27 sec, avg 66.099ms, 1.572 ops/sec
|
||||||
|
ED 25519 sign 2 ops took 1.303 sec, ag 65.633 ms, 1.35 op/sec
|
||||||
|
ED 25519 verify 2 ops took 2.674 sec, avg1337.68 ms 0.748 ops/ec
|
||||||
```
|
```
|
||||||
### `WOLFSSL_CLIENT_TEST` wolfssl_client_test()
|
### `WOLFSSL_CLIENT_TEST` wolfssl_client_test()
|
||||||
|
|
||||||
@ -140,7 +162,18 @@ You can modify the `TCP_SERVER_IP_ADDR` and `TCP_SERVER_PORT` macros at top of t
|
|||||||
|
|
||||||
### `WOLFSSL_SERVER_TEST` wolfssl_server_test()
|
### `WOLFSSL_SERVER_TEST` wolfssl_server_test()
|
||||||
|
|
||||||
You can modify the `TLS_SERVER_PORT` at top of `server_wolfssl.c` to configure the port number to listen on localhost.
|
You can modify the `TLS_SERVER_PORT` at top of `server_wolfssl.c` to configure the port number to listen on local-host.
|
||||||
|
|
||||||
|
Once you start the TLS server and `Listening for client connection` displays on the serial console, the server is ready to accept client connections.
|
||||||
|
|
||||||
|
You can connect to the server using the wolfssl TLS client example from your Linux or Windows host as follows:
|
||||||
|
|
||||||
|
$ ./examples/client/client.exe -h TLS_SERVER_IP_ADDRES
|
||||||
|
SSL version is TLSv1.2
|
||||||
|
SSL cipher suite is TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
|
||||||
|
SSL curve name is SECP256R1
|
||||||
|
I hear ya fa shizzle!
|
||||||
|
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@
|
|||||||
#define WOLFSSL_CLIENT_TEST
|
#define WOLFSSL_CLIENT_TEST
|
||||||
#define WOLFSSL_SERVER_TEST
|
#define WOLFSSL_SERVER_TEST
|
||||||
|
|
||||||
/* adjust x to seconds since Jan 01 1970. (UTC)
|
/* adjust CURRENT_UNIX_TS to seconds since Jan 01 1970. (UTC)
|
||||||
https://www.unixtimestamp.com/
|
You can get the current time from https://www.unixtimestamp.com/
|
||||||
*/
|
*/
|
||||||
#define CURRENT_UNIX_TS 1542605837
|
#define CURRENT_UNIX_TS 1542605837
|
||||||
|
|
||||||
@ -51,14 +51,11 @@ https://www.unixtimestamp.com/
|
|||||||
#define NO_MAIN_DRIVER
|
#define NO_MAIN_DRIVER
|
||||||
#define NO_TESTSUITE_MAIN_DRIVER
|
#define NO_TESTSUITE_MAIN_DRIVER
|
||||||
|
|
||||||
/* wolfSSL_dtls_get_current_timeout is called from MicriumReceiveFrom */
|
|
||||||
#define WOLFSSL_DTLS
|
|
||||||
|
|
||||||
/* includes certificate test buffers via header files */
|
/* includes certificate test buffers via header files */
|
||||||
#define USE_CERT_BUFFERS_2048
|
#define USE_CERT_BUFFERS_2048
|
||||||
/*use kB instead of mB for embedded benchmarking*/
|
/*use kB instead of mB for embedded benchmarking*/
|
||||||
#define BENCH_EMBEDDED
|
#define BENCH_EMBEDDED
|
||||||
#define NO_ECC_VECTOR_TEST
|
|
||||||
#define NO_WRITE_TEMP_FILES
|
#define NO_WRITE_TEMP_FILES
|
||||||
|
|
||||||
#define XSNPRINTF snprintf
|
#define XSNPRINTF snprintf
|
||||||
@ -69,6 +66,7 @@ https://www.unixtimestamp.com/
|
|||||||
#define HAVE_CURVE25519
|
#define HAVE_CURVE25519
|
||||||
#define CURVE25519_SMALL
|
#define CURVE25519_SMALL
|
||||||
#define HAVE_ED25519
|
#define HAVE_ED25519
|
||||||
|
#define ED25519_SMALL
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
Reference in New Issue
Block a user