ZHDU116G January 2018 – June 2024 CC1312PSIP , CC1312R , CC1352P , CC1352R , CC2642R , CC2642R-Q1 , CC2652P , CC2652PSIP , CC2652R , CC2652RB , CC2652RSIP , CC2662R-Q1
AESDATAINn 和 AESDATAOUTn 数据寄存器通常通过 DMA 访问,而不是通过主机写入和读取来访问。然而,出于调试目的,可通过主机写入和读取操作来访问数据输入和输出寄存器。这些寄存器用于缓冲进出加密内核的输入和输出数据块(请参阅表 13-14)。
数据输入缓冲器 AESDATAINn 和数据输出缓冲器 AESDATAOUTn 映射到相同的地址位置。
向这些地址写入值(DMA 和主机)将加载输入缓冲器,而读取操作将从输出缓冲器拉取值。因此,对于写入访问,写入的是数据输入缓冲器;对于读取访问,读取的是数据输出缓冲器。在开始操作之前必须向数据输入缓冲器写入值。数据输出缓冲器在操作完成时包含有效数据。因此,任何 128 位数据块都可以分割成多次 32 位字传输;这些字传输可以与外部接口上的其他传输混合进行。
对于正常操作,不使用此寄存器,因为数据的输入和输出通过 DMA 进出 AES 内核。对于主机写入操作,必须使用 128 位输入块写入这些寄存器,以便进行下一次 AES 操作。在此地址范围内以字对齐偏移量写入数据,会将一个字(4 字节)的数据存储到 4 字深(16 字节 = 128 位 AES 块)数据输入缓冲区的相应位置。此缓冲器用于下一次 AES 操作。如果最后一个数据块未完全填充有效数据,则只能写入包含有效数据的字。最后,通过写入 AESCTL.INPUT_RDY 位来触发 AES 操作。
对于主机读取操作该寄存器包含来自最新 AES 操作的 128 位输出块。从该地址范围内的字对齐偏移量读取数据,将从 4 字深(16 字节 = 128 位 AES 块)的数据输出缓冲区中读取一个字(4 字节)的数据。必须先读取这些字(4 个字,一个完整的块),内核才会将下一个块移动到数据输出缓冲区。要清空数据输出缓冲区,必须写入 AESCTL.OUTPUT_RDY 位。
对于带认证的模式(CBC-MAC 和 CCM),无效(消息)字节或字可以写入任何数据。
AES 通常对具有多个输入数据的 128 位块进行操作。CTR、GCM 和 CCM 模式属于例外情况。CTR 模式消息的最后一个块可能包含少于 128 位的数据(请参阅美国国家标准与技术研究院的 NIST 800-38A 文档):0 < n < = 128 位。对于 GCM 和 CCM,AAD 和消息数据的最后一个块都可能包含少于 128 位的数据(请参阅美国国家标准与技术研究院的 NIST 800-38D)。AES 模块会自动对 CCM 和 CBC-MAC 的未对齐结束数据块进行零填充或掩码处理。对于 CTR 模式,未对齐的数据块中的剩余数据将被忽略。AAD 或仅认证数据不会复制到输出缓冲区,而仅用于认证。
| 运行 | 数据输入缓冲区 | 数据输出缓冲区 |
|---|---|---|
| ECB/CBC 加密 | 128 位明文块 | 128 位密文块 |
| ECB/CBC 解密 | 128 位密文块 | 128 位明文块 |
| CTR 加密 | n 位明文块 | n 位密文块 |
| CTR 解密 | n 位密文块 | n 位明文块 |
| GCM/CCM AAD 数据 | n 位明文块 | 无输出数据 |
| GCM/CCM 加密数据 | n 位明文块 | n 位密文块 |
| GCM/CCM 解密数据 | n 位密文块 | n 位明文块 |
| CBC-MAC 数据 | n 位明文块 | 无输出数据 |