|
整个测试包含三个部分:1 `& g: ?, d& W+ I# Y# z 1. AES加密测试 2. SHA-256测试' i# L! L& @6 |7 l* r/ l 3. TRNG生成测试 & s. c4 p' \3 r, v! o9 J3 @4 [ 还是接着之前的工程代码继续测试。 【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢 8 I! y O$ ~+ @; {) P7 Q4 j) z 关于AES测试我在CubeMX中没有找到对应的AES外设,这里只看到HASH和RNG两个外设。
于是我打开官网搜索STM32H5E5ZJ芯片,这里简介也只看到了HASH和TRNG。) I" `$ s! n: \( D C1 i: J) T
我又下载了芯片参考手册,继续搜索AES发现了有SAES,这个应该是只能在安全区使用的AES
然后我重新用CubeMX创建带TrustZone的工程代码,搜索AES还是没有找到,到这里我就有点搞不明白了,STM32H5E5ZJ到底有没有AES外设呢?- h; |# a2 ]! e+ [
, ?' T' ~; k: z5 g/ z: I2 n0 \5 H9 z6 T 我在stm32h5e5xx.h中也没有找到AES和SAES相关宏定义,于是我就准备先使用软件AES加密来测试这一项。
2 ^6 d4 C7 ]/ b E# y /* 软件 AES-128-ECB 加密 1KB */0 z5 ^1 s. z* a static void run_sw_aes_test(void): ^. `2 t M0 c" g, V" i; \ {$ Z6 h9 w/ v! |' q. @4 q) d static const uint8_t key[16] = { 0x2B,0x7E,0x15,0x16,0x28,0xAE,0xD2,0xA6, S8 e; {$ E6 T 0xAB,0xF7,0x15,0x88,0x09,0xCF,0x4F,0x3C5 C$ m. E3 ?3 |% N& Y }; static uint8_t rk[11][16];6 s, \& g" Y6 ~0 c( G" p static uint8_t out_buf[CRYPTO_BUF_SIZE];, n2 h6 _( ]3 v+ f, C$ f* z9 | 1 Z4 E3 D6 i K- L8 Y7 b3 O for (uint32_t i = 0; i < CRYPTO_BUF_SIZE; i++) crypto_buf = (uint8_t)i; 5 j; k; u) [* W) F aes128_key_expand(key, rk);4 ^! j$ A& ~$ l/ q 9 c$ Q4 R# D9 I" L7 u uint32_t t0 = DWT_GET(); for (uint32_t off = 0; off < CRYPTO_BUF_SIZE; off += 16) aes128_encrypt_block((const uint8_t (*)[16])rk, crypto_buf + off, out_buf + off);( W( f% O$ @2 A1 c ` uint32_t cycles = DWT_GET() - t0; 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))); } & g( d( L8 |5 i9 n$ ^$ r. v' R
HASH测试了SHA-256,也是1kbyte大小 6 ~9 B; j7 M2 P0 E" t /* SHA-256 哈希 1KB */ z3 N7 t. ^- d0 U* k% h static void run_hash_test(void) { static uint8_t digest[32];' E* U1 ~3 Y, E" c* R0 D$ Q 1 k0 ? K: H3 U for (uint32_t i = 0; i < CRYPTO_BUF_SIZE; i++)8 p+ t' d: \8 V+ D crypto_buf = (uint8_t)i; ' s* H% b' K" M! }9 z uint32_t t0 = DWT_GET(); HAL_HASH_Start(&hhash, crypto_buf, CRYPTO_BUF_SIZE, digest, 1000); uint32_t cycles = DWT_GET() - t0; ! d2 [: E2 M* x7 n 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)));0 _: u) c0 p# L7 e! I. D6 _. t }6 E) g R+ M) U! |0 Y1 L- e( ?( h - G# S4 q$ V9 m
随机数测试了生成1次随机数耗时, W- T" L$ i3 A* O9 z /* TRNG 真随机数生成速率 */9 i0 v' s% A$ j/ Y+ x1 l. n6 p static void run_trng_test(void)" m a& k2 S Z8 W: L, Q5 O" G! p% J {6 ?) y3 s. l P/ V# ~7 y" Y$ C uint32_t val;. \( _2 g! n [9 J5 ~# Y# L& g& o /* 先读一次丢弃,确保下一个已就绪 */; V* t4 X6 u5 E Q2 z HAL_RNG_GenerateRandomNumber(&hrng, &val);9 @) L4 ]. o! v- W$ [/ x uint32_t t0 = DWT_GET(); HAL_RNG_GenerateRandomNumber(&hrng, &val); uint32_t cycles = DWT_GET() - t0;, \4 w8 Z' P* x: E 5 e5 ^: z+ [! q0 j K8 H printf("[4c] TRNG : %lu cycles = %lu ns (1x 32-bit)\r\n",. E. |5 r+ r& y; a9 b1 p2 r7 P cycles, CYCLES_TO_NS(cycles));: P: S% }- |5 Z" c7 M" r! u$ ^( o" r } V2 A6 M. W9 R0 J+ Y) U 1 B" E8 w+ r, f" V" p4 M 测试结果如下:3 }2 U9 C7 d) W, t7 K" b [4] Crypto & TRNG Performance Test... [4a] SW AES-128 : 228948 cycles -> 1091 KB/s (1KB) [4b] SHA-256 : 4587 cycles -> 54501 KB/s (1KB)) o3 ]/ h; y8 ]7 [! S) ~6 s3 H# V [4c] TRNG : 69 cycles = 276 ns (1x 32-bit) 2 T2 ]4 z. X+ C3 f ; j. F/ M- m: O$ D9 ]0 n HASH和TRNG的测试速度都很快,因为AES使用的软件实现方法,用了一个简单的查表计算,和硬件HASH计算差异还是挺大的,就是不确定STM32H5E5ZJ芯片是不是真的没有AES外设。 2 l: q. ^, H, m% f % W( a {) Q+ i0 U- j3 f* M & I2 A' B g) B( x7 q# k4 B |
【STM32H5 评测】Part4 STM32H5E5 存储测试
【NUCLEO-H5E5ZJ评测】M.2存储扩展实测
【STM32H5 评测】+ 多外设同时开启稳定性简要评测
【NUCLEO-H5E5ZJ评测】CoreMark 移植实录:从 CubeMX 到 700.89 分
【STM32H5 评测】+ 增加ETH外设和NetX协议栈实验
从 CubeMX 到 MX2:这些关键变化必须知道
【STM32H5 评测】+ H5E5专用OLED点亮实验
【STM32H5 评测】ADC 电压表
【STM32H5 评测】Part3 STM32H5E5 密码学加速性能测试
【STM32H5 评测】 Part1 Cortex-M33@250MHz内核性能测试
微信公众号
手机版
楼主行动迅速啊👍 ,这么快就开示评测了。AES的协处理器手册里确实写了有这硬件,CubeMX找不到或许只是Cubemx没支持,我在Cube包的例子中找到了,例子工程里面叫CRYP,其中最详细的是这在STM32Cube_FW_H5_V1.7.0\Projects\STM32H573I-DK\Examples\CRYP,这里面有5个AES相关的例子。 考虑到H5E5芯片是新出的,cube包的例子可能还没完善,但是最接近的E5的比较新的、有AES的芯片是F5。所以可以看看STM32Cube_FW_H5_V1.7.0\Projects\STM32H5F5J-DK\Examples\CRYP\CRYP_SAES_SharedKey
这个我看过,是H573的代码,我用CubeIDE单步调试看过H5E5所有寄存器,没有找到AES相关寄存器。
参考:AN5959_Migrating_within_STM32H5_MCUs