mbox series

[v4,00/37] crypto: Provide aes-round.h and host accel

Message ID 20230703100520.68224-1-richard.henderson@linaro.org
Headers show
Series crypto: Provide aes-round.h and host accel | expand

Message

Richard Henderson July 3, 2023, 10:04 a.m. UTC
Inspired by Ard Biesheuvel's RFC patches for accelerating AES
under emulation, provide a set of primitives that maps between
the guest and host fragments.

Changes for v4:
  * Fix typo in AESState (Max Chou)
  * Define AES_SH/ISH as macros (Ard Biesheuvel)
  * Group patches by subsystem.

Patches lacking review:
  12-host-include-i386-Implement-aes-round.h.patch
  13-host-include-aarch64-Implement-aes-round.h.patch
  21-target-i386-Use-aesdec_IMC.patch
  22-target-i386-Use-aesenc_SB_SR_MC_AK.patch
  23-target-i386-Use-aesdec_ISB_ISR_IMC_AK.patch
  25-target-arm-Use-aesenc_SB_SR_AK.patch
  26-target-arm-Use-aesdec_ISB_ISR_AK.patch
  27-target-arm-Use-aesenc_MC.patch
  28-target-arm-Use-aesdec_IMC.patch
  29-target-riscv-Use-aesenc_SB_SR_AK.patch
  30-target-riscv-Use-aesdec_ISB_ISR_AK.patch
  31-target-riscv-Use-aesdec_IMC.patch
  32-target-riscv-Use-aesenc_SB_SR_MC_AK.patch
  33-target-riscv-Use-aesdec_ISB_ISR_IMC_AK.patch

Daniel(s), I could push the set that has been reviewed
(crypto/, DPB; target/ppc/, DHB) through tcg-next if you like,
just to reduce the outstanding set.  Perhaps smaller patch sets
would help getting the other targets reviewed...


r~


Richard Henderson (37):
  util: Add cpuinfo-ppc.c
  tests/multiarch: Add test-aes
  target/arm: Move aesmc and aesimc tables to crypto/aes.c
  crypto/aes: Add AES_SH, AES_ISH macros
  crypto: Add aesenc_SB_SR_AK
  crypto: Add aesdec_ISB_ISR_AK
  crypto: Add aesenc_MC
  crypto: Add aesdec_IMC
  crypto: Add aesenc_SB_SR_MC_AK
  crypto: Add aesdec_ISB_ISR_IMC_AK
  crypto: Add aesdec_ISB_ISR_AK_IMC
  host/include/i386: Implement aes-round.h
  host/include/aarch64: Implement aes-round.h
  host/include/ppc: Implement aes-round.h
  target/ppc: Use aesenc_SB_SR_AK
  target/ppc: Use aesdec_ISB_ISR_AK
  target/ppc: Use aesenc_SB_SR_MC_AK
  target/ppc: Use aesdec_ISB_ISR_AK_IMC
  target/i386: Use aesenc_SB_SR_AK
  target/i386: Use aesdec_ISB_ISR_AK
  target/i386: Use aesdec_IMC
  target/i386: Use aesenc_SB_SR_MC_AK
  target/i386: Use aesdec_ISB_ISR_IMC_AK
  target/arm: Demultiplex AESE and AESMC
  target/arm: Use aesenc_SB_SR_AK
  target/arm: Use aesdec_ISB_ISR_AK
  target/arm: Use aesenc_MC
  target/arm: Use aesdec_IMC
  target/riscv: Use aesenc_SB_SR_AK
  target/riscv: Use aesdec_ISB_ISR_AK
  target/riscv: Use aesdec_IMC
  target/riscv: Use aesenc_SB_SR_MC_AK
  target/riscv: Use aesdec_ISB_ISR_IMC_AK
  crypto: Remove AES_shifts, AES_ishifts
  crypto: Implement aesdec_IMC with AES_imc_rot
  crypto: Remove AES_imc
  crypto: Unexport AES_*_rot, AES_TeN, AES_TdN

 MAINTAINERS                                  |   1 +
 meson.build                                  |   9 +
 host/include/aarch64/host/cpuinfo.h          |   1 +
 host/include/aarch64/host/crypto/aes-round.h | 205 +++++
 host/include/generic/host/crypto/aes-round.h |  33 +
 host/include/i386/host/cpuinfo.h             |   1 +
 host/include/i386/host/crypto/aes-round.h    | 152 ++++
 host/include/ppc/host/cpuinfo.h              |  30 +
 host/include/ppc/host/crypto/aes-round.h     | 182 +++++
 host/include/ppc64/host/cpuinfo.h            |   1 +
 host/include/ppc64/host/crypto/aes-round.h   |   1 +
 host/include/x86_64/host/crypto/aes-round.h  |   1 +
 include/crypto/aes-round.h                   | 164 ++++
 include/crypto/aes.h                         |  30 -
 target/arm/helper.h                          |   2 +
 target/i386/ops_sse.h                        |  60 +-
 tcg/ppc/tcg-target.h                         |  16 +-
 target/arm/tcg/sve.decode                    |   4 +-
 crypto/aes.c                                 | 780 ++++++++++++-------
 target/arm/tcg/crypto_helper.c               | 249 ++----
 target/arm/tcg/translate-a64.c               |  13 +-
 target/arm/tcg/translate-neon.c              |   4 +-
 target/arm/tcg/translate-sve.c               |   8 +-
 target/ppc/int_helper.c                      |  50 +-
 target/riscv/crypto_helper.c                 | 138 +---
 tests/tcg/aarch64/test-aes.c                 |  58 ++
 tests/tcg/i386/test-aes.c                    |  68 ++
 tests/tcg/ppc64/test-aes.c                   | 116 +++
 tests/tcg/riscv64/test-aes.c                 |  76 ++
 util/cpuinfo-aarch64.c                       |   2 +
 util/cpuinfo-i386.c                          |   3 +
 util/cpuinfo-ppc.c                           |  64 ++
 tcg/ppc/tcg-target.c.inc                     |  44 +-
 tests/tcg/multiarch/test-aes-main.c.inc      | 183 +++++
 tests/tcg/aarch64/Makefile.target            |   4 +
 tests/tcg/i386/Makefile.target               |   4 +
 tests/tcg/ppc64/Makefile.target              |   1 +
 tests/tcg/riscv64/Makefile.target            |  13 +
 util/meson.build                             |   2 +
 39 files changed, 2049 insertions(+), 724 deletions(-)
 create mode 100644 host/include/aarch64/host/crypto/aes-round.h
 create mode 100644 host/include/generic/host/crypto/aes-round.h
 create mode 100644 host/include/i386/host/crypto/aes-round.h
 create mode 100644 host/include/ppc/host/cpuinfo.h
 create mode 100644 host/include/ppc/host/crypto/aes-round.h
 create mode 100644 host/include/ppc64/host/cpuinfo.h
 create mode 100644 host/include/ppc64/host/crypto/aes-round.h
 create mode 100644 host/include/x86_64/host/crypto/aes-round.h
 create mode 100644 include/crypto/aes-round.h
 create mode 100644 tests/tcg/aarch64/test-aes.c
 create mode 100644 tests/tcg/i386/test-aes.c
 create mode 100644 tests/tcg/ppc64/test-aes.c
 create mode 100644 tests/tcg/riscv64/test-aes.c
 create mode 100644 util/cpuinfo-ppc.c
 create mode 100644 tests/tcg/multiarch/test-aes-main.c.inc

Comments

Daniel Henrique Barboza July 7, 2023, 5:30 p.m. UTC | #1
Richard,

On 7/3/23 07:04, Richard Henderson wrote:
> Inspired by Ard Biesheuvel's RFC patches for accelerating AES
> under emulation, provide a set of primitives that maps between
> the guest and host fragments.
> 
> Changes for v4:
>    * Fix typo in AESState (Max Chou)
>    * Define AES_SH/ISH as macros (Ard Biesheuvel)
>    * Group patches by subsystem.
> 
> Patches lacking review:
>    12-host-include-i386-Implement-aes-round.h.patch
>    13-host-include-aarch64-Implement-aes-round.h.patch
>    21-target-i386-Use-aesdec_IMC.patch
>    22-target-i386-Use-aesenc_SB_SR_MC_AK.patch
>    23-target-i386-Use-aesdec_ISB_ISR_IMC_AK.patch
>    25-target-arm-Use-aesenc_SB_SR_AK.patch
>    26-target-arm-Use-aesdec_ISB_ISR_AK.patch
>    27-target-arm-Use-aesenc_MC.patch
>    28-target-arm-Use-aesdec_IMC.patch
>    29-target-riscv-Use-aesenc_SB_SR_AK.patch
>    30-target-riscv-Use-aesdec_ISB_ISR_AK.patch
>    31-target-riscv-Use-aesdec_IMC.patch
>    32-target-riscv-Use-aesenc_SB_SR_MC_AK.patch
>    33-target-riscv-Use-aesdec_ISB_ISR_IMC_AK.patch
> 
> Daniel(s), I could push the set that has been reviewed
> (crypto/, DPB; target/ppc/, DHB) through tcg-next if you like,
> just to reduce the outstanding set.  Perhaps smaller patch sets
> would help getting the other targets reviewed...
> 

Sorry for the delay reacting to my name drop.

You're more than welcome in posting the target/ppc bits via tcg-next. I was
kind of expecting you to do it but failed to mention explicitly back then.
Go ahead.

By the way I sent the PowerPC PR earlier today (you're probably already saw it).
So ... yeah, I'm counting on you into pushing this ppc code via the tcg queue,
in any format you find appropriate (smaller series, big series, single patch
per PR ... your call).


Thanks,


Daniel



> 
> r~
> 
> 
> Richard Henderson (37):
>    util: Add cpuinfo-ppc.c
>    tests/multiarch: Add test-aes
>    target/arm: Move aesmc and aesimc tables to crypto/aes.c
>    crypto/aes: Add AES_SH, AES_ISH macros
>    crypto: Add aesenc_SB_SR_AK
>    crypto: Add aesdec_ISB_ISR_AK
>    crypto: Add aesenc_MC
>    crypto: Add aesdec_IMC
>    crypto: Add aesenc_SB_SR_MC_AK
>    crypto: Add aesdec_ISB_ISR_IMC_AK
>    crypto: Add aesdec_ISB_ISR_AK_IMC
>    host/include/i386: Implement aes-round.h
>    host/include/aarch64: Implement aes-round.h
>    host/include/ppc: Implement aes-round.h
>    target/ppc: Use aesenc_SB_SR_AK
>    target/ppc: Use aesdec_ISB_ISR_AK
>    target/ppc: Use aesenc_SB_SR_MC_AK
>    target/ppc: Use aesdec_ISB_ISR_AK_IMC
>    target/i386: Use aesenc_SB_SR_AK
>    target/i386: Use aesdec_ISB_ISR_AK
>    target/i386: Use aesdec_IMC
>    target/i386: Use aesenc_SB_SR_MC_AK
>    target/i386: Use aesdec_ISB_ISR_IMC_AK
>    target/arm: Demultiplex AESE and AESMC
>    target/arm: Use aesenc_SB_SR_AK
>    target/arm: Use aesdec_ISB_ISR_AK
>    target/arm: Use aesenc_MC
>    target/arm: Use aesdec_IMC
>    target/riscv: Use aesenc_SB_SR_AK
>    target/riscv: Use aesdec_ISB_ISR_AK
>    target/riscv: Use aesdec_IMC
>    target/riscv: Use aesenc_SB_SR_MC_AK
>    target/riscv: Use aesdec_ISB_ISR_IMC_AK
>    crypto: Remove AES_shifts, AES_ishifts
>    crypto: Implement aesdec_IMC with AES_imc_rot
>    crypto: Remove AES_imc
>    crypto: Unexport AES_*_rot, AES_TeN, AES_TdN
> 
>   MAINTAINERS                                  |   1 +
>   meson.build                                  |   9 +
>   host/include/aarch64/host/cpuinfo.h          |   1 +
>   host/include/aarch64/host/crypto/aes-round.h | 205 +++++
>   host/include/generic/host/crypto/aes-round.h |  33 +
>   host/include/i386/host/cpuinfo.h             |   1 +
>   host/include/i386/host/crypto/aes-round.h    | 152 ++++
>   host/include/ppc/host/cpuinfo.h              |  30 +
>   host/include/ppc/host/crypto/aes-round.h     | 182 +++++
>   host/include/ppc64/host/cpuinfo.h            |   1 +
>   host/include/ppc64/host/crypto/aes-round.h   |   1 +
>   host/include/x86_64/host/crypto/aes-round.h  |   1 +
>   include/crypto/aes-round.h                   | 164 ++++
>   include/crypto/aes.h                         |  30 -
>   target/arm/helper.h                          |   2 +
>   target/i386/ops_sse.h                        |  60 +-
>   tcg/ppc/tcg-target.h                         |  16 +-
>   target/arm/tcg/sve.decode                    |   4 +-
>   crypto/aes.c                                 | 780 ++++++++++++-------
>   target/arm/tcg/crypto_helper.c               | 249 ++----
>   target/arm/tcg/translate-a64.c               |  13 +-
>   target/arm/tcg/translate-neon.c              |   4 +-
>   target/arm/tcg/translate-sve.c               |   8 +-
>   target/ppc/int_helper.c                      |  50 +-
>   target/riscv/crypto_helper.c                 | 138 +---
>   tests/tcg/aarch64/test-aes.c                 |  58 ++
>   tests/tcg/i386/test-aes.c                    |  68 ++
>   tests/tcg/ppc64/test-aes.c                   | 116 +++
>   tests/tcg/riscv64/test-aes.c                 |  76 ++
>   util/cpuinfo-aarch64.c                       |   2 +
>   util/cpuinfo-i386.c                          |   3 +
>   util/cpuinfo-ppc.c                           |  64 ++
>   tcg/ppc/tcg-target.c.inc                     |  44 +-
>   tests/tcg/multiarch/test-aes-main.c.inc      | 183 +++++
>   tests/tcg/aarch64/Makefile.target            |   4 +
>   tests/tcg/i386/Makefile.target               |   4 +
>   tests/tcg/ppc64/Makefile.target              |   1 +
>   tests/tcg/riscv64/Makefile.target            |  13 +
>   util/meson.build                             |   2 +
>   39 files changed, 2049 insertions(+), 724 deletions(-)
>   create mode 100644 host/include/aarch64/host/crypto/aes-round.h
>   create mode 100644 host/include/generic/host/crypto/aes-round.h
>   create mode 100644 host/include/i386/host/crypto/aes-round.h
>   create mode 100644 host/include/ppc/host/cpuinfo.h
>   create mode 100644 host/include/ppc/host/crypto/aes-round.h
>   create mode 100644 host/include/ppc64/host/cpuinfo.h
>   create mode 100644 host/include/ppc64/host/crypto/aes-round.h
>   create mode 100644 host/include/x86_64/host/crypto/aes-round.h
>   create mode 100644 include/crypto/aes-round.h
>   create mode 100644 tests/tcg/aarch64/test-aes.c
>   create mode 100644 tests/tcg/i386/test-aes.c
>   create mode 100644 tests/tcg/ppc64/test-aes.c
>   create mode 100644 tests/tcg/riscv64/test-aes.c
>   create mode 100644 util/cpuinfo-ppc.c
>   create mode 100644 tests/tcg/multiarch/test-aes-main.c.inc
>
Philippe Mathieu-Daudé July 8, 2023, 5:38 p.m. UTC | #2
On 3/7/23 12:04, Richard Henderson wrote:
> Inspired by Ard Biesheuvel's RFC patches for accelerating AES
> under emulation, provide a set of primitives that maps between
> the guest and host fragments.
> 
> Changes for v4:
>    * Fix typo in AESState (Max Chou)
>    * Define AES_SH/ISH as macros (Ard Biesheuvel)
>    * Group patches by subsystem.
> 
> Patches lacking review:
>    12-host-include-i386-Implement-aes-round.h.patch

Deferring this one to Paolo & co,

>    13-host-include-aarch64-Implement-aes-round.h.patch

and this one to Ard :)


Possible cleanup to add in patch #4 "crypto/aes: Add AES_SH,
AES_ISH macros", declare 'extern const AESState aes_zero;' in
include/crypto/aes-round.h and define it in crypto/aes.c.

Regards,

Phil.