Add NXP SE050 EdgeLock examples for use on Raspberry Pi
parent
c3491327ed
commit
05efd4a4ee
10
README.md
10
README.md
|
@ -283,6 +283,16 @@ This directory contains a wolfCrypt benchmark test application for i.MX RT1060-E
|
|||
Please see the [RT1060/README.md](RT1060/README.md) for further usage and details.
|
||||
|
||||
|
||||
<br />
|
||||
|
||||
#### NXP SE050
|
||||
|
||||
This directory contains example applications for NXP's SE050. The examples
|
||||
have been tested on a Raspberry Pi with SE050 EdgeLock.
|
||||
|
||||
Please see the [SE050/README.md](SE050/README.md) for further details.
|
||||
|
||||
|
||||
<br />
|
||||
|
||||
#### SGX_Linux (Linux Enclave)
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
# wolfSSL NXP SE050 Examples
|
||||
|
||||
wolfSSL includes support for the NXP SE050 Plug & Trust Secure Element. For
|
||||
details about the NXP SE050, see [NXP's SE050 page](https://www.nxp.com/products/security-and-authentication/authentication/edgelock-se050-plug-trust-secure-element-family-enhanced-iot-security-with-maximum-flexibility:SE050).
|
||||
|
||||
This directory contains wolfSSL examples for NXP SE050. The examples have been
|
||||
written for and tested on a Raspberry Pi with NXP SE050 EdgeLock development
|
||||
kit.
|
||||
|
||||
For complete details on wolfSSL's support for NXP SE050, see
|
||||
[README_SE050.md](https://www.github.com/wolfssl/wolfssl/wolfcrypt/src/port/nxp/README_SE050.md).
|
||||
That document also describes how to download, build, and compile the SE05x
|
||||
Middleware. It should be followed first before moving on to installing and
|
||||
running these examples.
|
||||
|
||||
## Installing Example Applications
|
||||
|
||||
These instructions assume that the SE050 middleware has already been installed
|
||||
in Raspbian and is located at `/home/pi/se_mw/simw-top`.
|
||||
|
||||
Before building these demo, the "wolfssl" folder which contains these demos
|
||||
should be copied into the SE05x middleware source tree at:
|
||||
|
||||
```
|
||||
/home/pi/se_mw/simw-top/demos/wolfssl
|
||||
```
|
||||
|
||||
This will mean the wolfSSL demo applications will be at:
|
||||
|
||||
```
|
||||
/home/pi/se_mw/simw-top/demos/wolfssl/wolfcrypt_benchmark
|
||||
/home/pi/se_mw/simw-top/demos/wolfssl/wolfcrypt_generate_csr
|
||||
/home/pi/se_mw/simw-top/demos/wolfssl/wolfcrypt_key_cert_insert
|
||||
/home/pi/se_mw/simw-top/demos/wolfssl/wolfcrypt_test
|
||||
```
|
||||
|
||||
The 'wolfssl' demo directory needs to be tied into the CMake build system. Open
|
||||
the following file:
|
||||
|
||||
```
|
||||
/home/pi/se_mw/simw-top/demos/CMakeLists.txt
|
||||
```
|
||||
|
||||
Add the following at the bottom of this file:
|
||||
|
||||
```
|
||||
ADD_SUBDIRECTORY(wolfssl)
|
||||
```
|
||||
|
||||
If the SE05x middleware has not yet been set up for compilation:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top/scripts
|
||||
$ ./create_cmake_projects.py rpi
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c
|
||||
$ ccmake .
|
||||
< adjust options to match SE050 dev kit >
|
||||
< 'c', to configure >
|
||||
< 'g', to generate >
|
||||
$ cmake --build .
|
||||
```
|
||||
|
||||
This will build the SE05x middleware along with demos, including the wolfCrypt
|
||||
test application.
|
||||
|
||||
**IMPORTANT:** Note that the wolfCrypt test and benchmark application examples
|
||||
included here need benchmark.c, benchmark.h, test.c, and test.h copied over
|
||||
from a valid wolfSSL source tree. See notes in those example README.md files
|
||||
for more information.
|
||||
|
||||
## NXP SE050 EdgeLock Configuration
|
||||
|
||||
wolfSSL most recently tested these examples on a Raspberry Pi with NXP
|
||||
EdgeLock development kit. The following CMake options were used. This uses
|
||||
OpenSSL as the HostCrypto Provider and enables SCP03 authentication.
|
||||
|
||||

|
||||
|
||||
## Example Applications
|
||||
|
||||
### wolfCrypt Test Application
|
||||
|
||||
This application will run the wolfCrypt test application, running cryptography
|
||||
test vectors through all algorithms enabled in wolfSSL. For details, see
|
||||
[README.md](./wolfssl/wolfcrypt_test/README.md).
|
||||
|
||||
### wolfCrypt Benchmark Application
|
||||
|
||||
This application will run the wolfCrypt benchmark application, benchmarking
|
||||
all enabled algorithms in wolfSSL. For details, see
|
||||
[README.md](./wolfssl/wolfcrypt_benchmark/README.md).
|
||||
|
||||
### wolfCrypt SE050 Key and Certificate Insertion and Use Example
|
||||
|
||||
This example inserts and uses certificates and keys into the SE050. It does an
|
||||
ECDSA verify operation of an ASCII-encoded {R,S} signature, reads back out the
|
||||
RSA and ECC certificates imported and verifies they match the original ones,
|
||||
then erases keys and certificates that were imported into the SE050. For
|
||||
details, see [README.md](./wolfssl/wolfcrypt_key_cert_insert/README.md).
|
||||
|
||||
### wolfCrypt CSR Generation Example
|
||||
|
||||
This example generates a Certificate Signing Request (CSR) using a key
|
||||
generated and stored in the SE050. This examples requires that wolfSSL be
|
||||
compiled with `--enable-certgen --enable-certreq`. For details, see
|
||||
[README.md](./wolfssl/wolfcrypt_generate_csr/README.md).
|
||||
|
||||
## Support
|
||||
|
||||
For support questions and issues, please email wolfSSL at support@wolfssl.com.
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 190 KiB |
|
@ -0,0 +1,4 @@
|
|||
ADD_SUBDIRECTORY(wolfcrypt_benchmark)
|
||||
ADD_SUBDIRECTORY(wolfcrypt_test)
|
||||
ADD_SUBDIRECTORY(wolfcrypt_key_cert_insert)
|
||||
ADD_SUBDIRECTORY(wolfcrypt_generate_csr)
|
|
@ -0,0 +1,34 @@
|
|||
PROJECT(wolfcrypt_benchmark)
|
||||
FILE(
|
||||
GLOB
|
||||
files
|
||||
*.c
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(
|
||||
${PROJECT_NAME}
|
||||
${KSDK_STARTUP_FILE} ${files}
|
||||
)
|
||||
|
||||
TARGET_COMPILE_DEFINITIONS(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE SIMW_DEMO_ENABLE__DEMO_WOLFCRYPTBENCHMARK NO_MAIN_DRIVER BENCH_EMBEDDED USE_CERT_BUFFERS_2048 USE_CERT_BUFFERS_256
|
||||
)
|
||||
|
||||
TARGET_INCLUDE_DIRECTORIES(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE ${SIMW_TOP_DIR}/sss/ex/inc /home/pi/se_mw/wolfssl
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(
|
||||
${PROJECT_NAME}
|
||||
SSS_APIs
|
||||
ex_common
|
||||
wolfssl
|
||||
)
|
||||
|
||||
CREATE_BINARY(${PROJECT_NAME})
|
||||
|
||||
IF(SSS_HAVE_HOST_LINUX_LIKE)
|
||||
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
|
||||
ENDIF()
|
|
@ -0,0 +1,145 @@
|
|||
# wolfCrypt Benchmark Demo Application
|
||||
|
||||
This demo application runs the wolfCrypt benchmark app. It benchmarks all
|
||||
algorithms enabled in wolfCrypt. It has been tested using a Raspberry Pi
|
||||
and SE050 EdgeLock development kit.
|
||||
|
||||
## Building the Demo
|
||||
|
||||
Before building this demo, follow initial setup instructions in the parent
|
||||
[README.md](../../README.md).
|
||||
|
||||
**IMPORTANT:** This example requires the benchmark.c and benchmark.h files from
|
||||
a wolfSSL source package be copied into this directory before compiling and
|
||||
running the example. There are stub files included in this example directory
|
||||
that should be overwritten:
|
||||
|
||||
```
|
||||
$ cp wolfssl-X.X.X/wolfcrypt/benchmark/benchmark.c ./
|
||||
$ cp wolfssl-X.X.X/wolfcrypt/benchmark/benchmark.h ./
|
||||
```
|
||||
|
||||
Once this example directory has been copied into the SE05x middleware directory
|
||||
tree in the correct location, compiling the middleware will also compile this
|
||||
demo application:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c
|
||||
$ cmake --build .
|
||||
```
|
||||
|
||||
## Running the Demo
|
||||
|
||||
To run the demo:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c/bin
|
||||
$ ./wolfcrypt_benchmark
|
||||
```
|
||||
|
||||
On successful run, output similar to the following will print out:
|
||||
|
||||
```
|
||||
App :INFO :PlugAndTrust_v04.02.00_20220524
|
||||
App :INFO :Running ./wolfcrypt_benchmark
|
||||
App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments.
|
||||
sss :INFO :atr (Len=35)
|
||||
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
|
||||
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
|
||||
54 50 4F
|
||||
sss :WARN :Communication channel is Plain.
|
||||
sss :WARN :!!!Not recommended for production use.!!!
|
||||
App :INFO :running setconfig
|
||||
App :INFO :Ran setconfig successfully
|
||||
wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each)
|
||||
RNG 12 MiB took 1.001 seconds, 11.928 MiB/s
|
||||
AES-128-CBC-enc 20 MiB took 1.000 seconds, 19.724 MiB/s
|
||||
AES-128-CBC-dec 19 MiB took 1.001 seconds, 19.438 MiB/s
|
||||
AES-192-CBC-enc 17 MiB took 1.001 seconds, 16.982 MiB/s
|
||||
AES-192-CBC-dec 17 MiB took 1.001 seconds, 16.612 MiB/s
|
||||
AES-256-CBC-enc 15 MiB took 1.001 seconds, 14.755 MiB/s
|
||||
AES-256-CBC-dec 15 MiB took 1.001 seconds, 14.580 MiB/s
|
||||
AES-128-GCM-enc 10 MiB took 1.002 seconds, 9.967 MiB/s
|
||||
AES-128-GCM-dec 10 MiB took 1.002 seconds, 9.965 MiB/s
|
||||
AES-192-GCM-enc 9 MiB took 1.002 seconds, 9.208 MiB/s
|
||||
AES-192-GCM-dec 9 MiB took 1.000 seconds, 9.202 MiB/s
|
||||
AES-256-GCM-enc 8 MiB took 1.001 seconds, 8.492 MiB/s
|
||||
AES-256-GCM-dec 8 MiB took 1.000 seconds, 8.495 MiB/s
|
||||
AES-128-GCM-enc-no_AAD 10 MiB took 1.001 seconds, 9.975 MiB/s
|
||||
AES-128-GCM-dec-no_AAD 10 MiB took 1.002 seconds, 10.035 MiB/s
|
||||
AES-192-GCM-enc-no_AAD 9 MiB took 1.001 seconds, 9.269 MiB/s
|
||||
AES-192-GCM-dec-no_AAD 9 MiB took 1.002 seconds, 9.262 MiB/s
|
||||
AES-256-GCM-enc-no_AAD 9 MiB took 1.002 seconds, 8.554 MiB/s
|
||||
AES-256-GCM-dec-no_AAD 9 MiB took 1.003 seconds, 8.545 MiB/s
|
||||
GMAC Table 4-bit 22 MiB took 1.000 seconds, 21.581 MiB/s
|
||||
AES-128-ECB-enc 15 MiB took 1.000 seconds, 14.996 MiB/s
|
||||
AES-128-ECB-dec 15 MiB took 1.000 seconds, 14.983 MiB/s
|
||||
AES-192-ECB-enc 13 MiB took 1.000 seconds, 13.356 MiB/s
|
||||
AES-192-ECB-dec 13 MiB took 1.000 seconds, 13.240 MiB/s
|
||||
AES-256-ECB-enc 12 MiB took 1.000 seconds, 11.929 MiB/s
|
||||
AES-256-ECB-dec 12 MiB took 1.000 seconds, 11.921 MiB/s
|
||||
CHACHA 38 MiB took 1.000 seconds, 37.518 MiB/s
|
||||
CHA-POLY 26 MiB took 1.000 seconds, 26.211 MiB/s
|
||||
MD5 129 MiB took 1.000 seconds, 129.068 MiB/s
|
||||
POLY1305 118 MiB took 1.000 seconds, 118.446 MiB/s
|
||||
SHA 66 MiB took 1.000 seconds, 66.223 MiB/s
|
||||
SHA-256 31 MiB took 1.001 seconds, 31.328 MiB/s
|
||||
SHA-384 16 MiB took 1.000 seconds, 15.918 MiB/s
|
||||
SHA-512 16 MiB took 1.000 seconds, 15.914 MiB/s
|
||||
HMAC-MD5 127 MiB took 1.000 seconds, 126.965 MiB/s
|
||||
HMAC-SHA 65 MiB took 1.000 seconds, 65.453 MiB/s
|
||||
HMAC-SHA256 31 MiB took 1.001 seconds, 30.983 MiB/s
|
||||
HMAC-SHA384 16 MiB took 1.000 seconds, 15.551 MiB/s
|
||||
HMAC-SHA512 16 MiB took 1.001 seconds, 15.653 MiB/s
|
||||
PBKDF2 4 KiB took 1.002 seconds, 3.618 KiB/s
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id FFFF
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10000
|
||||
RSA 1024 key gen 2 ops took 1.377 sec, avg 688.364 ms, 1.453 ops/sec
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10001
|
||||
RSA 2048 key gen 1 ops took 7.441 sec, avg 7440.538 ms, 0.134 ops/sec
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10002
|
||||
RSA 2048 public 10 ops took 1.133 sec, avg 113.271 ms, 8.828 ops/sec
|
||||
RSA 2048 private 6 ops took 1.278 sec, avg 212.942 ms, 4.696 ops/sec
|
||||
DH 2048 key gen 46 ops took 1.002 sec, avg 21.780 ms, 45.915 ops/sec
|
||||
DH 2048 agree 22 ops took 1.027 sec, avg 46.693 ms, 21.416 ops/sec
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10003
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10004
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10005
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10006
|
||||
ECC [ SECP256R1] 256 key gen 4 ops took 1.149 sec, avg 287.259 ms, 3.481 ops/sec
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10007
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10008
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10009
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000A
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000B
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000C
|
||||
ECDHE [ SECP256R1] 256 agree 4 ops took 1.710 sec, avg 427.612 ms, 2.339 ops/sec
|
||||
ECDSA [ SECP256R1] 256 sign 10 ops took 1.010 sec, avg 100.953 ms, 9.906 ops/sec
|
||||
ECDSA [ SECP256R1] 256 verify 10 ops took 1.010 sec, avg 100.998 ms, 9.901 ops/sec
|
||||
Benchmark complete
|
||||
```
|
||||
|
||||
## Demo Notes
|
||||
|
||||
The `benchmark.c` and `benchmark.h` file in this directory have been copied
|
||||
directly from the wolfSSL download directory, at:
|
||||
|
||||
```
|
||||
wolfssl-X.X.X/wolfcrypt/benchmark/benchmark.c
|
||||
wolfssl-X.X.X/wolfcrypt/benchmark/benchmark.h
|
||||
```
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* benchmark.c
|
||||
*
|
||||
* Copyright (C) 2006-2022 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
#error "Overwrite this file with wolfcrypt/benchmark/benchmark.c from wolfSSL"
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* benchmark.h
|
||||
*
|
||||
* Copyright (C) 2006-2022 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
#error "Overwrite this file with wolfcrypt/benchmark/benchmark.h from wolfSSL"
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
/* wolfcrypt_benchmark.c
|
||||
*
|
||||
* Copyright (C) 2006-2022 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <wolfssl/options.h>
|
||||
#include <wolfssl/wolfcrypt/types.h>
|
||||
#include <wolfssl/wolfcrypt/port/nxp/se050_port.h>
|
||||
#include <wolfssl/ssl.h>
|
||||
#include "benchmark.h"
|
||||
|
||||
#include <ex_sss_boot.h>
|
||||
#include <fsl_sss_se05x_apis.h>
|
||||
#include <nxLog_App.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(SIMW_DEMO_ENABLE__DEMO_WOLFCRYPTBENCHMARK)
|
||||
|
||||
static ex_sss_boot_ctx_t gex_sss_boot_ctx;
|
||||
|
||||
#define EX_SSS_BOOT_PCONTEXT (&gex_sss_boot_ctx)
|
||||
#define EX_SSS_BOOT_DO_ERASE 1
|
||||
#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0
|
||||
|
||||
#include <ex_sss_main_inc.h>
|
||||
|
||||
sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx)
|
||||
{
|
||||
int ret = 0;
|
||||
sss_status_t status = kStatus_SSS_Success;
|
||||
sss_session_t *pSession = (sss_session_t*)&pCtx->session;
|
||||
sss_key_store_t *pKeyStore = (sss_key_store_t*)&pCtx->ks;
|
||||
|
||||
LOG_I("running setconfig");
|
||||
ret = wc_se050_set_config(pSession, NULL, pKeyStore);
|
||||
if (ret != 0) {
|
||||
LOG_E("wc_se050_set_config failed");
|
||||
return kStatus_SSS_Fail;
|
||||
}
|
||||
LOG_I("Ran setconfig successfully");
|
||||
|
||||
wolfSSL_Init();
|
||||
benchmark_test(NULL);
|
||||
wolfSSL_Cleanup();
|
||||
|
||||
LOG_I("Finished wolfCrypt Benchmark");
|
||||
return status;
|
||||
}
|
||||
|
||||
#endif /* SIMW_DEMO_ENABLE__DEMO_WOLFCRYPTBENCHMARK */
|
|
@ -0,0 +1,34 @@
|
|||
PROJECT(wolfcrypt_generate_csr)
|
||||
FILE(
|
||||
GLOB
|
||||
files
|
||||
wolfcrypt_generate_csr.c
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(
|
||||
${PROJECT_NAME}
|
||||
${KSDK_STARTUP_FILE} ${files}
|
||||
)
|
||||
|
||||
TARGET_COMPILE_DEFINITIONS(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE SIMW_DEMO_ENABLE__DEMO_WOLFCRYPT_GENERATE_CSR
|
||||
)
|
||||
|
||||
TARGET_INCLUDE_DIRECTORIES(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE ${SIMW_TOP_DIR}/sss/ex/inc
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(
|
||||
${PROJECT_NAME}
|
||||
SSS_APIs
|
||||
ex_common
|
||||
wolfssl
|
||||
)
|
||||
|
||||
CREATE_BINARY(${PROJECT_NAME})
|
||||
|
||||
IF(SSS_HAVE_HOST_LINUX_LIKE)
|
||||
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
|
||||
ENDIF()
|
|
@ -0,0 +1,74 @@
|
|||
# wolfCrypt SE050 Certificate Signing Request (CSR) Example
|
||||
|
||||
This example uses wolfSSL to generate a Certificate Signing Request (CSR) using
|
||||
a key that is generated and stored in the SE050:
|
||||
|
||||
1. Generates a 256 bit ECC key pair in SE050.
|
||||
|
||||
2. Generates a certificate request with wolfCrypt and signs it with the
|
||||
ECC private key from step 1.
|
||||
|
||||
3. Converts the CSR from DER to PEM format and prints that to the console.
|
||||
|
||||
4. Deletes the generated key in SE050 (for example cleanup), and cleans up
|
||||
wolfSSL library resources.
|
||||
|
||||
## Building the Demo
|
||||
|
||||
Before building this demo, follow initial setup instructions in the parent
|
||||
[README.md](../../README.md).
|
||||
|
||||
Once this example directory has been copied into the SE05x middleware directory
|
||||
tree in the correct location, compiling the middleware will also compile this
|
||||
demo application:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c
|
||||
$ cmake --build .
|
||||
```
|
||||
|
||||
## Running the Demo
|
||||
|
||||
To run the demo:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c/bin
|
||||
$ ./wolfcrypt_generate_csr
|
||||
```
|
||||
|
||||
On successful run, output similar to the following will print out:
|
||||
|
||||
```
|
||||
App :INFO :PlugAndTrust_v04.02.00_20220524
|
||||
App :INFO :Running ./wolfcrypt_generate_csr
|
||||
App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments.
|
||||
App :INFO :Using default PlatfSCP03 keys. You can use keys from file using ENV=EX_SSS_BOOT_SCP03_PATH
|
||||
sss :INFO :atr (Len=35)
|
||||
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
|
||||
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
|
||||
54 50 4F
|
||||
App :INFO :Running wc_se050_set_config()
|
||||
App :INFO :SE050 config successfully set in wolfSSL
|
||||
App :INFO :wolfCrypt example of CSR generation
|
||||
|
||||
App :INFO :Initializing RNG
|
||||
|
||||
App :INFO :Generating ECC key in SE050
|
||||
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id FFFF
|
||||
App :INFO :Generated ECC key in SE050 ID: 0x0000ffff
|
||||
|
||||
App :INFO :Generated CSR (530 bytes)
|
||||
|
||||
App :INFO :-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIIBTjCB8wIBAjCBkDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1UMRAwDgYDVQQH
|
||||
DAdCb3plbWFuMREwDwYDVQQKDAhUZXN0IE9yZzEUMBIGA1UECwwLRGV2ZWxvcG1l
|
||||
bnQxGDAWBgNVBAMMD3d3dy5leGFtcGxlLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5m
|
||||
b0BleGFtcGxlLmNvbTBZMBM
|
||||
App :INFO :Erasing ECC key stored in SE050 slot: 0x0000ffff
|
||||
|
||||
App :INFO :Done with sample app
|
||||
App :INFO :ex_sss Finished
|
||||
```
|
||||
|
|
@ -0,0 +1,201 @@
|
|||
/* wolfcrypt_generate_csr.c
|
||||
*
|
||||
* Copyright (C) 2006-2022 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
/* wolfCrypt example that generates a CSR using key generated in SE050. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <wolfssl/options.h>
|
||||
#include <wolfssl/wolfcrypt/ecc.h>
|
||||
#include <wolfssl/wolfcrypt/random.h>
|
||||
#include <wolfssl/wolfcrypt/asn_public.h>
|
||||
#include <wolfssl/wolfcrypt/port/nxp/se050_port.h>
|
||||
#include <wolfssl/ssl.h>
|
||||
|
||||
#include <ex_sss_boot.h>
|
||||
#include <fsl_sss_se05x_apis.h>
|
||||
#include <nxLog_App.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(SIMW_DEMO_ENABLE__DEMO_WOLFCRYPT_GENERATE_CSR)
|
||||
|
||||
static ex_sss_boot_ctx_t gex_sss_boot_ctx;
|
||||
|
||||
#define EX_SSS_BOOT_PCONTEXT (&gex_sss_boot_ctx)
|
||||
#define EX_SSS_BOOT_DO_ERASE 1
|
||||
#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0
|
||||
|
||||
#include <ex_sss_main_inc.h>
|
||||
|
||||
sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx)
|
||||
{
|
||||
#if defined(WOLFSSL_CERT_GEN) && defined(WOLFSSL_CERT_REQ)
|
||||
int ret = 0;
|
||||
sss_status_t status = kStatus_SSS_Success;
|
||||
sss_session_t *pSession = (sss_session_t*)&pCtx->session;
|
||||
sss_key_store_t *pKeyStore = (sss_key_store_t*)&pCtx->ks;
|
||||
|
||||
word32 keyId = 0;
|
||||
WC_RNG rng;
|
||||
ecc_key ecc;
|
||||
Cert req;
|
||||
byte der[1024];
|
||||
byte pem[1024];
|
||||
int derSz;
|
||||
int pemSz;
|
||||
|
||||
LOG_I("Running wc_se050_set_config()");
|
||||
ret = wc_se050_set_config(pSession, NULL, pKeyStore);
|
||||
if (ret != 0) {
|
||||
LOG_E("wc_se050_set_config failed");
|
||||
return kStatus_SSS_Fail;
|
||||
}
|
||||
LOG_I("SE050 config successfully set in wolfSSL");
|
||||
|
||||
/* Initialize wolfSSL library */
|
||||
wolfSSL_Init();
|
||||
|
||||
LOG_I("wolfCrypt example of CSR generation\n");
|
||||
|
||||
XMEMSET(der, 0, sizeof(der));
|
||||
XMEMSET(pem, 0, sizeof(pem));
|
||||
|
||||
LOG_I("Initializing RNG\n");
|
||||
ret = wc_InitRng(&rng);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_RngInit() error, ret = %d\n", ret);
|
||||
}
|
||||
|
||||
/* Generate ECC key, stored in SE050 */
|
||||
if (ret == 0) {
|
||||
LOG_I("Generating ECC key in SE050\n");
|
||||
ret = wc_ecc_init(&ecc);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ecc_init error, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
ret = wc_ecc_make_key(&rng, 32, &ecc);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ecc_make_key error, ret = %d\n", ret);
|
||||
} else {
|
||||
ret = wc_ecc_get_key_id(&ecc, &keyId);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ecc_get_key_id error, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Generated ECC key in SE050 ID: 0x%08x\n", keyId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
ret = wc_InitCert(&req);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_InitCert error, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
strncpy(req.subject.country, "US", CTC_NAME_SIZE);
|
||||
strncpy(req.subject.state, "MT", CTC_NAME_SIZE);
|
||||
strncpy(req.subject.locality, "Bozeman", CTC_NAME_SIZE);
|
||||
strncpy(req.subject.org, "Test Org", CTC_NAME_SIZE);
|
||||
strncpy(req.subject.unit, "Development", CTC_NAME_SIZE);
|
||||
strncpy(req.subject.commonName, "www.example.com", CTC_NAME_SIZE);
|
||||
strncpy(req.subject.email, "info@example.com", CTC_NAME_SIZE);
|
||||
|
||||
ret = wc_MakeCertReq_ex(&req, der, sizeof(der), ECC_TYPE,
|
||||
(void*)&ecc);
|
||||
if (ret <= 0) {
|
||||
LOG_I("wc_MakeCertReq_ex error, ret = %d\n", ret);
|
||||
} else {
|
||||
derSz = ret;
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
ret = wc_SignCert_ex(req.bodySz, req.sigType, der, sizeof(der),
|
||||
ECC_TYPE, (void*)&ecc, &rng);
|
||||
if (ret <= 0) {
|
||||
LOG_I("wc_SignCert_ex error, ret = %d\n", ret);
|
||||
} else {
|
||||
derSz = ret;
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
XMEMSET(pem, 0, sizeof(pem));
|
||||
ret = wc_DerToPem(der, derSz, pem, sizeof(pem), CERTREQ_TYPE);
|
||||
if (ret <= 0) {
|
||||
LOG_I("wc_DerToPem error, ret = %d\n", ret);
|
||||
} else {
|
||||
pemSz = ret;
|
||||
LOG_I("Generated CSR (%d bytes)\n", pemSz);
|
||||
ret = 0;
|
||||
LOG_I("%s", pem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Delete generated key in SE050 */
|
||||
if (ret == 0) {
|
||||
LOG_I("Erasing ECC key stored in SE050 slot: 0x%08x\n", keyId);
|
||||
ret = wc_se050_erase_object(keyId);
|
||||
if (ret != 0) {
|
||||
LOG_I("Failed to erase ECC key in SE050\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Free ECC key and RNG */
|
||||
if (ret == 0) {
|
||||
ret = wc_ecc_free(&ecc);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ecc_free error, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
if (ret == 0) {
|
||||
ret = wc_FreeRng(&rng);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_FreeRng error, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
/* Cleanup wolfSSL library resources */
|
||||
wolfSSL_Cleanup();
|
||||
|
||||
LOG_I("Done with sample app");
|
||||
return status;
|
||||
#else
|
||||
LOG_E("Examples requires wolfSSL be compiled with WOLFSSL_CERT_GEN "
|
||||
"and WOLFSSL_CERT_REQ");
|
||||
return kStatus_SSS_Fail;
|
||||
#endif /* WOLFSSL_CERT_GEN && WOLFSSL_CERT_REQ */
|
||||
}
|
||||
|
||||
#endif /* SIMW_DEMO_ENABLE__DEMO_WOLFCRYPT_GENERATE_CSR */
|
|
@ -0,0 +1,34 @@
|
|||
PROJECT(wolfcrypt_key_cert_insert)
|
||||
FILE(
|
||||
GLOB
|
||||
files
|
||||
*.c
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(
|
||||
${PROJECT_NAME}
|
||||
${KSDK_STARTUP_FILE} ${files}
|
||||
)
|
||||
|
||||
TARGET_COMPILE_DEFINITIONS(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE SIMW_DEMO_ENABLE__DEMO_WOLFCRYPT_KEY_CERT_INSERT USE_CERT_BUFFERS_2048 USE_CERT_BUFFERS_256
|
||||
)
|
||||
|
||||
TARGET_INCLUDE_DIRECTORIES(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE ${SIMW_TOP_DIR}/sss/ex/inc
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(
|
||||
${PROJECT_NAME}
|
||||
SSS_APIs
|
||||
ex_common
|
||||
wolfssl
|
||||
)
|
||||
|
||||
CREATE_BINARY(${PROJECT_NAME})
|
||||
|
||||
IF(SSS_HAVE_HOST_LINUX_LIKE)
|
||||
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
|
||||
ENDIF()
|
|
@ -0,0 +1,106 @@
|
|||
# wolfCrypt SE050 Key and Certificate Insertion and Use Example
|
||||
|
||||
This example inserts and uses keys and certificates into SE050, including:
|
||||
|
||||
1. Inserts sample RSA and ECC certs and keys into SE050 key IDs. Sample keys
|
||||
and certs used are from wolfSSL's `<wolfssl/certs_test.h>` header and are demo
|
||||
certs/keys that ship with wolfSSL:
|
||||
|
||||
```
|
||||
server_key_der_2048 RSA private key (2048-bit)
|
||||
server_cert_der_2048 RSA cert (2048-bit), matches above key
|
||||
public key from above RSA public key extracted from above cert
|
||||
ecc_key_der_256 ECC private key (NIST P-256)
|
||||
serv_ecc_der_256 ECC cert (NIST P-256), matches above key
|
||||
public key from above ECC public key extracted from above cert
|
||||
```
|
||||
|
||||
2. Does an ECDSA verify using one of the ECC public keys and a ECDSA signature
|
||||
in the form of ASCII R and S components.
|
||||
|
||||
3. Reads back out the RSA and ECC certificate inserted, verifies they match the
|
||||
original inserted.
|
||||
|
||||
4. Erases the keys and certs from the SE050.
|
||||
|
||||
## Building the Demo
|
||||
|
||||
Before building this demo, follow initial setup instructions in the parent
|
||||
[README.md](../../README.md).
|
||||
|
||||
Once this example directory has been copied into the SE05x middleware directory
|
||||
tree in the correct location, compiling the middleware will also compile this
|
||||
demo application:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c
|
||||
$ cmake --build .
|
||||
```
|
||||
|
||||
## Running the Demo
|
||||
|
||||
To run the demo:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c/bin
|
||||
$ ./wolfcrypt_key_cert_insert
|
||||
```
|
||||
|
||||
On successful run, output similar to the following will print out:
|
||||
|
||||
```
|
||||
App :INFO :PlugAndTrust_v04.02.00_20220524
|
||||
App :INFO :Running ./wolfcrypt_key_cert_insert
|
||||
App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments.
|
||||
sss :INFO :atr (Len=35)
|
||||
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
|
||||
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
|
||||
54 50 4F
|
||||
sss :WARN :Communication channel is Plain.
|
||||
sss :WARN :!!!Not recommended for production use.!!!
|
||||
App :INFO :Running wc_se050_set_config()
|
||||
App :INFO :SE050 config successfully set in wolfSSL
|
||||
App :INFO :Inserted RSA private key into SE050 key ID: 0x00005002
|
||||
|
||||
App :INFO :Inserted RSA certificate into SE050 key ID: 0x00005003
|
||||
|
||||
App :INFO :RSA key written to DER, 294 bytes
|
||||
|
||||
App :INFO :Inserted RSA public key into SE050 key ID: 0x00005004
|
||||
|
||||
App :INFO :Inserted ECC private key into SE050 key ID: 0x00005005
|
||||
|
||||
App :INFO :Inserted ECC certificate into SE050 key ID: 0x00005006
|
||||
|
||||
App :INFO :Inserted ECC public key into SE050 key ID: 0x00005007
|
||||
|
||||
App :INFO :Setting ecc_key to use ID from SE050
|
||||
|
||||
App :INFO :Verifying ECDSA signature with SE050 key ID: 0x00005007
|
||||
|
||||
App :INFO :ECDSA verify success!
|
||||
|
||||
App :INFO :Read RSA certificate (1260 bytes)
|
||||
|
||||
App :INFO :RSA cert matches original loaded
|
||||
|
||||
App :INFO :Read ECC certificate (677 bytes)
|
||||
|
||||
App :INFO :ECC cert matches original loaded
|
||||
|
||||
App :INFO :Erased RSA private key, key ID: 0x00005002
|
||||
|
||||
App :INFO :Erased RSA certificate, key ID: 0x00005003
|
||||
|
||||
App :INFO :Erased RSA public key, key ID: 0x00005004
|
||||
|
||||
App :INFO :Erased ECC private key, key ID: 0x00005005
|
||||
|
||||
App :INFO :Erased ECC certificate, key ID: 0x00005006
|
||||
|
||||
App :INFO :Erased ECC public key, key ID: 0x00005007
|
||||
|
||||
App :INFO :Done with sample app
|
||||
App :INFO :ex_sss Finished
|
||||
```
|
||||
|
|
@ -0,0 +1,532 @@
|
|||
/* wolfcrypt_key_cert_insert.c
|
||||
*
|
||||
* Copyright (C) 2006-2022 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Example app inserts and uses keys and certificates into SE050.
|
||||
*
|
||||
* 1. Inserts sample RSA and ECC certs and keys into SE050 key IDs.
|
||||
* Sample keys and certs used are from wolfSSL's <wolfssl/certs_test.h>
|
||||
* header and are demo certs/keys that ship with wolfSSL:
|
||||
* server_key_der_2048 RSA private key (2048-bit)
|
||||
* server_cert_der_2048 RSA cert (2048-bit), matches above key
|
||||
* public key from above RSA public key extracted from above cert
|
||||
* ecc_key_der_256 ECC private key (NIST P-256)
|
||||
* serv_ecc_der_256 ECC cert (NIST P-256), matches above key
|
||||
* public key from above ECC public key extracted from above cert
|
||||
* 2. Does an ECDSA verify using one of the ECC public keys and a
|
||||
* ECDSA signature in the form of ASCII R and S components.
|
||||
* 3. Reads back out the RSA and ECC certificate inserted, verifies
|
||||
* they match the original inserted.
|
||||
* 4. Erases the keys and certs from the SE050.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <wolfssl/options.h>
|
||||
#include <wolfssl/ssl.h>
|
||||
#include <wolfssl/certs_test.h>
|
||||
#include <wolfssl/wolfcrypt/types.h>
|
||||
#include <wolfssl/wolfcrypt/rsa.h>
|
||||
#include <wolfssl/wolfcrypt/ecc.h>
|
||||
#include <wolfssl/wolfcrypt/sha256.h>
|
||||
#include <wolfssl/wolfcrypt/random.h>
|
||||
#include <wolfssl/wolfcrypt/asn.h>
|
||||
#include <wolfssl/wolfcrypt/asn_public.h>
|
||||
#include <wolfssl/wolfcrypt/port/nxp/se050_port.h>
|
||||
|
||||
#include <ex_sss_boot.h>
|
||||
#include <fsl_sss_se05x_apis.h>
|
||||
#include <nxLog_App.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(SIMW_DEMO_ENABLE__DEMO_WOLFCRYPT_KEY_CERT_INSERT)
|
||||
|
||||
static ex_sss_boot_ctx_t gex_sss_boot_ctx;
|
||||
|
||||
#define EX_SSS_BOOT_PCONTEXT (&gex_sss_boot_ctx)
|
||||
#define EX_SSS_BOOT_DO_ERASE 1
|
||||
#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0
|
||||
|
||||
#define KEYID_RSA_PRIVATE 0x00005002 /* stores server_key_der_2048 */
|
||||
#define KEYID_RSA_CERT 0x00005003 /* stores server_cert_der_2048 */
|
||||
#define KEYID_RSA_PUBLIC 0x00005004 /* stores server_cert_der_2048 pub key */
|
||||
#define KEYID_ECC_PRIVATE 0x00005005 /* stores ecc_key_der_256 */
|
||||
#define KEYID_ECC_CERT 0x00005006 /* stores serv_ecc_der_256 */
|
||||
#define KEYID_ECC_PUBLIC 0x00005007 /* stores serv_ecc_der_256 public key */
|
||||
|
||||
#include <ex_sss_main_inc.h>
|
||||
|
||||
static int se050_verify_ecc_sig_rs(const char* sigR, const char* sigS,
|
||||
byte* digest, word32 digestSz, word32 keyId)
|
||||
{
|
||||
int ret = 0;
|
||||
int res = 0;
|
||||
byte eccSig[ECC_MAX_SIG_SIZE];
|
||||
word32 eccSigSz;
|
||||
ecc_key eccKey;
|
||||
|
||||
if (sigR == NULL || sigS == NULL || digest == NULL || digestSz == 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
eccSigSz = sizeof(eccSig);
|
||||
memset(eccSig, 0, eccSigSz);
|
||||
|
||||
ret = wc_ecc_rs_to_sig(sigR, sigS, eccSig, &eccSigSz);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ecc_rs_to_sig() failed, ret = %d\n", ret);
|
||||
}
|
||||
|
||||
/* Create ecc_key struct with SE050 key ID */
|
||||
if (ret == 0) {
|
||||
ret = wc_ecc_init(&eccKey);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ecc_init error, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
LOG_I("Setting ecc_key to use ID from SE050\n");
|
||||
ret = wc_ecc_use_key_id(&eccKey, keyId, 0);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ecc_use_key_id error, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
LOG_I("Verifying ECDSA signature with SE050 key ID: 0x%08x\n", keyId);
|
||||
ret = wc_ecc_verify_hash(eccSig, eccSigSz, digest, digestSz, &res,
|
||||
&eccKey);
|
||||
if (ret != 0 || res != 1) {
|
||||
LOG_I("wc_ecc_verify_hash failed, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
if (res != 1) {
|
||||
LOG_I("ECDSA verify failed!\n");
|
||||
} else {
|
||||
LOG_I("ECDSA verify success!\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Free ECC key and RNG */
|
||||
if (ret == 0) {
|
||||
ret = wc_ecc_free(&eccKey);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ecc_free error, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert sample certs/keys into SE050 key IDs:
|
||||
*
|
||||
* Key ID Credential
|
||||
* ------ --------------------------------
|
||||
* KEYID_RSA_PRIVATE RSA private key
|
||||
* KEYID_RSA_CERT RSA certificate
|
||||
* KEYID_ECC_PRIVATE ECC private key
|
||||
* KEYID_ECC_CERT ECC certificate
|
||||
* KEYID_ECC_PUBLIC ECC public key (from cert above)
|
||||
*
|
||||
* Return 0 on success, negative on error.
|
||||
*/
|
||||
static int write_certs_keys_to_se050(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
DecodedCert cert;
|
||||
byte derKey[1024];
|
||||
word32 derKeySz = 0;
|
||||
word32 idx = 0;
|
||||
RsaKey rsaKey;
|
||||
|
||||
/* Insert RSA private key */
|
||||
ret = wc_se050_rsa_insert_private_key(KEYID_RSA_PRIVATE,
|
||||
server_key_der_2048,
|
||||
sizeof_server_key_der_2048);
|
||||
if (ret != 0) {
|
||||
LOG_I("Error in se050_rsa_insert_private_key, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Inserted RSA private key into SE050 key ID: 0x%08x\n",
|
||||
KEYID_RSA_PRIVATE);
|
||||
}
|
||||
|
||||
/* Insert RSA certificate */
|
||||
ret = wc_se050_insert_binary_object(KEYID_RSA_CERT,
|
||||
server_cert_der_2048,
|
||||
sizeof_server_cert_der_2048);
|
||||
if (ret != 0) {
|
||||
LOG_I("Error in wc_se050_insert_binary_object, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Inserted RSA certificate into SE050 key ID: 0x%08x\n",
|
||||
KEYID_RSA_CERT);
|
||||
}
|
||||
|
||||
/* Extract RSA public key from cert DER */
|
||||
if (ret == 0) {
|
||||
wc_InitDecodedCert(&cert, server_cert_der_2048,
|
||||
sizeof_server_cert_der_2048, NULL);
|
||||
|
||||
ret = wc_ParseCert(&cert, CERT_TYPE, NO_VERIFY, NULL);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ParseCert failed, ret = %d\n", ret);
|
||||
}
|
||||
else {
|
||||
derKeySz = sizeof(derKey);
|
||||
ret = wc_GetPubKeyDerFromCert(&cert, derKey, &derKeySz);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_GetPubKeyDerFromCert failed, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
wc_FreeDecodedCert(&cert);
|
||||
}
|
||||
|
||||
/* Convert RSA public key DER to format for SE050, needs header added */
|
||||
if (ret == 0) {
|
||||
ret = wc_InitRsaKey(&rsaKey, NULL);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_InitRsaKey failed, ret = %d\n", ret);
|
||||
}
|
||||
else {
|
||||
idx = 0;
|
||||
ret = wc_RsaPublicKeyDecode(derKey, &idx, &rsaKey, derKeySz);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_RsaPublicKeyDecode failed, ret = %d\n", ret);
|
||||
}
|
||||
else {
|
||||
derKeySz = sizeof(derKey);
|
||||
ret = wc_RsaKeyToPublicDer_ex(&rsaKey, derKey, derKeySz, 1);
|
||||
if (ret <= 0) {
|
||||
LOG_I("wc_RsaKeyToDer failed, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("RSA key written to DER, %d bytes\n", ret);
|
||||
derKeySz = ret;
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
wc_FreeRsaKey(&rsaKey);
|
||||
}
|
||||
|
||||
/* Insert RSA public key from cert into SE050 */
|
||||
if (ret == 0) {
|
||||
ret = wc_se050_rsa_insert_public_key(KEYID_RSA_PUBLIC, derKey, derKeySz);
|
||||
if (ret != 0) {
|
||||
LOG_I("Error in se050_rsa_insert_public_key, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Inserted RSA public key into SE050 key ID: 0x%08x\n",
|
||||
KEYID_RSA_PUBLIC);
|
||||
}
|
||||
}
|
||||
|
||||
/* Insert ECC private key */
|
||||
ret = wc_se050_ecc_insert_private_key(KEYID_ECC_PRIVATE, ecc_key_der_256,
|
||||
sizeof_ecc_key_der_256);
|
||||
if (ret != 0) {
|
||||
LOG_I("Error in se050_ecc_insert_private_key, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Inserted ECC private key into SE050 key ID: 0x%08x\n",
|
||||
KEYID_ECC_PRIVATE);
|
||||
}
|
||||
|
||||
/* Insert ECC certificate */
|
||||
ret = wc_se050_insert_binary_object(KEYID_ECC_CERT, serv_ecc_der_256,
|
||||
sizeof_serv_ecc_der_256);
|
||||
if (ret != 0) {
|
||||
LOG_I("Error in wc_se050_insert_binary_object, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Inserted ECC certificate into SE050 key ID: 0x%08x\n",
|
||||
KEYID_ECC_CERT);
|
||||
}
|
||||
|
||||
/* Extract ECC public key from cert DER */
|
||||
if (ret == 0) {
|
||||
wc_InitDecodedCert(&cert, serv_ecc_der_256,
|
||||
sizeof_serv_ecc_der_256, NULL);
|
||||
|
||||
ret = wc_ParseCert(&cert, CERT_TYPE, NO_VERIFY, NULL);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_ParseCert failed, ret = %d\n", ret);
|
||||
}
|
||||
else {
|
||||
derKeySz = sizeof(derKey);
|
||||
ret = wc_GetPubKeyDerFromCert(&cert, derKey, &derKeySz);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_GetPubKeyDerFromCert failed, ret = %d\n", ret);
|
||||
}
|
||||
}
|
||||
wc_FreeDecodedCert(&cert);
|
||||
}
|
||||
|
||||
/* Insert ECC public key from cert into SE050 */
|
||||
if (ret == 0) {
|
||||
ret = wc_se050_ecc_insert_public_key(KEYID_ECC_PUBLIC, derKey,
|
||||
derKeySz);
|
||||
if (ret != 0) {
|
||||
LOG_I("Error in se050_ecc_insert_public_key, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Inserted ECC public key into SE050 key ID: 0x%08x\n",
|
||||
KEYID_ECC_PUBLIC);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test reading certificates back out of SE050.
|
||||
*
|
||||
* Read sample certificates stored into the following key IDs:
|
||||
* - KEYID_RSA_CERT
|
||||
* - KEYID_ECC_CERT
|
||||
*
|
||||
* Return 0 on success, negative on error.
|
||||
*/
|
||||
static int read_certs_from_se050(void)
|
||||
{
|
||||
int err = 0;
|
||||
int ret = -1;
|
||||
|
||||
byte* tmp = NULL;
|
||||
word32 tmpSz = 0;
|
||||
|
||||
/* get object size, to allocate memory */
|
||||
ret = wc_se050_get_binary_object(KEYID_RSA_CERT, tmp, &tmpSz);
|
||||
if (ret != LENGTH_ONLY_E) {
|
||||
LOG_I("wc_se050_get_binary_object did not return length only "
|
||||
"like expected\n");
|
||||
err = 1;
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
/* allocate memory to read RSA cert */
|
||||
tmp = (byte*)XMALLOC(tmpSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
if (tmp == NULL) {
|
||||
LOG_I("Failed to allocate memory to read RSA cert\n");
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
/* read RSA cert into tmp buffer */
|
||||
XMEMSET(tmp, 0, tmpSz);
|
||||
ret = wc_se050_get_binary_object(KEYID_RSA_CERT, tmp, &tmpSz);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_se050_get_binary_object failed, ret = %d\n", ret);
|
||||
err = 1;
|
||||
} else {
|
||||
LOG_I("Read RSA certificate (%d bytes)\n", tmpSz);
|
||||
}
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
/* make sure RSA cert is same as one we originally wrote */
|
||||
if ((tmpSz != sizeof_server_cert_der_2048) ||
|
||||
(memcmp(tmp, server_cert_der_2048, tmpSz) != 0)) {
|
||||
LOG_I("Error: RSA cert differs from original!\n");
|
||||
err = 1;
|
||||
} else {
|
||||
LOG_I("RSA cert matches original loaded\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
tmp = NULL;
|
||||
tmpSz = 0;
|
||||
|
||||
ret = wc_se050_get_binary_object(KEYID_ECC_CERT, tmp, &tmpSz);
|
||||
if (ret != LENGTH_ONLY_E) {
|
||||
LOG_I("wc_se050_get_binary_object did not return length only "
|
||||
"like expected\n");
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
/* allocate memory to read ECC cert */
|
||||
tmp = (byte*)XMALLOC(tmpSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
if (tmp == NULL) {
|
||||
LOG_I("Failed to allocate memory to read ECC cert\n");
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
/* read ECC cert into tmp buffer */
|
||||
XMEMSET(tmp, 0, tmpSz);
|
||||
ret = wc_se050_get_binary_object(KEYID_ECC_CERT, tmp, &tmpSz);
|
||||
if (ret != 0) {
|
||||
LOG_I("wc_se050_get_binary_object failed, ret = %d\n", ret);
|
||||
err = 1;
|
||||
} else {
|
||||
LOG_I("Read ECC certificate (%d bytes)\n", tmpSz);
|
||||
}
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
/* make sure ECC cert is same as one we originally wrote */
|
||||
if ((tmpSz != sizeof_serv_ecc_der_256) ||
|
||||
(memcmp(tmp, serv_ecc_der_256, tmpSz) != 0)) {
|
||||
LOG_I("Error: ECC cert differs from original!\n");
|
||||
err = 1;
|
||||
} else {
|
||||
LOG_I("ECC cert matches original loaded\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp != NULL) {
|
||||
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Erase sample certs/keys from SE050
|
||||
*
|
||||
* Returns 0 on success, negative on error.
|
||||
*/
|
||||
static int erase_certs_keys_from_se050(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = wc_se050_erase_object(KEYID_RSA_PRIVATE);
|
||||
if (ret != 0) {
|
||||
LOG_I("Failed to erase RSA private key, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Erased RSA private key, key ID: 0x%08x\n", KEYID_RSA_PRIVATE);
|
||||
}
|
||||
ret = wc_se050_erase_object(KEYID_RSA_CERT);
|
||||
if (ret != 0) {
|
||||
LOG_I("Failed to erase RSA certificate, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Erased RSA certificate, key ID: 0x%08x\n", KEYID_RSA_CERT);
|
||||
}
|
||||
ret = wc_se050_erase_object(KEYID_RSA_PUBLIC);
|
||||
if (ret != 0) {
|
||||
LOG_I("Failed to erase RSA public key, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Erased RSA public key, key ID: 0x%08x\n", KEYID_RSA_PUBLIC);
|
||||
}
|
||||
ret = wc_se050_erase_object(KEYID_ECC_PRIVATE);
|
||||
if (ret != 0) {
|
||||
LOG_I("Failed to erase ECC private key, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Erased ECC private key, key ID: 0x%08x\n", KEYID_ECC_PRIVATE);
|
||||
}
|
||||
ret = wc_se050_erase_object(KEYID_ECC_CERT);
|
||||
if (ret != 0) {
|
||||
LOG_I("Failed to erase ECC certificate, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Erased ECC certificate, key ID: 0x%08x\n", KEYID_ECC_CERT);
|
||||
}
|
||||
ret = wc_se050_erase_object(KEYID_ECC_PUBLIC);
|
||||
if (ret != 0) {
|
||||
LOG_I("Failed to erase ECC public key, ret = %d\n", ret);
|
||||
} else {
|
||||
LOG_I("Erased ECC public key, key ID: 0x%08x\n", KEYID_ECC_PUBLIC);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx)
|
||||
{
|
||||
int ret = 0;
|
||||
sss_status_t status = kStatus_SSS_Success;
|
||||
sss_session_t *pSession = (sss_session_t*)&pCtx->session;
|
||||
sss_key_store_t *pKeyStore = (sss_key_store_t*)&pCtx->ks;
|
||||
|
||||
const char* sigR =
|
||||
"ccfaa12a0aa1b9aa9f1fd107865c8ab5b21f36ce6ca8fe5b2c8154280009f74e";
|
||||
const char* sigS =
|
||||
"c09defd7a7c67a61ce1099dceaf840054351e199bf1a405675bf3ccb1939b024";
|
||||
|
||||
/* Test "hash" value, used to pre-generate the above R,S signature */
|
||||
const byte hashData[] = {
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
|
||||
};
|
||||
|
||||
LOG_I("Running wc_se050_set_config()");
|
||||
ret = wc_se050_set_config(pSession, NULL, pKeyStore);
|
||||
if (ret != 0) {
|
||||
LOG_E("wc_se050_set_config failed");
|
||||
return kStatus_SSS_Fail;
|
||||
}
|
||||
LOG_I("SE050 config successfully set in wolfSSL");
|
||||
|
||||
/* Initialize wolfSSL library */
|
||||
wolfSSL_Init();
|
||||
|
||||
/* Write sample keys/certs to SE050 */
|
||||
ret = write_certs_keys_to_se050();
|
||||
if (ret != 0) {
|
||||
LOG_E("Failed to write sample keys/certs to SE050\n");
|
||||
}
|
||||
|
||||
/* Test verifying ECDSA {r,s} signature with KEYID_ECC_PUBLIC.
|
||||
* NOTE: The R and S values here were pre-generated using wolfSSL
|
||||
* and the private ECC key named "ecc_key_der_256" in the
|
||||
* <wolfssl/certs_test.h> header. The certificate which wraps the
|
||||
* public key for "ecc_key_der_256" is "serv_ecc_der_256". The public
|
||||
* key from that certificate has been extracted and stored into key ID
|
||||
* KEYID_ECC_PUBLIC. */
|
||||
if (ret == 0) {
|
||||
ret = se050_verify_ecc_sig_rs(sigR, sigS, (byte*)hashData,
|
||||
sizeof(hashData), KEYID_ECC_PUBLIC);
|
||||
}
|
||||
|
||||
/* Test reading back certs from SE050 */
|
||||
if (ret == 0) {
|
||||
ret = read_certs_from_se050();
|
||||
}
|
||||
|
||||
/* Erase sample keys/certs from SE050 */
|
||||
ret = erase_certs_keys_from_se050();
|
||||
if (ret != 0) {
|
||||
LOG_E("Failed to erase sample certs/keys from SE050\n");
|
||||
}
|
||||
|
||||
/* Cleanup wolfSSL library resources */
|
||||
wolfSSL_Cleanup();
|
||||
|
||||
LOG_I("Done with sample app");
|
||||
return status;
|
||||
}
|
||||
|
||||
#endif /* SIMW_DEMO_ENABLE__DEMO_WOLFCRYPT_KEY_CERT_INSERT */
|
|
@ -0,0 +1,34 @@
|
|||
PROJECT(wolfcrypt_test)
|
||||
FILE(
|
||||
GLOB
|
||||
files
|
||||
*.c
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(
|
||||
${PROJECT_NAME}
|
||||
${KSDK_STARTUP_FILE} ${files}
|
||||
)
|
||||
|
||||
TARGET_COMPILE_DEFINITIONS(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE SIMW_DEMO_ENABLE__DEMO_WOLFCRYPTTEST NO_MAIN_DRIVER BENCH_EMBEDDED USE_CERT_BUFFERS_2048 USE_CERT_BUFFERS_256
|
||||
)
|
||||
|
||||
TARGET_INCLUDE_DIRECTORIES(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE ${SIMW_TOP_DIR}/sss/ex/inc /home/pi/se_mw/wolfssl
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(
|
||||
${PROJECT_NAME}
|
||||
SSS_APIs
|
||||
ex_common
|
||||
wolfssl
|
||||
)
|
||||
|
||||
CREATE_BINARY(${PROJECT_NAME})
|
||||
|
||||
IF(SSS_HAVE_HOST_LINUX_LIKE)
|
||||
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
|
||||
ENDIF()
|
|
@ -0,0 +1,219 @@
|
|||
# wolfCrypt Test Demo Application
|
||||
|
||||
This demo application runs the wolfCrypt test app. It tests all
|
||||
algorithms enabled in wolfCrypt. It has been tested using a Raspberry Pi
|
||||
and SE050 EdgeLock development kit.
|
||||
|
||||
## Building the Demo
|
||||
|
||||
Before building this demo, follow initial setup instructions in the parent
|
||||
[README.md](../../README.md).
|
||||
|
||||
**IMPORTANT:** This example requires the test.c and test.h files from a
|
||||
wolfSSL source package be copied into this directory before compiling and
|
||||
running the example. There are stub files included in this example directory
|
||||
that should be overwritten:
|
||||
|
||||
```
|
||||
$ cp wolfssl-X.X.X/wolfcrypt/test/test.c ./
|
||||
$ cp wolfssl-X.X.X/wolfcrypt/test/test.h ./
|
||||
```
|
||||
|
||||
Once this example directory has been copied into the SE05x middleware directory
|
||||
tree in the correct location, compiling the middleware will also compile this
|
||||
demo application:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c
|
||||
$ cmake --build .
|
||||
```
|
||||
|
||||
## Running the Demo
|
||||
|
||||
To run the demo:
|
||||
|
||||
```
|
||||
$ cd /home/pi/se_mw/simw-top_build/raspbian_native_se050_t1oi2c/bin
|
||||
$ ./wolfcrypt_test
|
||||
```
|
||||
|
||||
On successful run, output similar to the following will print out:
|
||||
|
||||
```
|
||||
App :INFO :PlugAndTrust_v04.02.00_20220524
|
||||
App :INFO :Running ./wolfcrypt_test
|
||||
App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments.
|
||||
sss :INFO :atr (Len=35)
|
||||
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
|
||||
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
|
||||
54 50 4F
|
||||
sss :WARN :Communication channel is Plain.
|
||||
sss :WARN :!!!Not recommended for production use.!!!
|
||||
App :INFO :running setconfig
|
||||
App :INFO :Ran setconfig successfully
|
||||
------------------------------------------------------------------------------
|
||||
wolfSSL version 5.5.1
|
||||
------------------------------------------------------------------------------
|
||||
error test passed!
|
||||
MEMORY test passed!
|
||||
base64 test passed!
|
||||
asn test passed!
|
||||
RANDOM test passed!
|
||||
MD5 test passed!
|
||||
SHA test passed!
|
||||
SHA-256 test passed!
|
||||
SHA-384 test passed!
|
||||
SHA-512 test passed!
|
||||
Hash test passed!
|
||||
HMAC-MD5 test passed!
|
||||
HMAC-SHA test passed!
|
||||
HMAC-SHA256 test passed!
|
||||
HMAC-SHA384 test passed!
|
||||
HMAC-SHA512 test passed!
|
||||
HMAC-KDF test passed!
|
||||
TLSv1.3 KDF 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!
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id FFFF
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10000
|
||||
RSA test passed!
|
||||
DH test passed!
|
||||
PWDBASED test passed!
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10001
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10002
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10003
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10004
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10005
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10006
|
||||
CHRIS: before ecc_sign_hash call, ret = 0
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10007
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10008
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10009
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000A
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000B
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000C
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000D
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000E
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1000F
|
||||
CHRIS: before ecc_sign_hash call, ret = 0
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10010
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10011
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10012
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10013
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10014
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10015
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10016
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10017
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10018
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10019
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1001A
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1001B
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1001C
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1001D
|
||||
CHRIS: before ecc_sign_hash call, ret = 0
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1001E
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1001F
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10020
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10021
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10022
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10023
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10024
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10025
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10026
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10027
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10028
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10029
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1002A
|
||||
CHRIS: before ecc_sign_hash call, ret = 0
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1002B
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1002C
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1002D
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1002E
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 1002F
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10030
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10031
|
||||
ECC test passed!
|
||||
sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:6971 Function:sss_se05x_TXn
|
||||
sss :WARN :Could not delete Key id 10032
|
||||
ECC buffer test passed!
|
||||
logging test passed!
|
||||
time test passed!
|
||||
mutex test passed!
|
||||
memcb test passed!
|
||||
Test complete
|
||||
App :INFO :Ran wolfCrypt test
|
||||
App :INFO :ex_sss Finished
|
||||
```
|
||||
|
||||
## Demo Notes
|
||||
|
||||
The `test.c` and `test.h` file in this directory have been copied
|
||||
directly from the wolfSSL download directory, at:
|
||||
|
||||
```
|
||||
wolfssl-X.X.X/wolfcrypt/test/test.c
|
||||
wolfssl-X.X.X/wolfcrypt/test/test.h
|
||||
```
|
||||
|
||||
It is expected to see warning messages in the console log about failures to
|
||||
delete key ids. wolfCrypt internally tries to delete temporary/test keys,
|
||||
and if those keys have not been stored in the SE050 the debug logs will show
|
||||
these messages.
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* test.c
|
||||
*
|
||||
* Copyright (C) 2006-2022 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
#error "Overwrite this file with wolfcrypt/test/test.c from wolfSSL"
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* test.h
|
||||
*
|
||||
* Copyright (C) 2006-2022 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
#error "Overwrite this file with wolfcrypt/test/test.h from wolfSSL"
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
/* wolfcrypt_test.c
|
||||
*
|
||||
* Copyright (C) 2006-2022 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <wolfssl/options.h>
|
||||
#include <wolfssl/wolfcrypt/types.h>
|
||||
#include <wolfssl/wolfcrypt/port/nxp/se050_port.h>
|
||||
#include <wolfssl/ssl.h>
|
||||
#include "test.h"
|
||||
|
||||
#include <ex_sss_boot.h>
|
||||
#include <fsl_sss_se05x_apis.h>
|
||||
#include <nxLog_App.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(SIMW_DEMO_ENABLE__DEMO_WOLFCRYPTTEST)
|
||||
|
||||
static ex_sss_boot_ctx_t gex_sss_boot_ctx;
|
||||
|
||||
#define EX_SSS_BOOT_PCONTEXT (&gex_sss_boot_ctx)
|
||||
#define EX_SSS_BOOT_DO_ERASE 1
|
||||
#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0
|
||||
|
||||
#include <ex_sss_main_inc.h>
|
||||
|
||||
sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx)
|
||||
{
|
||||
int ret = 0;
|
||||
sss_status_t status = kStatus_SSS_Success;
|
||||
sss_session_t *pSession = (sss_session_t*)&pCtx->session;
|
||||
sss_key_store_t *pKeyStore = (sss_key_store_t*)&pCtx->ks;
|
||||
|
||||
LOG_I("running setconfig");
|
||||
ret = wc_se050_set_config(pSession, NULL, pKeyStore);
|
||||
if (ret != 0) {
|
||||
LOG_E("wc_se050_set_config failed");
|
||||
return kStatus_SSS_Fail;
|
||||
}
|
||||
LOG_I("Ran setconfig successfully");
|
||||
|
||||
wolfSSL_Init();
|
||||
wolfcrypt_test(NULL);
|
||||
wolfSSL_Cleanup();
|
||||
|
||||
LOG_I("Ran wolfCrypt test");
|
||||
return status;
|
||||
}
|
||||
|
||||
#endif /* SIMW_DEMO_ENABLE__DEMO_WOLFCRYPTTEST */
|
Loading…
Reference in New Issue