本文將會介紹 SemiDrive E3 MCAL Crypto 模塊的簡介以及基本配置。此外會結合實際操作的介紹,幫助新手快速了解並掌握這個模塊的使用,文中的 MCAL 是基於 PTG3.0 的版本,開發板是官方的 E3640 網關板。
二、 Crypto 模塊簡介
MCAL 的 Crypto 模塊主要實現了加解密相關的功能,給上層模塊提供了標準 API 接口,該模塊的軟體框圖如圖 2.1 所示。E3 提供的 Crypto 模塊支持以下幾類加解密算法:
- 對稱加密算法,包括 AES、SM4 算法
- 非對稱加密算法,包括 RSA、ECC、SM2、SM9 等算法
- 哈希算法,包括 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512、SM3等
- 真隨機數生成

圖 2.1 Crypto 模塊框圖
三、 Crypto 模塊的主要配置
Crypto 模塊的配置比較簡單,用戶一般使用默認的配置即可,其配置主要有兩部分,密鑰和算法。Crypto 模塊配置的主界面如圖 3.1 所示。密鑰的配置包括了以下幾個部分:
- CryptoKeyElement
- CryptoKeyType
- CryptoKey
算法的配置包括:
- CryptoDriverObject
- CryptoPrimitives

圖 3.1 Crypto 模塊配置主界面
CryptoKeyElement 的配置頁面如圖 3.2 所示,CryptoKeyElement 是每個密鑰的基本組成元素,每個 CryptoKey 由一個或多個的 CryptoKeyElement 組成,因此優先配置 CryptoKeyElement。CryptoKeyElement 主要配置秘鑰的格式、長度以及訪問權限等。
圖 3.2 CryptoKeyElement 配置頁面
CryptoKeyType 表示一個 Key 的組成結構,它可能包含多個 CryptoKeyElement。具體配置頁面如圖 3.3 所示,我們可以在裡面添加之前配置的 CryptoKeyElement。
圖 3.3 CryptoKeyType 配置頁面
最後是配置 CryptoKey,CryptoKey 是 CryptoKeyType 的具體實例,配置頁面如下圖所示。其中 CryptoKeyType 選項配置這個秘鑰的類型,比如 CRYPTO_KEYTYPE_SKE_KEY_256、CRYPTO_KEYTYPE_RSA2048_PUB(RSA2048 公鑰)、CRYPTO_KEYTYPE_RSA2048_PRI(RSA2048 私鑰) 等等。而 CryptoHSMKeyType 選項則表示秘鑰的存儲類型,CMD_KEY_EXTERNAL_CIPHERTEXT(外部密文)、CMD_KEY_EXTERNAL_PLAINTEXT(外部明文)、CMD_KEY_INTERNAL(內部秘鑰)。
圖 3.4 CryptoKey 配置頁面
- 算法方面的配置包括 CryptoDriverObject 和 CryptoPrimitives 兩個部分,CryptoPrimitives 的配置頁面如圖5 所示。CryptoPrimitives主要用於配置具體的算法,包括 SHA1、SHA2_224、SM3 等等。

圖 3.5 CryptoPrimitives 配置頁面
CryptoDriverObject 是用來運行加密算法的實體,一個 CryptoDriverObject 包含同一系列算法,是一類算法的集合。具體配置界面如圖 3.6 所示。
圖 3.6 CryptoDriverObject 配置頁面
以上便是關於 Crypto 模塊的相關配置介紹,一般情況下使用 MCAL 默認的配置即可。
四、 實際操作
如圖 4.1 所示為 Crypto 模塊關於哈希算法的測試代碼,該測試代碼為我們演示如何指定對應的哈希算法進行哈希計算,其計算結果會通過串口列印出來。
圖 4.1 測試代碼
關於如何調用這個測試代碼,操作如下,板子燒錄好代碼後,接上調試 USB,重新上電運行,通過串口首先輸入“runcase 1700”執行Crypto 模組的初始化,接著輸入 “runcase 1701”執行這段測試代碼,從串口中可以看到運算的哈希結果並且提示測試通過。具體如下圖所示。

圖 4.2 串口列印
五、 參考資料
1.《SemiDrive_E3_MCAL_User_Guide_Rev03.00.pdf》,2023.08
評論