|
整个测试包含三个部分:" A* B7 w* h" ^# O: V& {1 i+ x 1. AES加密测试( J3 E# c! B* ^4 g 2. SHA-256测试' v0 D; a9 V" |) X 3. TRNG生成测试 4 W$ u A( b7 Y2 m 还是接着之前的工程代码继续测试。 【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢 关于AES测试我在CubeMX中没有找到对应的AES外设,这里只看到HASH和RNG两个外设。
于是我打开官网搜索STM32H5E5ZJ芯片,这里简介也只看到了HASH和TRNG。
我又下载了芯片参考手册,继续搜索AES发现了有SAES,这个应该是只能在安全区使用的AES
然后我重新用CubeMX创建带TrustZone的工程代码,搜索AES还是没有找到,到这里我就有点搞不明白了,STM32H5E5ZJ到底有没有AES外设呢?7 Q3 k5 Q$ G9 G% [" C* H! o$ y( B
* {& |2 v0 k6 f2 |" c0 S( C; Q 我在stm32h5e5xx.h中也没有找到AES和SAES相关宏定义,于是我就准备先使用软件AES加密来测试这一项。7 r: _$ o6 ?/ `8 T5 _
Z0 u- v; U1 e /* 软件 AES-128-ECB 加密 1KB */3 k( D/ z5 K! M$ }7 s- \ static void run_sw_aes_test(void)6 k# Y- s8 ]! j8 A: Q { static const uint8_t key[16] = {. r' O' r5 e" I 0x2B,0x7E,0x15,0x16,0x28,0xAE,0xD2,0xA6, 0xAB,0xF7,0x15,0x88,0x09,0xCF,0x4F,0x3C5 z8 X, |5 ?+ L' ]( P! L+ z( M1 Z8 y }; static uint8_t rk[11][16]; static uint8_t out_buf[CRYPTO_BUF_SIZE];3 l$ d$ g1 t1 x' t: D# F for (uint32_t i = 0; i < CRYPTO_BUF_SIZE; i++) crypto_buf = (uint8_t)i; aes128_key_expand(key, rk);' b% O) g6 u( @5 h# M uint32_t t0 = DWT_GET();( n7 M) a& v: l3 V5 R7 `* { for (uint32_t off = 0; off < CRYPTO_BUF_SIZE; off += 16)* x5 ?4 G. g; j5 b- j aes128_encrypt_block((const uint8_t (*)[16])rk, crypto_buf + off, out_buf + off);( Z) M$ O Y0 N$ K; {' c7 X uint32_t cycles = DWT_GET() - t0; 2 u1 U7 B1 q" N. f" w# u: ~3 | printf("[4a] SW AES-128 : %lu cycles -> %lu KB/s (1KB)\r\n", cycles, (uint32_t)((uint64_t)CRYPTO_BUF_SIZE * CPU_FREQ_MHZ * 1000000u / ((uint64_t)cycles * 1024u))); }& D( x. u4 J5 W
HASH测试了SHA-256,也是1kbyte大小 , x" a4 c& B! k$ h, `- d; Q; `; r5 k /* SHA-256 哈希 1KB */% [+ I9 n7 f9 a) r' P static void run_hash_test(void) { static uint8_t digest[32];$ ]0 U8 o6 f ^! l# a- h& e for (uint32_t i = 0; i < CRYPTO_BUF_SIZE; i++)/ H; r3 |3 G6 b5 ^3 ] crypto_buf = (uint8_t)i;) X- ~% `$ e: A3 \ uint32_t t0 = DWT_GET(); HAL_HASH_Start(&hhash, crypto_buf, CRYPTO_BUF_SIZE, digest, 1000); uint32_t cycles = DWT_GET() - t0;* M. S1 K8 g [$ q % r6 c5 o0 q6 Y' W% T" B/ X7 h8 M printf("[4b] SHA-256 : %lu cycles -> %lu KB/s (1KB)\r\n", cycles, (uint32_t)((uint64_t)CRYPTO_BUF_SIZE * CPU_FREQ_MHZ * 1000000u / ((uint64_t)cycles * 1024u)));: [/ d$ F1 S; s, ? }5 f- D) O% \9 d5 |& ?+ U
随机数测试了生成1次随机数耗时 /* TRNG 真随机数生成速率 */ static void run_trng_test(void) {- X1 d2 `. J7 } uint32_t val;; Y5 u- x- E6 Z5 k6 B5 s5 i: x k /* 先读一次丢弃,确保下一个已就绪 */2 n2 _3 W, f) L+ {; F% v- | HAL_RNG_GenerateRandomNumber(&hrng, &val);) @. ?) F$ T" H' x uint32_t t0 = DWT_GET();3 g" R/ h9 Y k3 |6 \- E3 b HAL_RNG_GenerateRandomNumber(&hrng, &val);8 ?+ ]7 }5 W- b0 d uint32_t cycles = DWT_GET() - t0; & z/ W; j0 \* y: M+ J1 _: Z7 z printf("[4c] TRNG : %lu cycles = %lu ns (1x 32-bit)\r\n",9 K$ p+ G) N; s) H. |6 c, u I cycles, CYCLES_TO_NS(cycles));1 a9 Y i9 B& O; r9 e+ n } : h6 ~! @5 ]# y1 G" I5 f) R 测试结果如下: 9 C- p1 w# `) p [4] Crypto & TRNG Performance Test... [4a] SW AES-128 : 228948 cycles -> 1091 KB/s (1KB) [4b] SHA-256 : 4587 cycles -> 54501 KB/s (1KB) [4c] TRNG : 69 cycles = 276 ns (1x 32-bit), U: P. T; _- p# X- u HASH和TRNG的测试速度都很快,因为AES使用的软件实现方法,用了一个简单的查表计算,和硬件HASH计算差异还是挺大的,就是不确定STM32H5E5ZJ芯片是不是真的没有AES外设。 " U" G$ U* P: j 3 m) d4 I7 s5 B& q Z / G$ @! I/ B$ c9 ~% r |
【STM32H5 评测】内存读写性能 - STM32H5E5实测Flash,SRAM读写速度,用DMA搬运大块数据
【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
【STM32H5 评测】3、STM32H5 Lwip 移植、官方例程和UDP发送数据
【STM32H5 评测】基于NUCLEO_H5E5ZJ+Zephyr数字电源
【STM32H5 评测】2、Keil中添加RTX5 RTOS和Event Record
NUCLEO-H5E5ZJ 移植 LVGL
NUCLEO-H5E5ZJ 移植 ST7735 SPI LCD 驱动
NUCLEO-H5E5ZJ 以太网(Ethernet)移植记录
【STM32H5 评测】介绍、环境搭建、工程测试
架构革新篇:单芯片 GUI 方案原理与核心优化技术
微信公众号
手机版