5.1.3. 描述符说明

本章节描述 CE 模块的软件编程接口: 描述符。

5.1.3.1. 任务描述符

软件需要 CE 模块进行硬件加速时要以任务描述符的方式将详细的任务信息配置给 CE 模块, 多个相关的任务通过链表的方式构建任务列表(Task List),CE 模块在处理时按顺序逐个进行处理。

注意

当由多个任务描述符组成一个任务链表时,链表内的所有任务描述符必须使用相同的算法。

任务描述符的大小固定,由下列几部分组成。

任务描述符组成部分

大小/字节

说明

Algorithm descriptor

36

算法描述符

Data descriptor

24

数据描述符

Next

4

下一个任务描述符的地址

多个相关的任务描述符构成的列表如下图所示。

../../../_images/task_chain.png

下表是任务描述符的具体位域分配总览。

字段

位域

备注

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个字节。

不同算法需要的输入参数各有不同,对于任务描述符中定义的算法描述符位域,具体的算法描述符根据需要给出具体定义。

表 5.4 算法标记值列表

算法标记值

描述

0x00

AES-ECB

0x01

AES-CBC

0x02

AES-CTR

0x03

AES-XTS

0x04

AES-CTS-CBC

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. AES-XTS 描述符

字段

位域

描述

Algorithm config

31:24

-

23:20

Key size,密钥大小
0x00: 64 (不支持)
0x01: 128
0x02: 192 (不支持)
0x03: 256
0x04: 512 (不支持)
0x05: 1024 (不支持)
0x06: 2048 (不支持)

128bit 对应 AES-256-XTS, 256bit 对应 AES-512-XTS。

19:16

密钥源的选择
0x00: User/RAM
0x01: eFuse SSK
0x02: eFuse HUK

15:9

-

8

Direction,运算方向
0x00: Encryption
0x01: Decryption

7:0

Algorithm tag: AES-XTS

具体参考 算法标记值列表

Key address

31:0

密钥地址

仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址

Tweak address

31:0

XTS Tweak 地址

地址应是SRAM/DRAM 的地址。
地址应8字节对齐。
数据大小应为 128bit。

Reserved

24 Bytes

AES-256-XTS 使用两个 128bit 密钥进行运算,因此选择使用 AES-256-XTS 算法时,应该选择密钥大小为128bit, 但是提供的密钥长度应该为256bit;同样,使用 AES-512-XTS 时应选择密钥大小为 256bit,但是提供的密钥长度应该为512bit。

5.1.3.2.5. AES-CTS-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-CTS-CBC

具体参考 算法标记值列表

Key address

31:0

密钥地址

仅当密钥源类型为 RAM时需要配置。
地址应是SRAM/DRAM或Secure SRAM 的地址

IV address

31:0

初始化向量地址

地址应是SRAM/DRAM 的地址。
地址应8字节对齐。

Reserved

24 Bytes

备注

CE 中 AES-CTS-CBC 按照 CS3 进行实现。使用 AES-CTS-CBC 算法时需注意输入的数据长度必须大于等于128bit。

5.1.3.2.6. 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.7. 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.8. 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.9. 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.10. 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.11. 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.12. 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字节对齐
与输入数据长度一致。