Skip to content

Commit db58f51

Browse files
committed
STM32H5: fixed TRNG and LEDs, added PKCS11 to app
1 parent 42217a0 commit db58f51

File tree

4 files changed

+107
-26
lines changed

4 files changed

+107
-26
lines changed

config/examples/stm32h5-wolfcrypt-tz.config

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ V?=0
1818
SPMATH?=1
1919
RAM_CODE?=0
2020
DUALBANK_SWAP?=0
21-
WOLFBOOT_PARTITION_SIZE?=0x1F800
21+
WOLFBOOT_PARTITION_SIZE?=0xC0000
2222
WOLFBOOT_SECTOR_SIZE?=0x2000
2323
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x08040000
24-
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x805F800
25-
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x0807F000
24+
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x8140000
25+
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x08010000
2626
FLAGS_HOME=0
2727
DISABLE_BACKUP=0
2828
WOLFCRYPT_TZ=1

hal/stm32_tz.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,7 @@ static void hsi48_on(void)
271271
RCC_CRRCR |= RCC_CRRCR_HSI48ON;
272272
while ((RCC_CRRCR & RCC_CRRCR_HSI48RDY) == 0)
273273
;
274-
#endif
275-
#ifdef PLATFORM_stm32u5
274+
#else /* U5 and H5 */
276275
RCC_CR |= RCC_CR_HSI48ON;
277276
while ((RCC_CR & RCC_CR_HSI48RDY) == 0)
278277
;
@@ -290,9 +289,9 @@ void hal_trng_init(void)
290289
reg_val &= ~(0x7 << TRNG_CR_CLKDIV_SHIFT);
291290
reg_val &= ~(0x3 << TRNG_CR_CONFIG2_SHIFT);
292291
reg_val &= ~(0x7 << TRNG_CR_CONFIG3_SHIFT);
293-
294292
reg_val |= 0x0F << TRNG_CR_CONFIG1_SHIFT;
295293
reg_val |= 0x0D << TRNG_CR_CONFIG3_SHIFT;
294+
296295
#ifdef PLATFORM_stm32u5 /* RM0456 40.6.2 */
297296
reg_val |= 0x06 << TRNG_CR_CLKDIV_SHIFT;
298297
#endif

hal/stm32h5.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@
344344
#define GPIOB_AHB2_CLOCK_ER (1 << 1)
345345
#define GPIOC_AHB2_CLOCK_ER (1 << 2)
346346
#define GPIOD_AHB2_CLOCK_ER (1 << 3)
347+
#define GPIOF_AHB2_CLOCK_ER (1 << 5)
347348
#define GPIOG_AHB2_CLOCK_ER (1 << 6)
348349
#define TRNG_AHB2_CLOCK_ER (1 << 18)
349350
#define PKA_AHB2_CLOCK_ER (1 << 19)
@@ -358,16 +359,12 @@
358359

359360
#define GPIO_SECCFGR(base) (*(volatile uint32_t *)(base + 0x30))
360361

361-
#ifdef STM32_DISCOVERY
362-
#define LED_AHB2_ENABLE (GPIOD_AHB2_CLOCK_ER | GPIOG_AHB2_CLOCK_ER)
363-
#define LED_BOOT_PIN (12) /* PG12 - Discovery - Green Led */
364-
#define LED_USR_PIN (3) /* PD3 - Discovery - Red Led */
365-
#else
366-
#define LED_AHB2_ENABLE (GPIOA_AHB2_CLOCK_ER | GPIOB_AHB2_CLOCK_ER | \
367-
GPIOC_AHB2_CLOCK_ER)
368-
#define LED_BOOT_PIN (9) /* PA9 - Nucleo board - Red Led */
369-
#define LED_USR_PIN (7) /* PC7 - Nucleo board - Green Led */
370-
#define LED_EXTRA_PIN (7) /* PB7 - Nucleo board - Blue Led */
371-
#endif
362+
363+
364+
#define LED_AHB2_ENABLE (GPIOG_AHB2_CLOCK_ER | GPIOB_AHB2_CLOCK_ER | \
365+
GPIOF_AHB2_CLOCK_ER)
366+
#define LED_BOOT_PIN (4) /* PG4 - Nucleo board - Orange Led */
367+
#define LED_USR_PIN (0) /* PB0 - Nucleo board - Green Led */
368+
#define LED_EXTRA_PIN (4) /* PF4 - Nucleo board - Blue Led */
372369

373370
#endif /* STM32H5_DEF_INCLUDED */

test-app/app_stm32h5.c

Lines changed: 94 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,18 @@
2929
#include "hal.h"
3030
#include "wolfboot/wolfboot.h"
3131

32+
#ifdef SECURE_PKCS11
33+
#include "wcs/user_settings.h"
34+
#include <wolfssl/wolfcrypt/settings.h>
35+
#include <wolfssl/wolfcrypt/wc_pkcs11.h>
36+
#include <wolfssl/wolfcrypt/random.h>
37+
extern const char pkcs11_library_name[];
38+
extern const CK_FUNCTION_LIST wolfpkcs11nsFunctionList;
39+
#endif
40+
3241
#define LED_BOOT_PIN (4) /* PG4 - Nucleo - Red Led */
3342
#define LED_USR_PIN (0) /* PB0 - Nucleo - Green Led */
34-
#define LED_USR2_PIN (4) /* PF4 - Nucleo - Orange Led */
43+
#define LED_EXTRA_PIN (4) /* PF4 - Nucleo - Orange Led */
3544

3645
/*Non-Secure */
3746
#define RCC_BASE (0x44020C00) /* RM0481 - Table 3 */
@@ -97,10 +106,10 @@ void usr_led_off(void)
97106
GPIOB_BSRR |= (1 << (LED_USR_PIN + 16));
98107
}
99108

100-
void usr2_led_on(void)
109+
void extra_led_on(void)
101110
{
102111
uint32_t reg;
103-
uint32_t pin = LED_USR2_PIN;
112+
uint32_t pin = LED_EXTRA_PIN;
104113

105114
RCC_AHB2ENR1_CLOCK_ER|= GPIOF_AHB2ENR1_CLOCK_ER;
106115
/* Delay after an RCC peripheral clock enabling */
@@ -112,18 +121,94 @@ void usr2_led_on(void)
112121
GPIOF_BSRR |= (1 << (pin));
113122
}
114123

115-
void usr2_led_off(void)
124+
void extra_led_off(void)
116125
{
117-
GPIOF_BSRR |= (1 << (LED_USR2_PIN + 16));
126+
GPIOF_BSRR |= (1 << (LED_EXTRA_PIN + 16));
118127
}
119128

129+
static char CaBuf[2048];
130+
static uint8_t my_pubkey[200];
131+
132+
extern int ecdsa_sign_verify(int devId);
133+
134+
120135
void main(void)
121136
{
137+
int ret;
138+
uint32_t rand;
139+
uint32_t i;
140+
uint32_t klen = 200;
141+
int otherkey_slot;
142+
unsigned int devId = 0;
143+
144+
#ifdef SECURE_PKCS11
145+
WC_RNG rng;
146+
Pkcs11Token token;
147+
Pkcs11Dev PKCS11_d;
148+
unsigned long session;
149+
char TokenPin[] = "0123456789ABCDEF";
150+
char UserPin[] = "ABCDEF0123456789";
151+
char SoPinName[] = "SO-PIN";
152+
122153
boot_led_on();
123-
usr_led_on();
124-
boot_led_off();
125-
if (wolfBoot_current_firmware_version() > 1)
126-
usr2_led_on();
154+
155+
wolfCrypt_Init();
156+
157+
PKCS11_d.heap = NULL,
158+
PKCS11_d.func = (CK_FUNCTION_LIST *)&wolfpkcs11nsFunctionList;
159+
160+
ret = wc_Pkcs11Token_Init(&token, &PKCS11_d, 1, "EccKey",
161+
(const byte*)TokenPin, strlen(TokenPin));
162+
163+
if (ret == 0) {
164+
ret = wolfpkcs11nsFunctionList.C_OpenSession(1,
165+
CKF_SERIAL_SESSION | CKF_RW_SESSION,
166+
NULL, NULL, &session);
167+
}
168+
if (ret == 0) {
169+
ret = wolfpkcs11nsFunctionList.C_InitToken(1,
170+
(byte *)TokenPin, strlen(TokenPin), (byte *)SoPinName);
171+
}
172+
173+
if (ret == 0) {
174+
extra_led_on();
175+
ret = wolfpkcs11nsFunctionList.C_Login(session, CKU_SO,
176+
(byte *)TokenPin,
177+
strlen(TokenPin));
178+
}
179+
if (ret == 0) {
180+
ret = wolfpkcs11nsFunctionList.C_InitPIN(session,
181+
(byte *)TokenPin,
182+
strlen(TokenPin));
183+
}
184+
if (ret == 0) {
185+
ret = wolfpkcs11nsFunctionList.C_Logout(session);
186+
}
187+
if (ret != 0) {
188+
while(1)
189+
;
190+
}
191+
if (ret == 0) {
192+
ret = wc_CryptoDev_RegisterDevice(devId, wc_Pkcs11_CryptoDevCb,
193+
&token);
194+
if (ret != 0) {
195+
while(1)
196+
;
197+
}
198+
if (ret == 0) {
199+
#ifdef HAVE_ECC
200+
ret = ecdsa_sign_verify(devId);
201+
if (ret != 0)
202+
ret = 1;
203+
else
204+
usr_led_on();
205+
#endif
206+
}
207+
wc_Pkcs11Token_Final(&token);
208+
}
209+
#endif
127210
while(1)
128211
;
212+
213+
/* Never reached */
129214
}

0 commit comments

Comments
 (0)