5.1.3. 描述符说明
本章节描述 CE 模块的软件编程接口: 描述符。
5.1.3.1. 任务描述符
软件需要 CE 模块进行硬件加速时要以任务描述符的方式将详细的任务信息配置给 CE 模块, 多个相关的任务通过链表的方式构建任务列表(Task List),CE 模块在处理时按顺序逐个进行处理。
注意
当由多个任务描述符组成一个任务链表时,链表内的所有任务描述符必须使用相同的算法。
任务描述符的大小固定,由下列几部分组成。
任务描述符组成部分 |
大小/字节 |
说明 |
---|---|---|
Algorithm descriptor |
36 |
算法描述符 |
Data descriptor |
24 |
数据描述符 |
Next |
4 |
下一个任务描述符的地址 |
多个相关的任务描述符构成的列表如下图所示。
下表是任务描述符的具体位域分配总览。
字段 |
位域 |
备注 |
|
---|---|---|---|
Algorithm Desc |
Algorithm Config |
31:24 |
- |
23:20 |
Key size, 密钥大小 |
||
19:16 |
Key source, 密钥源选择 |
||
15:12 |
- |
||
11:10 |
Counter width |
||
9 |
Hash IV flag |
||
8 |
Direction |
||
7:0 |
Algorithm tag, 算法标识 |
||
Key address |
31:0 |
||
IV address |
31:0 |
||
Counter output address |
31:0 |
||
Reserved |
[31:0] * 5 |
20 字节 |
|
Data Desc |
Data Info |
31:2 |
- |
1 |
First flag,当前数据是否为开始数据块 |
||
0 |
Last flag,当前数据是否为结束数据块 |
||
Total length |
31:0 |
||
Input Address |
31:0 |
当前输入数据地址 |
|
Input Length |
31:0 |
当前输入数据长度 |
|
Output Address |
31:0 |
当前输出数据地址 |
|
Output Length |
31:0 |
当前输出数据长度 |
|
Next |
31:0 |
下一个任务描述符的地址 |
5.1.3.2. 算法描述符
算法描述符区域,用于描述当前任务的算法信息和参数。为了实现的方便,这里定义算法描述符的大小固定为36个字节。
不同算法需要的输入参数各有不同,对于任务描述符中定义的算法描述符位域,具体的算法描述符根据需要给出具体定义。
算法标记值 |
描述 |
---|---|
0x00 |
AES-ECB |
0x01 |
AES-CBC |
0x02 |
AES-CTR |
0x03 |
- |
0x04 |
- |
0x10 |
DES-ECB |
0x11 |
DES-CBC |
0x20 |
TDES-ECB |
0x21 |
TDES-CBC |
0x30 |
RSA |
0x40 |
SHA-1 |
0x41 |
SHA-224 |
0x42 |
SHA-256 |
0x43 |
SHA-384 |
0x44 |
SHA-512 |
0x45 |
MD5 |
0x46 |
HMAC-SHA-1 |
0x47 |
HMAC-SHA-256 |
0x50 |
TRNG |
5.1.3.2.1. AES-ECB 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:24 |
- |
23:20 |
Key size,密钥大小
0x00: 64 (不支持)
0x01: 128
0x02: 192
0x03: 256
0x04: 512 (不支持)
0x05: 1024 (不支持)
0x06: 2048 (不支持)
|
|
19:16 |
密钥源的选择
0x00: User/RAM
0x01: eFuse SSK
0x02: eFuse HUK
|
|
15:9 |
- |
|
8 |
Direction,运算方向
0x00: Encryption
0x01: Decryption
|
|
7:0 |
Algorithm tag: AES-ECB 具体参考 算法标记值列表 |
|
Key address |
31:0 |
密钥地址
仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址
|
Reserved |
28 Bytes |
5.1.3.2.2. AES-CBC 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:24 |
- |
23:20 |
Key size,密钥大小
0x00: 64 (不支持)
0x01: 128
0x02: 192
0x03: 256
0x04: 512 (不支持)
0x05: 1024 (不支持)
0x06: 2048 (不支持)
|
|
19:16 |
密钥源的选择
0x00: User/RAM
0x01: eFuse SSK
0x02: eFuse HUK
|
|
15:9 |
- |
|
8 |
Direction,运算方向
0x00: Encryption
0x01: Decryption
|
|
7:0 |
Algorithm tag: AES-CBC 具体参考 算法标记值列表 |
|
Key address |
31:0 |
密钥地址
仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址
|
IV address |
31:0 |
初始化向量地址
地址应是SRAM/DRAM 的地址。
地址应8字节对齐。
|
Reserved |
24 Bytes |
5.1.3.2.3. AES-CTR 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:24 |
- |
23:20 |
Key size,密钥大小
0x00: 64 (不支持)
0x01: 128
0x02: 192
0x03: 256
0x04: 512 (不支持)
0x05: 1024 (不支持)
0x06: 2048 (不支持)
|
|
19:16 |
密钥源的选择
0x00: User/RAM
0x01: eFuse SSK
0x02: eFuse HUK
|
|
15:9 |
- |
|
8 |
Direction,运算方向
0x00: Encryption
0x01: Decryption
|
|
7:0 |
Algorithm tag: AES-CTR 具体参考 算法标记值列表 |
|
Key address |
31:0 |
密钥地址
仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址
|
Counter input |
31:0 |
初始化计数值地址
地址应是SRAM/DRAM 的地址。
地址应8字节对齐。
|
Counter output |
31:0 |
计数值输出地址
地址应是SRAM/DRAM 的地址。
地址应8字节对齐。
输出下一个数据块的计数值。 |
Reserved |
20 Bytes |
5.1.3.2.4. DES-ECB 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:24 |
- |
23:20 |
Key size,密钥大小
0x00: 64
0x01: 128 (不支持)
0x02: 192 (不支持)
0x03: 256 (不支持)
0x04: 512 (不支持)
0x05: 1024 (不支持)
0x06: 2048 (不支持)
|
|
19:16 |
密钥源的选择
0x00: User/RAM
0x01: eFuse SSK
0x02: eFuse HUK
|
|
15:9 |
- |
|
8 |
Direction,运算方向
0x00: Encryption
0x01: Decryption
|
|
7:0 |
Algorithm tag: DES-ECB 具体参考 算法标记值列表 |
|
Key address |
31:0 |
密钥地址
仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址
|
Reserved |
28 Bytes |
5.1.3.2.5. DES-CBC 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:24 |
- |
23:20 |
Key size,密钥大小
0x00: 64
0x01: 128 (不支持)
0x02: 192 (不支持)
0x03: 256 (不支持)
0x04: 512 (不支持)
0x05: 1024 (不支持)
0x06: 2048 (不支持)
|
|
19:16 |
密钥源的选择
0x00: User/RAM
0x01: eFuse SSK
0x02: eFuse HUK
|
|
15:9 |
- |
|
8 |
Direction,运算方向
0x00: Encryption
0x01: Decryption
|
|
7:0 |
Algorithm tag: DES-CBC 具体参考 算法标记值列表 |
|
Key address |
31:0 |
密钥地址
仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址
|
IV address |
31:0 |
初始化向量地址
地址应是SRAM/DRAM 的地址。
地址应8字节对齐。
|
Reserved |
24 Bytes |
5.1.3.2.6. TDES-ECB 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:24 |
- |
23:20 |
Key size,密钥大小
0x00: 64 (不支持)
0x01: 128 (TDES-EDE)
0x02: 192 (TDES-EDE3)
0x03: 256 (不支持)
0x04: 512 (不支持)
0x05: 1024 (不支持)
0x06: 2048 (不支持)
|
|
19:16 |
密钥源的选择
0x00: User/RAM
0x01: eFuse SSK
0x02: eFuse HUK
|
|
15:9 |
- |
|
8 |
Direction,运算方向
0x00: Encryption
0x01: Decryption
|
|
7:0 |
Algorithm tag: TDES-ECB 具体参考 算法标记值列表 |
|
Key address |
31:0 |
密钥地址
仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址
|
Reserved |
28 Bytes |
5.1.3.2.7. TDES-CBC 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:24 |
- |
23:20 |
Key size,密钥大小
0x00: 64 (不支持)
0x01: 128 (TDES-EDE)
0x02: 192 (TDES-EDE3)
0x03: 256 (不支持)
0x04: 512 (不支持)
0x05: 1024 (不支持)
0x06: 2048 (不支持)
|
|
19:16 |
密钥源的选择
0x00: User/RAM
0x01: eFuse SSK
0x02: eFuse HUK
|
|
15:9 |
- |
|
8 |
Direction,运算方向
0x00: Encryption
0x01: Decryption
|
|
7:0 |
Algorithm tag: TDES-CBC 具体参考 算法标记值列表 |
|
Key address |
31:0 |
密钥地址
仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址
|
IV address |
31:0 |
初始化向量地址
地址应是SRAM/DRAM 的地址。
地址应8字节对齐。
|
Reserved |
24 Bytes |
5.1.3.2.8. Message Digest 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:12 |
- |
11 |
Input IV Flag,初始化向量标记
0x00: 使用内部默认的初始化向量值
0x01: 使用用户提供的初始化向量值
|
|
10:8 |
- |
|
7:0 |
Algorithm tag 具体参考 算法标记值列表 |
|
Key address |
31:0 |
密钥地址
仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址
仅 HMAC 算法需要配置,为任意长度数据
|
IV address |
31:0 |
初始化向量地址(Input IV Flag 为 1 时)
地址应是SRAM/DRAM 的地址。
地址应8字节对齐。
初始化向量的长度,应参考对应算法的规定
|
Reserved |
24 Bytes |
5.1.3.2.9. PKC 算子描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:24 |
- |
23:20 |
Operand size, 操作数大小
0x00: 64 (不支持)
0x01: 128 (不支持)
0x02: 192 (不支持)
0x03: 256 (不支持)
0x04: 512
0x05: 1024
0x06: 2048
|
|
19:8 |
- |
|
7:0 |
Algorithm tag: RSA 具体参考 算法标记值列表 |
|
Modulus address |
31:0 |
模(n)的地址
地址应是SRAM/DRAM/Secure SRAM 的地址
地址应8字节对齐。
|
Exp address |
31:0 |
指数(即素数 d、e)的地址
地址应是SRAM/DRAM/Secure SRAM 的地址。
地址应8字节对齐。
|
Reserved |
24 Bytes |
RSA 算法的实现被定义为模幂算子,算子有三个操作数和一个输出,长度都为 Operand size 所指定的位宽,注意输入的三个操作数,要求为小端序。
输入的三个操作数,其中模通过和指数的地址通过算法描述符 Modulus, Exp 指定,底数(即用户数据)的地址通过数据描述符的 Input 指定。
5.1.3.2.10. TRNG 描述符
字段 |
位域 |
描述 |
---|---|---|
Algorithm config |
31:8 |
- |
7:0 |
Algorithm tag: TRNG 具体参考 算法标记值列表 |
|
Reserved |
32 Bytes |
5.1.3.3. 数据描述符
字段 |
位域 |
描述 |
---|---|---|
Data information |
31:24 |
Hash data total length high8 数据摘要总数据长度的高8位,在数据摘要算法 中使用 |
23:2 |
- |
|
1 |
Last Flag, 结束数据块标记
0: 当前数据数据非结束数据块
1: 当前数据数据为结束数据块
|
|
0 |
First Flag, 结束数据块标记
0: 当前数据数据非开始数据块
1: 当前数据数据为开始数据块
|
|
Hash data total length low32 |
31:0 |
数据摘要总数据长度的低32位 仅在数据摘要算法中使用,表示所有处理的数据 长度 |
Input address |
31:0 |
当前输入数据地址
地址应是 SRAM/DRAM的有效地址
不可以为Secure SRAM 的地址。
地址应8字节对齐。
|
Input data length |
31:0 |
当前输入数据长度
对AES算法,数据长度都应该为16字节对齐
CTR模式请向上取整到16字节对齐。
DES/TDES算法,数据长度都应该8字节对齐
RSA算法,数据长度应与密钥长度一致
即64字节、128字节或者256字节。
数据摘要算法对输入数据没有长度要求。
|
Output address |
31:0 |
当前输入数据地址
应为 SRAM/DRAM/Secure SRAM 的有效地址
地址应8字节对齐。
|
Output data length |
31:0 |
当前输出数据长度
对AES算法,数据长度都应该为16字节对齐
CTR模式请向上取整到16字节对齐。
DES/TDES算法,数据长度都应该8字节对齐
与输入数据长度一致。
|