Merge pull request #417 from eZioPan/aes_v3

aes v3
This commit is contained in:
Dario Nieuwenhuis 2024-02-25 22:46:41 +01:00 committed by GitHub
commit ab6d71a62c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 281 additions and 49 deletions

View File

@ -12,11 +12,9 @@ block/AES:
- name: DINR - name: DINR
description: Data input register description: Data input register
byte_offset: 8 byte_offset: 8
fieldset: DINR
- name: DOUTR - name: DOUTR
description: Data output register description: Data output register
byte_offset: 12 byte_offset: 12
fieldset: DOUTR
- name: KEYR - name: KEYR
description: Key register description: Key register
array: array:
@ -30,21 +28,18 @@ block/AES:
- 40 - 40
- 44 - 44
byte_offset: 16 byte_offset: 16
fieldset: KEYR
- name: IVR - name: IVR
description: Initialization vector register description: Initialization vector register
array: array:
len: 4 len: 4
stride: 4 stride: 4
byte_offset: 32 byte_offset: 32
fieldset: IVR
- name: SUSPR - name: SUSPR
description: Suspend register description: Suspend register
array: array:
len: 8 len: 8
stride: 4 stride: 4
byte_offset: 64 byte_offset: 64
fieldset: SUSPR
- name: IER - name: IER
description: interrupt enable register description: interrupt enable register
byte_offset: 768 byte_offset: 768
@ -74,10 +69,15 @@ fieldset/CR:
bit_offset: 3 bit_offset: 3
bit_size: 2 bit_size: 2
enum: MODE enum: MODE
- name: CHMOD10 - name: CHMOD
description: Chaining mode bit1 bit0 description: Chaining mode selection
bit_offset: 5 bit_offset:
bit_size: 2 - start: 5
end: 6
- start: 16
end: 16
bit_size: 3
enum: CHMOD
- name: DMAINEN - name: DMAINEN
description: Enable DMA management of data input phase description: Enable DMA management of data input phase
bit_offset: 11 bit_offset: 11
@ -91,10 +91,6 @@ fieldset/CR:
bit_offset: 13 bit_offset: 13
bit_size: 2 bit_size: 2
enum: GCMPH enum: GCMPH
- name: CHMOD2
description: Chaining mode bit2
bit_offset: 16
bit_size: 1
- name: KEYSIZE - name: KEYSIZE
description: Key size selection description: Key size selection
bit_offset: 18 bit_offset: 18
@ -111,20 +107,6 @@ fieldset/CR:
description: AES peripheral software reset description: AES peripheral software reset
bit_offset: 31 bit_offset: 31
bit_size: 1 bit_size: 1
fieldset/DINR:
description: Data input register
fields:
- name: DIN
description: Input data word
bit_offset: 0
bit_size: 32
fieldset/DOUTR:
description: Data output register
fields:
- name: DOUT
description: Output data word
bit_offset: 0
bit_size: 32
fieldset/ICR: fieldset/ICR:
description: Interrupt clear register description: Interrupt clear register
fields: fields:
@ -170,20 +152,6 @@ fieldset/ISR:
description: Key error interrupt flag description: Key error interrupt flag
bit_offset: 2 bit_offset: 2
bit_size: 1 bit_size: 1
fieldset/IVR:
description: Initialization vector register
fields:
- name: IVI
description: Initialization vector input
bit_offset: 0
bit_size: 32
fieldset/KEYR:
description: Key register
fields:
- name: KEY
description: Cryptographic key
bit_offset: 0
bit_size: 32
fieldset/SR: fieldset/SR:
description: Status register description: Status register
fields: fields:
@ -207,13 +175,24 @@ fieldset/SR:
description: Key valid flag description: Key valid flag
bit_offset: 7 bit_offset: 7
bit_size: 1 bit_size: 1
fieldset/SUSPR: enum/CHMOD:
description: Suspend register bit_size: 3
fields: variants:
- name: SUSP - name: ECB
description: AES suspend description: Electronic codebook
bit_offset: 0 value: 0
bit_size: 32 - name: CBC
description: Cipher-block chaining
value: 1
- name: CTR
description: Counter mode
value: 2
- name: GCM_GMAC
description: Galois counter mode and Galois message authentication code
value: 3
- name: CCM
description: Counter with CBC-MAC
value: 4
enum/DATATYPE: enum/DATATYPE:
bit_size: 2 bit_size: 2
variants: variants:

233
data/registers/aes_v3b.yaml Normal file
View File

@ -0,0 +1,233 @@
block/AES:
description: Advanced encryption standard hardware accelerator
items:
- name: CR
description: Control register
byte_offset: 0
fieldset: CR
- name: SR
description: Status register
byte_offset: 4
fieldset: SR
- name: DINR
description: Data input register
byte_offset: 8
- name: DOUTR
description: Data output register
byte_offset: 12
- name: KEYR
description: Key register
array:
offsets:
- 0
- 4
- 8
- 12
- 32
- 36
- 40
- 44
byte_offset: 16
- name: IVR
description: Initialization vector register
array:
len: 4
stride: 4
byte_offset: 32
- name: SUSPR
description: Suspend register
array:
len: 8
stride: 4
byte_offset: 64
- name: IER
description: interrupt enable register
byte_offset: 768
fieldset: IER
- name: ISR
description: interrupt status register
byte_offset: 772
fieldset: ISR
- name: ICR
description: interrupt clear register
byte_offset: 776
fieldset: ICR
fieldset/CR:
description: Control register
fields:
- name: EN
description: AES enable
bit_offset: 0
bit_size: 1
- name: DATATYPE
description: Data type selection
bit_offset: 1
bit_size: 2
enum: DATATYPE
- name: MODE
description: Operating mode
bit_offset: 3
bit_size: 2
enum: MODE
- name: CHMOD
description: Chaining mode selection
bit_offset:
- start: 5
end: 6
- start: 16
end: 16
bit_size: 3
enum: CHMOD
- name: DMAINEN
description: Enable DMA management of data input phase
bit_offset: 11
bit_size: 1
- name: DMAOUTEN
description: Enable DMA management of data output phase
bit_offset: 12
bit_size: 1
- name: GCMPH
description: GCM or CCM phase selection
bit_offset: 13
bit_size: 2
enum: GCMPH
- name: KEYSIZE
description: Key size selection
bit_offset: 18
bit_size: 1
- name: NPBLB
description: Number of padding bytes in last block of payload
bit_offset: 20
bit_size: 4
- name: KMOD
description: Key mode selection
bit_offset: 24
bit_size: 2
- name: IPRST
description: AES peripheral software reset
bit_offset: 31
bit_size: 1
fieldset/ICR:
description: Interrupt clear register
fields:
- name: RWEIF
description: Read or write error interrupt flag clear
bit_offset: 1
bit_size: 1
- name: KEIF
description: Key error interrupt flag clear
bit_offset: 2
bit_size: 1
fieldset/IER:
description: Interrupt enable register
fields:
- name: CCFIE
description: Computation complete flag interrupt enable
bit_offset: 0
bit_size: 1
- name: RWEIE
description: Read or write error interrupt enable
bit_offset: 1
bit_size: 1
- name: KEIE
description: Key error interrupt enable
bit_offset: 2
bit_size: 1
fieldset/ISR:
description: Interrupt status register
fields:
- name: CCF
description: Computation complete flag
bit_offset: 0
bit_size: 1
- name: RWEIF
description: Read or write error interrupt flag
bit_offset: 1
bit_size: 1
- name: KEIF
description: Key error interrupt flag
bit_offset: 2
bit_size: 1
fieldset/SR:
description: Status register
fields:
- name: CCF
description: Computation complete flag
bit_offset: 0
bit_size: 1
- name: RDERR
description: Read error flag
bit_offset: 1
bit_size: 1
- name: WRERR
description: Write error flag
bit_offset: 2
bit_size: 1
- name: BUSY
description: Busy flag
bit_offset: 3
bit_size: 1
- name: KEYVALID
description: Key valid flag
bit_offset: 7
bit_size: 1
enum/CHMOD:
bit_size: 3
variants:
- name: ECB
description: Electronic codebook
value: 0
- name: CBC
description: Cipher-block chaining
value: 1
- name: CTR
description: Counter mode
value: 2
- name: GCM_GMAC
description: Galois counter mode and Galois message authentication code
value: 3
- name: CCM
description: Counter with CBC-MAC
value: 4
enum/DATATYPE:
bit_size: 2
variants:
- name: None
description: Word
value: 0
- name: HalfWord
description: Half-word (16-bit)
value: 1
- name: Byte
description: Byte (8-bit)
value: 2
- name: Bit
description: Bit
value: 3
enum/GCMPH:
bit_size: 2
variants:
- name: Init phase
description: Init phase
value: 0
- name: Header phase
description: Header phase
value: 1
- name: Payload phase
description: Payload phase
value: 2
- name: Final phase
description: Final phase
value: 3
enum/MODE:
bit_size: 2
variants:
- name: Mode1
description: Encryption
value: 0
- name: Mode2
description: Key derivation (or key preparation for ECB/CBC decryption)
value: 1
- name: Mode3
description: Decryption
value: 2

View File

@ -152,9 +152,10 @@ impl PeriMatcher {
("STM32L1.*:AES:.*", ("aes", "v1", "AES")), ("STM32L1.*:AES:.*", ("aes", "v1", "AES")),
("STM32L4.*:AES:.*", ("aes", "v1", "AES")), ("STM32L4.*:AES:.*", ("aes", "v1", "AES")),
("STM32L5.*:AES:.*", ("aes", "v2", "AES")), ("STM32L5.*:AES:.*", ("aes", "v2", "AES")),
("STM32U5.*:AES:.*", ("aes", "u5", "AES")),
("STM32WL5.*:AES:.*", ("aes", "v2", "AES")), ("STM32WL5.*:AES:.*", ("aes", "v2", "AES")),
("STM32WLE.*:AES:.*", ("aes", "v2", "AES")), ("STM32WLE.*:AES:.*", ("aes", "v2", "AES")),
("STM32U5.*:AES:.*", ("aes", "v3a", "AES")),
("STM32(H5|WBA).*:AES:.*", ("aes", "v3b", "AES")),
("STM32(H5|WBA).*:SAES:.*", ("saes", "v1a", "SAES")), ("STM32(H5|WBA).*:SAES:.*", ("saes", "v1a", "SAES")),
("STM32U5.*:SAES:.*", ("saes", "v1b", "SAES")), ("STM32U5.*:SAES:.*", ("saes", "v1b", "SAES")),
(".*:SPI:spi2_v1_4", ("spi", "f1", "SPI")), (".*:SPI:spi2_v1_4", ("spi", "f1", "SPI")),

19
transforms/AES.yaml Normal file
View File

@ -0,0 +1,19 @@
transforms:
- !DeleteFieldsets
from: ^(DINR|DOUTR|IVR\d|KEYR\d|SUSP\dR)$
- !MakeRegisterArray
blocks: AES
from: ^(IVR)\d$
to: $1
- !MakeRegisterArray
blocks: AES
allow_cursed: true
from: ^(KEYR)\d$
to: $1
- !MakeRegisterArray
blocks: AES
from: ^(SUSP)\d(R)$
to: $1$2