# 项目名称：Crypto_Demo

---
## 功能描述

- **Crypto**:
  - 本示例用于演示如何使用Crypto模块的API。示例展示了硬件支持的所有服务，如：CMAC生成和验签、加密/解密以及随机数生成等。异步作业时均使用DMA方法传输数据。
  - 本示例分别展示了服务运行于同步模式与异步模式的过程，以及如何让服务运行于单次模式或流模式。

- **使用示例工程生成Keil或IAR工程注意事项**
  - 由于app目录下除main.c外的其他文件不会自动复制到Keil或IAR工程中，因此需要手动将app目录下的其他文件添加到工程中，才能进行编译。

- **数据长度对齐要求**
  - ***随机数生成***不需要输入数据，输出数据长度必须为4字节对齐且必须小于32字节。
  - ***CMAC 生成*** 和 ***验签*** 输入数据长度必须为16字节对齐，如果数据长度未对齐，应该用0x00或0xff或其他值填充数据，但计算结果会改变。输出数据长度必须为16字节。密钥长度为128-bits。
  - ***加密/解密*** 输入数据长度必须为16字节对齐，如果数据长度未对齐，应该用0x00或0xff或其他值填充数据，但计算结果会改变。输入数据和输出数据长度必须相等。密钥长度为128-bits。

在本示例中，MCU完成时钟和Crypto等模块的初始化后，main()函数将重复执行示例中配置的任务（如加密/解密、随机数生成,CMAC生成和验签等）。我们可以通过以下方式检查每个任务的结果：
  - 每次加密、解密、CMAC生成或验签任务完成后，程序会检查结果是否正确。如果结果不正确，程序将进入while(1)。
  - 对于随机数生成任务，示例中未进行结果验证。用户可以在随机数生成函数完成后设置断点，查看结果缓存数组（Random_Generate）来验证随机数生成是否成功，如下图所示：
![API](RandomCheck.png)

---


## 操作步骤

+ ***步骤1***：使用 YCT 工具打开示例的配置工程文件（`Crypto_Demo.yct`），根据您的需求配置工具链（默认使用 VS Code + GCC）。
+ ***步骤2***：生成代码，如果需要，您可以更改配置（以适应您自己的硬件设计），如果这样做，请确保所有修改都正确无误，并且在生成代码之前没有错误存在。
+ ***步骤3***：根据您的配置，使用相应的工具（VS Code/IAR/Keil IDE）打开生成的工程。
+ ***步骤4***：编译生成的工程，打开 EVB 电源并通过可用的调试器（如 J-Link 调试探针）将编译好的可执行文件下载到 EVB。
+ ***步骤5***：调试、运行示例代码。
  
---


## 硬件需求
+ **EVB**: YTM32B1MD1-EVB-Q100-Rev.A/B
+ **调试器**: J-Link HW v9 或更高版本，安装了 YUNTU `YTM32B1MD1` 补丁（支持包）。

***注意***: 请确认EVB底部的版本号，如果是***YTM32B1MD1-EVB-Q100-Rev.A***，`Icu_Demo`请使用以`_RevA`结尾的样例工程。

---

## 软件需求

+ **配置和代码生成工具**
  + **MCAL**: Yuntu Config Tool(YCT) v2.7.0 或更高版本
+ **编译器工具链**
  + **GCC**: GNU GCC v10.3 或更高版本
  + **Keil/MDK**: ARM Keil/MDK v5.36 或更高版本(编译器推荐使用`armclang v6.18.2`)
  + **IAR**: IAR v9.50 或更高版本
  + **VS Code**: Microsoft Visual Studio Code IDE v1.76 或更高版本（需要 C/C++ 支持，GNU 工具链，CMake v3.25，ninja，Cortex-Debug 扩展安装）
+ **Debugger driver**
    + **J-Link**: SEGGER J-Link v7.82 或更高版本，需要安装 YUNTU `YTM32B1MD1` 补丁（支持包）。
    + **Ozone Debugger tool**: SEGGER Ozone v3.28 或更高版本。

    ***注意***: 需要安装 **YTM32B1MD1** 补丁，补丁可通过 **YCT** 工具或联系 ***云途 销售/FAE 团队***获取.

---