[PATCH v2 0/7] crypto: ARM/arm64 - AES and ChaCha20 updates for v4.11

Ard Biesheuvel ard.biesheuvel at linaro.org
Wed Jan 11 08:41:48 PST 2017


This adds ARM and arm64 implementations of ChaCha20, scalar AES and SIMD
AES (using bit slicing). The SIMD algorithms in this series take advantage
of the new skcipher walksize attribute to iterate over the input in the most
efficient manner possible.

Patch #1 adds a NEON implementation of ChaCha20 for ARM.

Patch #2 adds a NEON implementation of ChaCha20 for arm64.

Patch #3 modifies the existing NEON and ARMv8 Crypto Extensions implementations
of AES-CTR to be available as a synchronous skcipher as well. This is intended
for the mac80211 code, which uses synchronous encapsulations of ctr(aes)
[ccm, gcm] in softirq context, during which arm64 supports use of SIMD code.

Patch #4 adds a scalar implementation of AES for arm64, using the key schedule
generation routines and lookup tables of the generic code in crypto/aes_generic.

Patch #5 does the same for ARM, replacing existing scalar code that originated
in the OpenSSL project, and contains redundant key schedule generation routines
and lookup tables (and is slightly slower on modern cores)

Patch #6 replaces the ARM bit sliced NEON code with a new implementation that
has a number of advantages over the original code (which also originated in the
OpenSSL project.) The performance should be identical.

Patch #7 adds a port of the ARM bit-sliced AES code to arm64, in ECB, CBC, CTR
and XTS modes.

Due to the size of patch #7, it may be difficult to apply these patches from
patchwork, so I pushed them here as well:

  git://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git crypto-arm-v4.11
  https://git.kernel.org/cgit/linux/kernel/git/ardb/linux.git/log/?h=crypto-arm-v4.11

Ard Biesheuvel (7):
  crypto: arm64/chacha20 - implement NEON version based on SSE3 code
  crypto: arm/chacha20 - implement NEON version based on SSE3 code
  crypto: arm64/aes-blk - expose AES-CTR as synchronous cipher as well
  crypto: arm64/aes - add scalar implementation
  crypto: arm/aes - replace scalar AES cipher
  crypto: arm/aes - replace bit-sliced OpenSSL NEON code
  crypto: arm64/aes - reimplement bit-sliced ARM/NEON implementation for
    arm64

 arch/arm/crypto/Kconfig                |   27 +-
 arch/arm/crypto/Makefile               |   11 +-
 arch/arm/crypto/aes-armv4.S            | 1089 ---------
 arch/arm/crypto/aes-cipher-core.S      |  179 ++
 arch/arm/crypto/aes-cipher-glue.c      |   74 +
 arch/arm/crypto/aes-neonbs-core.S      | 1021 ++++++++
 arch/arm/crypto/aes-neonbs-glue.c      |  405 ++++
 arch/arm/crypto/aes_glue.c             |   98 -
 arch/arm/crypto/aes_glue.h             |   19 -
 arch/arm/crypto/aesbs-core.S_shipped   | 2548 --------------------
 arch/arm/crypto/aesbs-glue.c           |  367 ---
 arch/arm/crypto/bsaes-armv7.pl         | 2471 -------------------
 arch/arm/crypto/chacha20-neon-core.S   |  524 ++++
 arch/arm/crypto/chacha20-neon-glue.c   |  128 +
 arch/arm64/crypto/Kconfig              |   17 +
 arch/arm64/crypto/Makefile             |    9 +
 arch/arm64/crypto/aes-cipher-core.S    |  127 +
 arch/arm64/crypto/aes-cipher-glue.c    |   69 +
 arch/arm64/crypto/aes-glue.c           |   25 +-
 arch/arm64/crypto/aes-neonbs-core.S    |  963 ++++++++
 arch/arm64/crypto/aes-neonbs-glue.c    |  420 ++++
 arch/arm64/crypto/chacha20-neon-core.S |  450 ++++
 arch/arm64/crypto/chacha20-neon-glue.c |  127 +
 23 files changed, 4549 insertions(+), 6619 deletions(-)
 delete mode 100644 arch/arm/crypto/aes-armv4.S
 create mode 100644 arch/arm/crypto/aes-cipher-core.S
 create mode 100644 arch/arm/crypto/aes-cipher-glue.c
 create mode 100644 arch/arm/crypto/aes-neonbs-core.S
 create mode 100644 arch/arm/crypto/aes-neonbs-glue.c
 delete mode 100644 arch/arm/crypto/aes_glue.c
 delete mode 100644 arch/arm/crypto/aes_glue.h
 delete mode 100644 arch/arm/crypto/aesbs-core.S_shipped
 delete mode 100644 arch/arm/crypto/aesbs-glue.c
 delete mode 100644 arch/arm/crypto/bsaes-armv7.pl
 create mode 100644 arch/arm/crypto/chacha20-neon-core.S
 create mode 100644 arch/arm/crypto/chacha20-neon-glue.c
 create mode 100644 arch/arm64/crypto/aes-cipher-core.S
 create mode 100644 arch/arm64/crypto/aes-cipher-glue.c
 create mode 100644 arch/arm64/crypto/aes-neonbs-core.S
 create mode 100644 arch/arm64/crypto/aes-neonbs-glue.c
 create mode 100644 arch/arm64/crypto/chacha20-neon-core.S
 create mode 100644 arch/arm64/crypto/chacha20-neon-glue.c

-- 
2.7.4




More information about the linux-arm-kernel mailing list