Skip to content

Commit fb623eb

Browse files
authored
Merge pull request #34 from zhen9910/patch-1
Create user-defined-ciphersuite.md
2 parents 3f7f54e + 46ceff9 commit fb623eb

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,8 @@ The Azure RTOS and Azure Sphere better together sample can be found at:
4040
https://github.com/Azure-Samples/Azure-RTOS-on-Azure-Sphere-Mediatek-MT3620
4141

4242
This sample demonstrates how Azure Sphere and Azure RTOS are able to run together on the MediaTek MT3620 Development Kit.
43+
44+
## User-defined Crypto Ciphersuite
45+
46+
This [guide](./user-defined-ciphersuite.md) demonstrates how to implement user-defined crypto ciphersuite and integrate it with Azure IoT Sample.
47+

user-defined-ciphersuite.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# User-defined Crypto Ciphersuite Used by Azure IoT Sample
2+
3+
## Introduction
4+
5+
[Azure RTOS NetX Crypto](https://learn.microsoft.com/azure/rtos/netx/netx-crypto/chapter1) is the default crypto ciphersuite used by [Azure RTOS NetX Secure](https://learn.microsoft.com/azure/rtos/netx-duo/netx-secure-tls/chapter1) TLS stack in [Azure IoT Sample](https://github.com/azure-rtos/samples). If clients want to use different crypto algorithm implementation, such as hardware security engine, TF-M PSA, or PKCS#11 based crypto methods, this user guide will show how to implement user-defined crypto ciphersuite and integrate it with Azure IoT Sample.
6+
7+
## General Process
8+
9+
There are four steps to implement and utilize a user-defined crypto ciphersuite.
10+
11+
1. Declare a [NX_CRYPTO_METHOD](https://github.com/azure-rtos/netxduo/blob/master/crypto_libraries/inc/nx_crypto.h#L320) struct for your crypto algorithm, which contains initialization, cleanup and crypto operations function pointers for the crypto method in use.
12+
13+
2. Define initialization, cleanup and crypto operation functions for this crypto method.
14+
15+
3. Define a struct to save meta data such as scrtch buffer, algotithm id, etc, which will be passed into above functions as as input parameter.
16+
17+
4. Add this newly defined `NX_CRYPTO_METHOD` into tls crypto array `_nx_azure_iot_tls_supported_crypto[]`, which will be automatically initialized during tls session creation and then utilized by NetX Secure TLS stack.
18+
19+
## Example
20+
21+
[The STMicroelectronics B-U585I-IOT02A sample project](https://github.com/azure-rtos/samples/releases/download/v6.1_rel/Azure_RTOS_6.1_B-U585I-IOT02A_IAR_Samples_Beta_2021_10_01.zip) implements [TF-M PSA](https://www.trustedfirmware.org/projects/tf-m/) based ECDSA crypto ciphersuite for TLS device authentication. We will use it an an example to demonstrate the above process.
22+
23+
All the changed files are under the path *B-U585I-IOT02A\Projects\B-U585I-IOT02A\Applications\TFM\TFM_Appli\NonSecure\Projects\B-U585I-IOT02A\Applications\TFM\TFM_Appli\NonSecure*.
24+
25+
1. In *psa_crypto_ciphersuites/nx_crypto_psa_crypto_ciphersuites.c*, declare NX_CRYPTO_METHOD struct `crypto_method_ecdsa_psa_crypto` for PSA based ECDSA crypto method.
26+
27+
```c
28+
NX_CRYPTO_METHOD crypto_method_ecdsa_psa_crypto =
29+
{
30+
NX_CRYPTO_DIGITAL_SIGNATURE_ECDSA, /* ECDSA crypto algorithm name */
31+
0, /* Key size in bits */
32+
0, /* IV size in bits */
33+
0, /* ICV size in bits, not used */
34+
0, /* Block size in bytes */
35+
sizeof(NX_CRYPTO_ECDSA_PSA_CRYPTO), /* Metadata size in bytes */
36+
_nx_crypto_method_ecdsa_psa_crypto_init, /* ECDSA initialization routine */
37+
_nx_crypto_method_ecdsa_psa_crypto_cleanup, /* ECDSA cleanup routine */
38+
_nx_crypto_method_ecdsa_psa_crypto_operation, /* ECDSA operation */
39+
};
40+
```
41+
42+
2. In *psa_crypto_ciphersuites/nx_crypto_ecdsa_psa_crypto.c*, define initialization, cleanup and crypto operations for this crypto method.
43+
- `_nx_crypto_method_ecdsa_psa_crypto_init()` for parameter check and metadata initialization;
44+
- `_nx_crypto_method_ecdsa_psa_crypto_cleanup()` for metadata clean up;
45+
- `_nx_crypto_method_ecdsa_psa_crypto_operation()` to perform ECDSA operations, including ECDSA signature, verify, EC curve setting, with [PSA crypto APIs](https://armmbed.github.io/mbed-crypto/html/index.html).
46+
47+
3. In *psa_crypto_ciphersuites/nx_crypto_ecdsa_psa_crypto.h*, define a struct `NX_CRYPTO_ECDSA_PSA_CRYPTO` to save metadata used by crypto functions, such as scrtch buffer, psa key handle, etc.
48+
49+
4. In *Src/nx_azure_iot_ciphersuites.c*, add this newly defined NX_CRYPTO_METHOD `crypto_method_ecdsa_psa_crypto` into `_nx_azure_iot_tls_supported_crypto[]`.
50+
51+
```c
52+
const NX_CRYPTO_METHOD *_nx_azure_iot_tls_supported_crypto[] =
53+
{
54+
&crypto_method_hmac,
55+
&crypto_method_hmac_sha256,
56+
&crypto_method_tls_prf_sha256,
57+
&crypto_method_sha256,
58+
&crypto_method_aes_cbc_128,
59+
&crypto_method_rsa,
60+
#ifdef NX_SECURE_ENABLE_ECC_CIPHERSUITE
61+
#ifdef ENABLE_PSA_CRYPTO_CIPHERSUITES
62+
&crypto_method_ecdsa_psa_crypto, /* PSA based ECDSA crypto method */
63+
#else
64+
&crypto_method_ecdsa,
65+
#endif
66+
&crypto_method_ecdhe,
67+
&crypto_method_ec_secp384,
68+
&crypto_method_ec_secp256,
69+
#endif /* NX_SECURE_ENABLE_ECC_CIPHERSUITE */
70+
};
71+
```
72+
73+
With these changes, the user-defined PSA based ECDSA crypto method will be used by NX secure TLS stack in Azure IoT Sample.

0 commit comments

Comments
 (0)