S32K的Csec硬件安全模块计算CMAC
通过实际操作发现,完全相同的形式(同样的flash起始地址和同样的size),不同的API去计算CMAC(not Boot-MAC)的值,得到的结果显然是不一样的。
原因如下:
CSEC_DRV_GenerateMAC 这个API是按照每次1字节去读取数据的。
CSEC_DRV_GenerateMACAddrMode 猜想这个API是按照每次4个字节去读取数据的。
因为S32K系列的MCU是little-endian模式(默认情况下)。一个0x12345678的十六进制数被认为是[0x78, 0x56, 0x34, 0x12]。不同的角度去读取数值,得到的结果是不一样的。
也就是说,完全相同的形式(同样的flash起始地址和同样的size),得到的结果必定是不一样的。但是用户可以从不同的角度去“解读”计算得到的结果,可以认为两者都是对的。
所以结果不一致在这个芯片下是“正常”的。