1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun 3*4882a593Smuzhiyunmenuconfig ARM_CRYPTO 4*4882a593Smuzhiyun bool "ARM Accelerated Cryptographic Algorithms" 5*4882a593Smuzhiyun depends on ARM 6*4882a593Smuzhiyun help 7*4882a593Smuzhiyun Say Y here to choose from a selection of cryptographic algorithms 8*4882a593Smuzhiyun implemented using ARM specific CPU features or instructions. 9*4882a593Smuzhiyun 10*4882a593Smuzhiyunif ARM_CRYPTO 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunconfig CRYPTO_SHA1_ARM 13*4882a593Smuzhiyun tristate "SHA1 digest algorithm (ARM-asm)" 14*4882a593Smuzhiyun select CRYPTO_SHA1 15*4882a593Smuzhiyun select CRYPTO_HASH 16*4882a593Smuzhiyun help 17*4882a593Smuzhiyun SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2) implemented 18*4882a593Smuzhiyun using optimized ARM assembler. 19*4882a593Smuzhiyun 20*4882a593Smuzhiyunconfig CRYPTO_SHA1_ARM_NEON 21*4882a593Smuzhiyun tristate "SHA1 digest algorithm (ARM NEON)" 22*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 23*4882a593Smuzhiyun select CRYPTO_SHA1_ARM 24*4882a593Smuzhiyun select CRYPTO_SHA1 25*4882a593Smuzhiyun select CRYPTO_HASH 26*4882a593Smuzhiyun help 27*4882a593Smuzhiyun SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2) implemented 28*4882a593Smuzhiyun using optimized ARM NEON assembly, when NEON instructions are 29*4882a593Smuzhiyun available. 30*4882a593Smuzhiyun 31*4882a593Smuzhiyunconfig CRYPTO_SHA1_ARM_CE 32*4882a593Smuzhiyun tristate "SHA1 digest algorithm (ARM v8 Crypto Extensions)" 33*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 34*4882a593Smuzhiyun select CRYPTO_SHA1_ARM 35*4882a593Smuzhiyun select CRYPTO_HASH 36*4882a593Smuzhiyun help 37*4882a593Smuzhiyun SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2) implemented 38*4882a593Smuzhiyun using special ARMv8 Crypto Extensions. 39*4882a593Smuzhiyun 40*4882a593Smuzhiyunconfig CRYPTO_SHA2_ARM_CE 41*4882a593Smuzhiyun tristate "SHA-224/256 digest algorithm (ARM v8 Crypto Extensions)" 42*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 43*4882a593Smuzhiyun select CRYPTO_SHA256_ARM 44*4882a593Smuzhiyun select CRYPTO_HASH 45*4882a593Smuzhiyun help 46*4882a593Smuzhiyun SHA-256 secure hash standard (DFIPS 180-2) implemented 47*4882a593Smuzhiyun using special ARMv8 Crypto Extensions. 48*4882a593Smuzhiyun 49*4882a593Smuzhiyunconfig CRYPTO_SHA256_ARM 50*4882a593Smuzhiyun tristate "SHA-224/256 digest algorithm (ARM-asm and NEON)" 51*4882a593Smuzhiyun select CRYPTO_HASH 52*4882a593Smuzhiyun depends on !CPU_V7M 53*4882a593Smuzhiyun help 54*4882a593Smuzhiyun SHA-256 secure hash standard (DFIPS 180-2) implemented 55*4882a593Smuzhiyun using optimized ARM assembler and NEON, when available. 56*4882a593Smuzhiyun 57*4882a593Smuzhiyunconfig CRYPTO_SHA512_ARM 58*4882a593Smuzhiyun tristate "SHA-384/512 digest algorithm (ARM-asm and NEON)" 59*4882a593Smuzhiyun select CRYPTO_HASH 60*4882a593Smuzhiyun depends on !CPU_V7M 61*4882a593Smuzhiyun help 62*4882a593Smuzhiyun SHA-512 secure hash standard (DFIPS 180-2) implemented 63*4882a593Smuzhiyun using optimized ARM assembler and NEON, when available. 64*4882a593Smuzhiyun 65*4882a593Smuzhiyunconfig CRYPTO_BLAKE2S_ARM 66*4882a593Smuzhiyun tristate "BLAKE2s digest algorithm (ARM)" 67*4882a593Smuzhiyun select CRYPTO_ARCH_HAVE_LIB_BLAKE2S 68*4882a593Smuzhiyun help 69*4882a593Smuzhiyun BLAKE2s digest algorithm optimized with ARM scalar instructions. This 70*4882a593Smuzhiyun is faster than the generic implementations of BLAKE2s and BLAKE2b, but 71*4882a593Smuzhiyun slower than the NEON implementation of BLAKE2b. (There is no NEON 72*4882a593Smuzhiyun implementation of BLAKE2s, since NEON doesn't really help with it.) 73*4882a593Smuzhiyun 74*4882a593Smuzhiyunconfig CRYPTO_BLAKE2B_NEON 75*4882a593Smuzhiyun tristate "BLAKE2b digest algorithm (ARM NEON)" 76*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 77*4882a593Smuzhiyun select CRYPTO_BLAKE2B 78*4882a593Smuzhiyun help 79*4882a593Smuzhiyun BLAKE2b digest algorithm optimized with ARM NEON instructions. 80*4882a593Smuzhiyun On ARM processors that have NEON support but not the ARMv8 81*4882a593Smuzhiyun Crypto Extensions, typically this BLAKE2b implementation is 82*4882a593Smuzhiyun much faster than SHA-2 and slightly faster than SHA-1. 83*4882a593Smuzhiyun 84*4882a593Smuzhiyunconfig CRYPTO_AES_ARM 85*4882a593Smuzhiyun tristate "Scalar AES cipher for ARM" 86*4882a593Smuzhiyun select CRYPTO_ALGAPI 87*4882a593Smuzhiyun select CRYPTO_AES 88*4882a593Smuzhiyun help 89*4882a593Smuzhiyun Use optimized AES assembler routines for ARM platforms. 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun On ARM processors without the Crypto Extensions, this is the 92*4882a593Smuzhiyun fastest AES implementation for single blocks. For multiple 93*4882a593Smuzhiyun blocks, the NEON bit-sliced implementation is usually faster. 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun This implementation may be vulnerable to cache timing attacks, 96*4882a593Smuzhiyun since it uses lookup tables. However, as countermeasures it 97*4882a593Smuzhiyun disables IRQs and preloads the tables; it is hoped this makes 98*4882a593Smuzhiyun such attacks very difficult. 99*4882a593Smuzhiyun 100*4882a593Smuzhiyunconfig CRYPTO_AES_ARM_BS 101*4882a593Smuzhiyun tristate "Bit sliced AES using NEON instructions" 102*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 103*4882a593Smuzhiyun select CRYPTO_SKCIPHER 104*4882a593Smuzhiyun select CRYPTO_LIB_AES 105*4882a593Smuzhiyun select CRYPTO_AES 106*4882a593Smuzhiyun select CRYPTO_CBC 107*4882a593Smuzhiyun select CRYPTO_SIMD 108*4882a593Smuzhiyun help 109*4882a593Smuzhiyun Use a faster and more secure NEON based implementation of AES in CBC, 110*4882a593Smuzhiyun CTR and XTS modes 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun Bit sliced AES gives around 45% speedup on Cortex-A15 for CTR mode 113*4882a593Smuzhiyun and for XTS mode encryption, CBC and XTS mode decryption speedup is 114*4882a593Smuzhiyun around 25%. (CBC encryption speed is not affected by this driver.) 115*4882a593Smuzhiyun This implementation does not rely on any lookup tables so it is 116*4882a593Smuzhiyun believed to be invulnerable to cache timing attacks. 117*4882a593Smuzhiyun 118*4882a593Smuzhiyunconfig CRYPTO_AES_ARM_CE 119*4882a593Smuzhiyun tristate "Accelerated AES using ARMv8 Crypto Extensions" 120*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 121*4882a593Smuzhiyun select CRYPTO_SKCIPHER 122*4882a593Smuzhiyun select CRYPTO_LIB_AES 123*4882a593Smuzhiyun select CRYPTO_SIMD 124*4882a593Smuzhiyun help 125*4882a593Smuzhiyun Use an implementation of AES in CBC, CTR and XTS modes that uses 126*4882a593Smuzhiyun ARMv8 Crypto Extensions 127*4882a593Smuzhiyun 128*4882a593Smuzhiyunconfig CRYPTO_GHASH_ARM_CE 129*4882a593Smuzhiyun tristate "PMULL-accelerated GHASH using NEON/ARMv8 Crypto Extensions" 130*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 131*4882a593Smuzhiyun select CRYPTO_HASH 132*4882a593Smuzhiyun select CRYPTO_CRYPTD 133*4882a593Smuzhiyun select CRYPTO_GF128MUL 134*4882a593Smuzhiyun help 135*4882a593Smuzhiyun Use an implementation of GHASH (used by the GCM AEAD chaining mode) 136*4882a593Smuzhiyun that uses the 64x64 to 128 bit polynomial multiplication (vmull.p64) 137*4882a593Smuzhiyun that is part of the ARMv8 Crypto Extensions, or a slower variant that 138*4882a593Smuzhiyun uses the vmull.p8 instruction that is part of the basic NEON ISA. 139*4882a593Smuzhiyun 140*4882a593Smuzhiyunconfig CRYPTO_CRCT10DIF_ARM_CE 141*4882a593Smuzhiyun tristate "CRCT10DIF digest algorithm using PMULL instructions" 142*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 143*4882a593Smuzhiyun depends on CRC_T10DIF 144*4882a593Smuzhiyun select CRYPTO_HASH 145*4882a593Smuzhiyun 146*4882a593Smuzhiyunconfig CRYPTO_CRC32_ARM_CE 147*4882a593Smuzhiyun tristate "CRC32(C) digest algorithm using CRC and/or PMULL instructions" 148*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 149*4882a593Smuzhiyun depends on CRC32 150*4882a593Smuzhiyun select CRYPTO_HASH 151*4882a593Smuzhiyun 152*4882a593Smuzhiyunconfig CRYPTO_CHACHA20_NEON 153*4882a593Smuzhiyun tristate "NEON and scalar accelerated ChaCha stream cipher algorithms" 154*4882a593Smuzhiyun select CRYPTO_SKCIPHER 155*4882a593Smuzhiyun select CRYPTO_ARCH_HAVE_LIB_CHACHA 156*4882a593Smuzhiyun 157*4882a593Smuzhiyunconfig CRYPTO_POLY1305_ARM 158*4882a593Smuzhiyun tristate "Accelerated scalar and SIMD Poly1305 hash implementations" 159*4882a593Smuzhiyun select CRYPTO_HASH 160*4882a593Smuzhiyun select CRYPTO_ARCH_HAVE_LIB_POLY1305 161*4882a593Smuzhiyun 162*4882a593Smuzhiyunconfig CRYPTO_NHPOLY1305_NEON 163*4882a593Smuzhiyun tristate "NEON accelerated NHPoly1305 hash function (for Adiantum)" 164*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 165*4882a593Smuzhiyun select CRYPTO_NHPOLY1305 166*4882a593Smuzhiyun 167*4882a593Smuzhiyunconfig CRYPTO_CURVE25519_NEON 168*4882a593Smuzhiyun tristate "NEON accelerated Curve25519 scalar multiplication library" 169*4882a593Smuzhiyun depends on KERNEL_MODE_NEON 170*4882a593Smuzhiyun select CRYPTO_LIB_CURVE25519_GENERIC 171*4882a593Smuzhiyun select CRYPTO_ARCH_HAVE_LIB_CURVE25519 172*4882a593Smuzhiyun 173*4882a593Smuzhiyunendif 174