android_kernel_oneplus_msm8998/arch/arm/crypto
Eric Biggers f54e3ccbe8 BACKPORT, FROMGIT: crypto: arm/speck - add NEON-accelerated implementation of Speck-XTS
Add an ARM NEON-accelerated implementation of Speck-XTS.  It operates on
128-byte chunks at a time, i.e. 8 blocks for Speck128 or 16 blocks for
Speck64.  Each 128-byte chunk goes through XTS preprocessing, then is
encrypted/decrypted (doing one cipher round for all the blocks, then the
next round, etc.), then goes through XTS postprocessing.

The performance depends on the processor but can be about 3 times faster
than the generic code.  For example, on an ARMv7 processor we observe
the following performance with Speck128/256-XTS:

    xts-speck128-neon:     Encryption 107.9 MB/s, Decryption 108.1 MB/s
    xts(speck128-generic): Encryption  32.1 MB/s, Decryption  36.6 MB/s

In comparison to AES-256-XTS without the Cryptography Extensions:

    xts-aes-neonbs:        Encryption  41.2 MB/s, Decryption  36.7 MB/s
    xts(aes-asm):          Encryption  31.7 MB/s, Decryption  30.8 MB/s
    xts(aes-generic):      Encryption  21.2 MB/s, Decryption  20.9 MB/s

Speck64/128-XTS is even faster:

    xts-speck64-neon:      Encryption 138.6 MB/s, Decryption 139.1 MB/s

Note that as with the generic code, only the Speck128 and Speck64
variants are supported.  Also, for now only the XTS mode of operation is
supported, to target the disk and file encryption use cases.  The NEON
code also only handles the portion of the data that is evenly divisible
into 128-byte chunks, with any remainder handled by a C fallback.  Of
course, other modes of operation could be added later if needed, and/or
the NEON code could be updated to handle other buffer sizes.

The XTS specification is only defined for AES which has a 128-bit block
size, so for the GF(2^64) math needed for Speck64-XTS we use the
reducing polynomial 'x^64 + x^4 + x^3 + x + 1' given by the original XEX
paper.  Of course, when possible users should use Speck128-XTS, but even
that may be too slow on some processors; Speck64-XTS can be faster.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

(cherry picked from commit ede9622162fac42eacde231d64e94c926f4be45d
 git://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master)
(changed speck-neon-glue.c to use blkcipher API instead of skcipher API)
(resolved merge conflict in arch/arm/crypto/Makefile)
(made CONFIG_CRYPTO_SPECK_NEON select CONFIG_CRYPTO_GF128MUL, since
 gf128mul_x_ble() is non-inline in older kernels)
Change-Id: I5bbc86cb3c2cbc36636a59a0db725b2ad95ea81b
Signed-off-by: Eric Biggers <ebiggers@google.com>
2018-02-23 14:36:49 -08:00
..
.gitignore crypto: arm - ignore generated SHA2 assembly files 2015-07-06 16:32:03 +08:00
aes-armv4.S ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ 2014-07-18 12:29:04 +01:00
aes-ce-core.S crypto: arm/aes - streamline AES-192 code path 2015-05-11 15:08:01 +08:00
aes-ce-glue.c Merge remote-tracking branch 'common/android-4.4' into android-4.4.y 2017-02-15 18:02:55 -08:00
aes_glue.c crypto: prefix module autoloading with "crypto-" 2014-11-24 22:43:57 +08:00
aes_glue.h ARM: move AES typedefs and function prototypes to separate header 2013-10-04 09:26:54 +02:00
aesbs-core.S_shipped crypto: arm/aes update NEON AES module to latest OpenSSL version 2015-03-02 23:18:26 +13:00
aesbs-glue.c arm: crypto: reduce priority of bit-sliced AES cipher 2017-11-21 09:21:18 +01:00
bsaes-armv7.pl crypto: arm/aes update NEON AES module to latest OpenSSL version 2015-03-02 23:18:26 +13:00
ghash-ce-core.S crypto: arm/ghash - fix big-endian bug in ghash 2015-03-24 22:24:56 +11:00
ghash-ce-glue.c crypto: arm/ghash-ce - add missing async import/export 2016-10-31 04:13:59 -06:00
Kconfig BACKPORT, FROMGIT: crypto: arm/speck - add NEON-accelerated implementation of Speck-XTS 2018-02-23 14:36:49 -08:00
Makefile BACKPORT, FROMGIT: crypto: arm/speck - add NEON-accelerated implementation of Speck-XTS 2018-02-23 14:36:49 -08:00
sha1-armv4-large.S
sha1-armv7-neon.S ARM: 8125/1: crypto: enable NEON SHA-1 for big endian 2014-08-27 15:44:11 +01:00
sha1-ce-core.S crypto: arm/sha1-ce - move SHA-1 ARMv8 implementation to base layer 2015-04-10 21:39:44 +08:00
sha1-ce-glue.c crypto: arm/sha1-ce - move SHA-1 ARMv8 implementation to base layer 2015-04-10 21:39:44 +08:00
sha1.h crypto: arm/sha1 - move SHA-1 ARM asm implementation to base layer 2015-04-10 21:39:42 +08:00
sha1_glue.c crypto: arm/sha1 - move SHA-1 ARM asm implementation to base layer 2015-04-10 21:39:42 +08:00
sha1_neon_glue.c crypto: arm/sha1_neon - move SHA-1 NEON implementation to base layer 2015-04-10 21:39:43 +08:00
sha2-ce-core.S crypto: arm/sha2-ce - move SHA-224/256 ARMv8 implementation to base layer 2015-04-10 21:39:45 +08:00
sha2-ce-glue.c crypto: arm/sha2-ce - move SHA-224/256 ARMv8 implementation to base layer 2015-04-10 21:39:45 +08:00
sha256-armv4.pl crypto: arm/sha256 - Add optimized SHA-256/224 2015-04-03 18:03:40 +08:00
sha256-core.S_shipped crypto: arm/sha256 - Add optimized SHA-256/224 2015-04-03 18:03:40 +08:00
sha256_glue.c crypto: arm/sha256 - move SHA-224/256 ASM/NEON implementation to base layer 2015-04-10 21:39:44 +08:00
sha256_glue.h crypto: arm/sha256 - move SHA-224/256 ASM/NEON implementation to base layer 2015-04-10 21:39:44 +08:00
sha256_neon_glue.c crypto: arm/sha256 - move SHA-224/256 ASM/NEON implementation to base layer 2015-04-10 21:39:44 +08:00
sha512-armv4.pl crypto: arm/sha512 - accelerated SHA-512 using ARM generic ASM and NEON 2015-05-11 15:08:01 +08:00
sha512-core.S_shipped crypto: arm/sha512 - accelerated SHA-512 using ARM generic ASM and NEON 2015-05-11 15:08:01 +08:00
sha512-glue.c crypto: arm/sha512 - accelerated SHA-512 using ARM generic ASM and NEON 2015-05-11 15:08:01 +08:00
sha512-neon-glue.c crypto: arm/sha512 - accelerated SHA-512 using ARM generic ASM and NEON 2015-05-11 15:08:01 +08:00
sha512.h crypto: arm/sha512 - accelerated SHA-512 using ARM generic ASM and NEON 2015-05-11 15:08:01 +08:00
speck-neon-core.S BACKPORT, FROMGIT: crypto: arm/speck - add NEON-accelerated implementation of Speck-XTS 2018-02-23 14:36:49 -08:00
speck-neon-glue.c BACKPORT, FROMGIT: crypto: arm/speck - add NEON-accelerated implementation of Speck-XTS 2018-02-23 14:36:49 -08:00