# SPDX-License-Identifier: GPL-2.0

menu "Accelerated Cryptographic Algorithms for CPU (x86)"

config CRYPTO_CURVE25519_X86
	tristate "Public key crypto: Curve25519 (ADX)"
	depends on X86 && 64BIT
	select CRYPTO_LIB_CURVE25519_GENERIC
	select CRYPTO_ARCH_HAVE_LIB_CURVE25519
	help
	  Curve25519 algorithm

	  Architecture: x86_64 using:
	  - ADX (large integer arithmetic)

config CRYPTO_AES_NI_INTEL
	tristate "Ciphers: AES, modes: ECB, CBC, CTS, CTR, XTR, XTS, GCM (AES-NI)"
	depends on X86
	select CRYPTO_AEAD
	select CRYPTO_LIB_AES
	select CRYPTO_ALGAPI
	select CRYPTO_SKCIPHER
	select CRYPTO_SIMD
	help
	  Block cipher: AES cipher algorithms
	  AEAD cipher: AES with GCM
	  Length-preserving ciphers: AES with ECB, CBC, CTS, CTR, XTR, XTS

	  Architecture: x86 (32-bit and 64-bit) using:
	  - AES-NI (AES new instructions)

config CRYPTO_BLOWFISH_X86_64
	tristate "Ciphers: Blowfish, modes: ECB, CBC"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_BLOWFISH_COMMON
	imply CRYPTO_CTR
	help
	  Block cipher: Blowfish cipher algorithm
	  Length-preserving ciphers: Blowfish with ECB and CBC modes

	  Architecture: x86_64

config CRYPTO_CAMELLIA_X86_64
	tristate "Ciphers: Camellia with modes: ECB, CBC"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	imply CRYPTO_CTR
	help
	  Block cipher: Camellia cipher algorithms
	  Length-preserving ciphers: Camellia with ECB and CBC modes

	  Architecture: x86_64

config CRYPTO_CAMELLIA_AESNI_AVX_X86_64
	tristate "Ciphers: Camellia with modes: ECB, CBC (AES-NI/AVX)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_CAMELLIA_X86_64
	select CRYPTO_SIMD
	imply CRYPTO_XTS
	help
	  Length-preserving ciphers: Camellia with ECB and CBC modes

	  Architecture: x86_64 using:
	  - AES-NI (AES New Instructions)
	  - AVX (Advanced Vector Extensions)

config CRYPTO_CAMELLIA_AESNI_AVX2_X86_64
	tristate "Ciphers: Camellia with modes: ECB, CBC (AES-NI/AVX2)"
	depends on X86 && 64BIT
	select CRYPTO_CAMELLIA_AESNI_AVX_X86_64
	help
	  Length-preserving ciphers: Camellia with ECB and CBC modes

	  Architecture: x86_64 using:
	  - AES-NI (AES New Instructions)
	  - AVX2 (Advanced Vector Extensions 2)

config CRYPTO_CAST5_AVX_X86_64
	tristate "Ciphers: CAST5 with modes: ECB, CBC (AVX)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_CAST5
	select CRYPTO_CAST_COMMON
	select CRYPTO_SIMD
	imply CRYPTO_CTR
	help
	  Length-preserving ciphers: CAST5 (CAST-128) cipher algorithm
	  (RFC2144) with ECB and CBC modes

	  Architecture: x86_64 using:
	  - AVX (Advanced Vector Extensions)

	  Processes 16 blocks in parallel.

config CRYPTO_CAST6_AVX_X86_64
	tristate "Ciphers: CAST6 with modes: ECB, CBC (AVX)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_CAST6
	select CRYPTO_CAST_COMMON
	select CRYPTO_SIMD
	imply CRYPTO_XTS
	imply CRYPTO_CTR
	help
	  Length-preserving ciphers: CAST6 (CAST-256) cipher algorithm
	  (RFC2612) with ECB and CBC modes

	  Architecture: x86_64 using:
	  - AVX (Advanced Vector Extensions)

	  Processes eight blocks in parallel.

config CRYPTO_DES3_EDE_X86_64
	tristate "Ciphers: Triple DES EDE with modes: ECB, CBC"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_LIB_DES
	imply CRYPTO_CTR
	help
	  Block cipher: Triple DES EDE (FIPS 46-3) cipher algorithm
	  Length-preserving ciphers: Triple DES EDE with ECB and CBC modes

	  Architecture: x86_64

	  Processes one or three blocks in parallel.

config CRYPTO_SERPENT_SSE2_X86_64
	tristate "Ciphers: Serpent with modes: ECB, CBC (SSE2)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_SERPENT
	select CRYPTO_SIMD
	imply CRYPTO_CTR
	help
	  Length-preserving ciphers: Serpent cipher algorithm
	  with ECB and CBC modes

	  Architecture: x86_64 using:
	  - SSE2 (Streaming SIMD Extensions 2)

	  Processes eight blocks in parallel.

config CRYPTO_SERPENT_SSE2_586
	tristate "Ciphers: Serpent with modes: ECB, CBC (32-bit with SSE2)"
	depends on X86 && !64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_SERPENT
	select CRYPTO_SIMD
	imply CRYPTO_CTR
	help
	  Length-preserving ciphers: Serpent cipher algorithm
	  with ECB and CBC modes

	  Architecture: x86 (32-bit) using:
	  - SSE2 (Streaming SIMD Extensions 2)

	  Processes four blocks in parallel.

config CRYPTO_SERPENT_AVX_X86_64
	tristate "Ciphers: Serpent with modes: ECB, CBC (AVX)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_SERPENT
	select CRYPTO_SIMD
	imply CRYPTO_XTS
	imply CRYPTO_CTR
	help
	  Length-preserving ciphers: Serpent cipher algorithm
	  with ECB and CBC modes

	  Architecture: x86_64 using:
	  - AVX (Advanced Vector Extensions)

	  Processes eight blocks in parallel.

config CRYPTO_SERPENT_AVX2_X86_64
	tristate "Ciphers: Serpent with modes: ECB, CBC (AVX2)"
	depends on X86 && 64BIT
	select CRYPTO_SERPENT_AVX_X86_64
	help
	  Length-preserving ciphers: Serpent cipher algorithm
	  with ECB and CBC modes

	  Architecture: x86_64 using:
	  - AVX2 (Advanced Vector Extensions 2)

	  Processes 16 blocks in parallel.

config CRYPTO_SM4_AESNI_AVX_X86_64
	tristate "Ciphers: SM4 with modes: ECB, CBC, CFB, CTR (AES-NI/AVX)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_SIMD
	select CRYPTO_ALGAPI
	select CRYPTO_SM4
	help
	  Length-preserving ciphers: SM4 cipher algorithms
	  (OSCCA GB/T 32907-2016) with ECB, CBC, CFB, and CTR modes

	  Architecture: x86_64 using:
	  - AES-NI (AES New Instructions)
	  - AVX (Advanced Vector Extensions)

	  Through two affine transforms,
	  we can use the AES S-Box to simulate the SM4 S-Box to achieve the
	  effect of instruction acceleration.

	  If unsure, say N.

config CRYPTO_SM4_AESNI_AVX2_X86_64
	tristate "Ciphers: SM4 with modes: ECB, CBC, CFB, CTR (AES-NI/AVX2)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_SIMD
	select CRYPTO_ALGAPI
	select CRYPTO_SM4
	select CRYPTO_SM4_AESNI_AVX_X86_64
	help
	  Length-preserving ciphers: SM4 cipher algorithms
	  (OSCCA GB/T 32907-2016) with ECB, CBC, CFB, and CTR modes

	  Architecture: x86_64 using:
	  - AES-NI (AES New Instructions)
	  - AVX2 (Advanced Vector Extensions 2)

	  Through two affine transforms,
	  we can use the AES S-Box to simulate the SM4 S-Box to achieve the
	  effect of instruction acceleration.

	  If unsure, say N.

config CRYPTO_SM4_ZHAOXIN_GMI
	tristate "Ciphers: SM4 with modes: ECB, CBC, CTR, CFB, OFB (Zhaoxin GMI)"
	depends on X86 && CRYPTO
	default m
	select CRYPTO_SKCIPHER
	select CRYPTO_SIMD
	select CRYPTO_ALGAPI
	select CRYPTO_SM4
	help
	  SM4 cipher algorithms (Zhaoxin GMI Instruction).

	  SM4 (GBT.32907-2016) is a cryptographic standard issued by the
	  Organization of State Commercial Administration of China (OSCCA)
	  as an authorized cryptographic algorithms for the use within China.

	  This is SM4 optimized implementation using Zhaoxin GMI
	  instruction set for block cipher.

	  If unsure, say N.

config CRYPTO_TWOFISH_586
	tristate "Ciphers: Twofish (32-bit)"
	depends on (X86 || UML_X86) && !64BIT
	select CRYPTO_ALGAPI
	select CRYPTO_TWOFISH_COMMON
	imply CRYPTO_CTR
	help
	  Block cipher: Twofish cipher algorithm

	  Architecture: x86 (32-bit)

config CRYPTO_TWOFISH_X86_64
	tristate "Ciphers: Twofish"
	depends on (X86 || UML_X86) && 64BIT
	select CRYPTO_ALGAPI
	select CRYPTO_TWOFISH_COMMON
	imply CRYPTO_CTR
	help
	  Block cipher: Twofish cipher algorithm

	  Architecture: x86_64

config CRYPTO_TWOFISH_X86_64_3WAY
	tristate "Ciphers: Twofish with modes: ECB, CBC (3-way parallel)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_TWOFISH_COMMON
	select CRYPTO_TWOFISH_X86_64
	help
	  Length-preserving cipher: Twofish cipher algorithm
	  with ECB and CBC modes

	  Architecture: x86_64

	  Processes three blocks in parallel, better utilizing resources of
	  out-of-order CPUs.

config CRYPTO_TWOFISH_AVX_X86_64
	tristate "Ciphers: Twofish with modes: ECB, CBC (AVX)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_SIMD
	select CRYPTO_TWOFISH_COMMON
	select CRYPTO_TWOFISH_X86_64
	select CRYPTO_TWOFISH_X86_64_3WAY
	imply CRYPTO_XTS
	help
	  Length-preserving cipher: Twofish cipher algorithm
	  with ECB and CBC modes

	  Architecture: x86_64 using:
	  - AVX (Advanced Vector Extensions)

	  Processes eight blocks in parallel.

config CRYPTO_ARIA_AESNI_AVX_X86_64
	tristate "Ciphers: ARIA with modes: ECB, CTR (AES-NI/AVX/GFNI)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_SIMD
	select CRYPTO_ALGAPI
	select CRYPTO_ARIA
	help
	  Length-preserving cipher: ARIA cipher algorithms
	  (RFC 5794) with ECB and CTR modes

	  Architecture: x86_64 using:
	  - AES-NI (AES New Instructions)
	  - AVX (Advanced Vector Extensions)
	  - GFNI (Galois Field New Instructions)

	  Processes 16 blocks in parallel.

config CRYPTO_ARIA_AESNI_AVX2_X86_64
	tristate "Ciphers: ARIA with modes: ECB, CTR (AES-NI/AVX2/GFNI)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_SIMD
	select CRYPTO_ALGAPI
	select CRYPTO_ARIA
	select CRYPTO_ARIA_AESNI_AVX_X86_64
	help
	  Length-preserving cipher: ARIA cipher algorithms
	  (RFC 5794) with ECB and CTR modes

	  Architecture: x86_64 using:
	  - AES-NI (AES New Instructions)
	  - AVX2 (Advanced Vector Extensions)
	  - GFNI (Galois Field New Instructions)

	  Processes 32 blocks in parallel.

config CRYPTO_ARIA_GFNI_AVX512_X86_64
	tristate "Ciphers: ARIA with modes: ECB, CTR (AVX512/GFNI)"
	depends on X86 && 64BIT && AS_AVX512 && AS_GFNI
	select CRYPTO_SKCIPHER
	select CRYPTO_SIMD
	select CRYPTO_ALGAPI
	select CRYPTO_ARIA
	select CRYPTO_ARIA_AESNI_AVX_X86_64
	select CRYPTO_ARIA_AESNI_AVX2_X86_64
	help
	  Length-preserving cipher: ARIA cipher algorithms
	  (RFC 5794) with ECB and CTR modes

	  Architecture: x86_64 using:
	  - AVX512 (Advanced Vector Extensions)
	  - GFNI (Galois Field New Instructions)

	  Processes 64 blocks in parallel.

config CRYPTO_CHACHA20_X86_64
	tristate "Ciphers: ChaCha20, XChaCha20, XChaCha12 (SSSE3/AVX2/AVX-512VL)"
	depends on X86 && 64BIT
	select CRYPTO_SKCIPHER
	select CRYPTO_LIB_CHACHA_GENERIC
	select CRYPTO_ARCH_HAVE_LIB_CHACHA
	help
	  Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12
	  stream cipher algorithms

	  Architecture: x86_64 using:
	  - SSSE3 (Supplemental SSE3)
	  - AVX2 (Advanced Vector Extensions 2)
	  - AVX-512VL (Advanced Vector Extensions-512VL)

config CRYPTO_AEGIS128_AESNI_SSE2
	tristate "AEAD ciphers: AEGIS-128 (AES-NI/SSE2)"
	depends on X86 && 64BIT
	select CRYPTO_AEAD
	select CRYPTO_SIMD
	help
	  AEGIS-128 AEAD algorithm

	  Architecture: x86_64 using:
	  - AES-NI (AES New Instructions)
	  - SSE2 (Streaming SIMD Extensions 2)

config CRYPTO_NHPOLY1305_SSE2
	tristate "Hash functions: NHPoly1305 (SSE2)"
	depends on X86 && 64BIT
	select CRYPTO_NHPOLY1305
	help
	  NHPoly1305 hash function for Adiantum

	  Architecture: x86_64 using:
	  - SSE2 (Streaming SIMD Extensions 2)

config CRYPTO_NHPOLY1305_AVX2
	tristate "Hash functions: NHPoly1305 (AVX2)"
	depends on X86 && 64BIT
	select CRYPTO_NHPOLY1305
	help
	  NHPoly1305 hash function for Adiantum

	  Architecture: x86_64 using:
	  - AVX2 (Advanced Vector Extensions 2)

config CRYPTO_BLAKE2S_X86
	bool "Hash functions: BLAKE2s (SSSE3/AVX-512)"
	depends on X86 && 64BIT
	select CRYPTO_LIB_BLAKE2S_GENERIC
	select CRYPTO_ARCH_HAVE_LIB_BLAKE2S
	help
	  BLAKE2s cryptographic hash function (RFC 7693)

	  Architecture: x86_64 using:
	  - SSSE3 (Supplemental SSE3)
	  - AVX-512 (Advanced Vector Extensions-512)

config CRYPTO_POLYVAL_CLMUL_NI
	tristate "Hash functions: POLYVAL (CLMUL-NI)"
	depends on X86 && 64BIT
	select CRYPTO_POLYVAL
	help
	  POLYVAL hash function for HCTR2

	  Architecture: x86_64 using:
	  - CLMUL-NI (carry-less multiplication new instructions)

config CRYPTO_POLY1305_X86_64
	tristate "Hash functions: Poly1305 (SSE2/AVX2)"
	depends on X86 && 64BIT
	select CRYPTO_LIB_POLY1305_GENERIC
	select CRYPTO_ARCH_HAVE_LIB_POLY1305
	help
	  Poly1305 authenticator algorithm (RFC7539)

	  Architecture: x86_64 using:
	  - SSE2 (Streaming SIMD Extensions 2)
	  - AVX2 (Advanced Vector Extensions 2)

config CRYPTO_SHA1_SSSE3
	tristate "Hash functions: SHA-1 (SSSE3/AVX/AVX2/SHA-NI)"
	depends on X86 && 64BIT
	select CRYPTO_SHA1
	select CRYPTO_HASH
	help
	  SHA-1 secure hash algorithm (FIPS 180)

	  Architecture: x86_64 using:
	  - SSSE3 (Supplemental SSE3)
	  - AVX (Advanced Vector Extensions)
	  - AVX2 (Advanced Vector Extensions 2)
	  - SHA-NI (SHA Extensions New Instructions)

config CRYPTO_SHA256_SSSE3
	tristate "Hash functions: SHA-224 and SHA-256 (SSSE3/AVX/AVX2/SHA-NI)"
	depends on X86 && 64BIT
	select CRYPTO_SHA256
	select CRYPTO_HASH
	help
	  SHA-224 and SHA-256 secure hash algorithms (FIPS 180)

	  Architecture: x86_64 using:
	  - SSSE3 (Supplemental SSE3)
	  - AVX (Advanced Vector Extensions)
	  - AVX2 (Advanced Vector Extensions 2)
	  - SHA-NI (SHA Extensions New Instructions)

config CRYPTO_SHA512_SSSE3
	tristate "Hash functions: SHA-384 and SHA-512 (SSSE3/AVX/AVX2)"
	depends on X86 && 64BIT
	select CRYPTO_SHA512
	select CRYPTO_HASH
	help
	  SHA-384 and SHA-512 secure hash algorithms (FIPS 180)

	  Architecture: x86_64 using:
	  - SSSE3 (Supplemental SSE3)
	  - AVX (Advanced Vector Extensions)
	  - AVX2 (Advanced Vector Extensions 2)

config CRYPTO_SM3_AVX_X86_64
	tristate "Hash functions: SM3 (AVX)"
	depends on X86 && 64BIT
	select CRYPTO_HASH
	select CRYPTO_SM3
	help
	  SM3 secure hash function as defined by OSCCA GM/T 0004-2012 SM3

	  Architecture: x86_64 using:
	  - AVX (Advanced Vector Extensions)

	  If unsure, say N.

config CRYPTO_SM3_ZHAOXIN_GMI
	tristate "Hash functions: SM3 (Zhaoxin GMI)"
	depends on X86 && CRYPTO
	default m
	select CRYPTO_HASH
	select CRYPTO_SM3
	help
	  SM3 cipher algorithms (Zhaoxin GMI Instruction).

	  SM3 secure hash function as defined by OSCCA GM/T 0004-2012 SM3).
	  It is part of the Chinese Commercial Cryptography suite.

	  If unsure, say N.

config CRYPTO_GHASH_CLMUL_NI_INTEL
	tristate "Hash functions: GHASH (CLMUL-NI)"
	depends on X86 && 64BIT
	select CRYPTO_CRYPTD
	help
	  GCM GHASH hash function (NIST SP800-38D)

	  Architecture: x86_64 using:
	  - CLMUL-NI (carry-less multiplication new instructions)

config CRYPTO_CRC32C_INTEL
	tristate "CRC32c (SSE4.2/PCLMULQDQ)"
	depends on X86
	select CRYPTO_HASH
	help
	  CRC32c CRC algorithm with the iSCSI polynomial (RFC 3385 and RFC 3720)

	  Architecture: x86 (32-bit and 64-bit) using:
	  - SSE4.2 (Streaming SIMD Extensions 4.2) CRC32 instruction
	  - PCLMULQDQ (carry-less multiplication)

config CRYPTO_CRC32_PCLMUL
	tristate "CRC32 (PCLMULQDQ)"
	depends on X86
	select CRYPTO_HASH
	select CRC32
	help
	  CRC32 CRC algorithm (IEEE 802.3)

	  Architecture: x86 (32-bit and 64-bit) using:
	  - PCLMULQDQ (carry-less multiplication)

config CRYPTO_CRCT10DIF_PCLMUL
	tristate "CRCT10DIF (PCLMULQDQ)"
	depends on X86 && 64BIT && CRC_T10DIF
	select CRYPTO_HASH
	help
	  CRC16 CRC algorithm used for the T10 (SCSI) Data Integrity Field (DIF)

	  Architecture: x86_64 using:
	  - PCLMULQDQ (carry-less multiplication)

config CRYPTO_SM2_ZHAOXIN_GMI
	tristate "SM2 Cipher algorithm (Zhaoxin GMI Instruction)"
	depends on X86 && (CPU_SUP_CENTAUR || CPU_SUP_ZHAOXIN)
	select CRYPTO_AKCIPHER
	select CRYPTO_MANAGER
	help
	  SM2 (ShangMi 2) public key algorithm by Zhaoxin GMI Instruction

	  Published by State Encryption Management Bureau, China,
	  as specified by OSCCA GM/T 0003.1-2012 -- 0003.5-2012.

endmenu
