一、简介
Harmony 3中提供了一个为嵌入式应用使用的C语言接口加密库(Cryptographic Library),包括加密、解密、哈希函数、身份验证和压缩的功能,以及随机数生成(RNG)功能。
加密库主要功能:
·分组密码(Block Ciphers): 提供DES、3DES和AES以满足分组密码的需要。根据使用的算法,支持CBC和CTR模式。
·公钥加密(Public Key Cryptography):为公钥加密提供RSA和椭圆曲线加密(ECC),为密钥协议安排提供Diffie-Hellman(DH)。
·哈希函数(Hash Functions):提供MD5、SHA、SHA-256、SHA-384和SHA-512哈希处理函数。这些函数不需要键值或初始化向量(IV)。
·随机数生成函数(Random Number Generation Functions):该库提供了生成单个伪随机数或一组伪随机数的函数。
下面将为大家介绍如何使用这个加密库。
二、硬件工具和软件平台
硬件:SAM E54 Xplained Pro
软件:
MPLAB® X IDE: v5.20或者更新
XC32: v2.15或者更新
Harmony 3: v3.21或者更新 (bsp, core, crypto, csp)
三、使用加密库
(一) 获取Harmony 3 加密库
如果之前没有下载Harmony 3 加密库,则可以打开MPLABX IDE,点击Tools > Embedded > MPLAB Harmony 3 Framework Downloader,然后按提示下载。
详细步骤可参考:“MPLAB® Harmony 3之基础篇(01) -- Harmony 3开发环境搭建”。
成功下载Harmony 3 加密库后,会看到如下类似界面:
(二) 加密库接口头文件 - crypto.h
加密库的函数接口在crypto.h头文件中定义。任何使用加密库的C文件都需要包含crypto.h。在这个头文件中有详细的接口函数说明,以及接口使用方法。
(三) 加密库接口函数
加密库接口函数被划分为不同的子功能:
加密库接口子功能 | 说明 |
常规函数 | 提供错误字符串函数,该函数接收错误码并将其转换为人类可读的文本。 |
压缩函数 | 提供哈夫曼压缩和解压功能。 |
MD5函数 | 提供MD5数据添加、完成和初始化函数。 |
随机数生成函数 | 提供获取、初始化和块生成RNG函数。 |
AES加密/解密函数 | 提供AES加密和解密功能。 |
ECC加密/解密函数 | 提供ECC加密和解密功能。 |
RSA加密/解密函数 | 提供RSA加密和解密功能。 |
三重DES加密/解密函数 | 提供3DES加密和解密功能。 |
HMAC哈希函数 | 提供HMAC数据添加、完成和设置键哈希函数。 |
SHA哈希函数 | 提供SHA256,SHA384, SHA512数据添加、完成和初始化哈希函数。 |
加密库接口的详细文档可以从本地或在线获得:
·本地文档:<< span="">crypto library path>\doc\help_harmony_crypto.chm
·在线文档:https://microchip-mplab-harmony.github.io/crypto
四、例程
接下来,我们打开一个使用Harmony 3加解密库的SAME54例程,看看如何使用加密库。
(一) 在MPLAB X IDE里打开加解密例程(encrypt_decrypt)
在MPLAB X IDE里点击File > Open Project:
选择“sam_e54_xplained_pro.X”例程,然后点击“Open Project”按钮打开项目。
(二) 启动MHC
如果不想查看或更改项目代码配置,可以跳过此步骤。MHC的使用方法,请参考文档:“MPLAB® Harmony 3之基础篇(02) -- 了解MHC”。
在MPLAB X IDE里点击Tools > Embeded > MPLAB Harmony 3 Configurator启动:
点击“Launch”按钮启动MHC。
(三) 配置加密库
如果不想更改加密库配置,可以跳过此步骤。
1.在Project Graph窗口选择“Cryptographic (Crypto) Library”组件
2.然后在“Configuration Options”窗口,可以对选择的组件进行参数配置
注意:ATSAME54芯片有硬件支持TRNG, AES, SHA-1, SHA-224, SHA-256,所以例程中使能了硬件加速(Use Hardware Acceleration)。当无硬件加解密功能时,则可以使用软件加密算法,比如例程中的SHA-384, SHA-512。
(四) 使用MHC, 生成代码
因为我们打开的是例程,没有做修改,所以不用重新产生代码。
如果在MHC中有修改配置,则保存并生成代码:
在本例程中,主要的应用程序代码在app.c中。在APP_Tasks()函数里,会依次调用相关的测试函数:
·md5_test():MD5接口函数调用示例及测试
·sha_test():SHA接口函数调用示例及测试
·……
(五) 编译下载测试
1.用Micro USB线将SAM E54 Xplained Pro开发板连接到电脑
2.在项目属性里选择XC32编译器和SAM E54 Xplained Pro EDBG调试接口
3.编译下载
编译并下载程序:
在串口终端程序里,你将看到这样的打印信息:
五、总结
本文介绍了Harmony 3密码库的主要功能,并通过一个例程说明如何使用密码库进行数据加解密。关于密码库的更详细用法,请参考密码库的帮助文档和例程。