mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-10-26 10:57:38 +08:00
BPF crypto was implemented using the lskcipher API, which doesn't seem to be going anywhere. lskcipher supports only ARC4 and block ciphers in CBC and ECB mode, and only with unoptimized implementations. Library APIs also have been found to be a much better approach, for a variety of reasons, including reduced overhead, greater flexibility, and having to be explicit about the crypto algorithms that are supported. We can safely ignore the theoretical ARC4 and non-AES block cipher support in BPF crypto as unused, which leaves AES-CBC and AES-ECB. AES-CBC was stated to be needed for decrypting packets using a homebrew UDP-based protocol (https://lore.kernel.org/r/d1cdfc23-b336-49a9-8833-29f05b5b9fec@linux.dev/). AES-ECB is used by the BPF self-tests, and it was stated to maybe be used in the future for QUIC-LB (https://lore.kernel.org/r/5f9c3aab-5339-463c-a86d-edac297e1e95@linux.dev/). Those reasons don't make much sense either, especially AES-ECB which isn't appropriate in new systems and should be dropped. Regardless, let's assume that both AES-CBC and AES-ECB need to be kept for now. There are library APIs for both of these now, which are much easier to use and more efficient. Reimplement BPF crypto on top of them, greatly simplifying the code. As part of this, the bpf_crypto_type abstraction layer is removed, as it's not useful. This removes the only user of the lskcipher API, so follow-up patches will be able to remove that code as well. Signed-off-by: Eric Biggers <ebiggers@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20260924184254.142720-1-ebiggers@kernel.org
205 lines
7.2 KiB
Makefile
205 lines
7.2 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Cryptographic API
|
|
#
|
|
|
|
CONTEXT_ANALYSIS := y
|
|
|
|
obj-$(CONFIG_CRYPTO) += crypto.o
|
|
crypto-y := api.o cipher.o
|
|
|
|
obj-$(CONFIG_CRYPTO_ENGINE) += crypto_engine.o
|
|
obj-$(CONFIG_CRYPTO_FIPS) += fips.o
|
|
|
|
crypto_algapi-$(CONFIG_PROC_FS) += proc.o
|
|
crypto_algapi-y := algapi.o scatterwalk.o $(crypto_algapi-y)
|
|
obj-$(CONFIG_CRYPTO_ALGAPI2) += crypto_algapi.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AEAD2) += aead.o
|
|
obj-$(CONFIG_CRYPTO_GENIV) += geniv.o
|
|
|
|
crypto_skcipher-y += lskcipher.o
|
|
crypto_skcipher-y += skcipher.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SKCIPHER2) += crypto_skcipher.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SEQIV) += seqiv.o
|
|
obj-$(CONFIG_CRYPTO_ECHAINIV) += echainiv.o
|
|
|
|
crypto_hash-y += ahash.o
|
|
crypto_hash-y += shash.o
|
|
obj-$(CONFIG_CRYPTO_HASH2) += crypto_hash.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AKCIPHER2) += akcipher.o
|
|
obj-$(CONFIG_CRYPTO_SIG2) += sig.o
|
|
obj-$(CONFIG_CRYPTO_KPP2) += kpp.o
|
|
|
|
dh_generic-y := dh.o
|
|
dh_generic-y += dh_helper.o
|
|
obj-$(CONFIG_CRYPTO_DH) += dh_generic.o
|
|
|
|
$(obj)/rsapubkey.asn1.o: $(obj)/rsapubkey.asn1.c $(obj)/rsapubkey.asn1.h
|
|
$(obj)/rsaprivkey.asn1.o: $(obj)/rsaprivkey.asn1.c $(obj)/rsaprivkey.asn1.h
|
|
$(obj)/rsa_helper.o: $(obj)/rsapubkey.asn1.h $(obj)/rsaprivkey.asn1.h
|
|
|
|
rsa_generic-y := rsapubkey.asn1.o
|
|
rsa_generic-y += rsaprivkey.asn1.o
|
|
rsa_generic-y += rsa.o
|
|
rsa_generic-y += rsa_helper.o
|
|
rsa_generic-y += rsa-pkcs1pad.o
|
|
rsa_generic-y += rsassa-pkcs1.o
|
|
obj-$(CONFIG_CRYPTO_RSA) += rsa_generic.o
|
|
|
|
$(obj)/ecdsasignature.asn1.o: $(obj)/ecdsasignature.asn1.c $(obj)/ecdsasignature.asn1.h
|
|
$(obj)/ecdsa-x962.o: $(obj)/ecdsasignature.asn1.h
|
|
ecdsa_generic-y += ecdsa.o
|
|
ecdsa_generic-y += ecdsa-x962.o
|
|
ecdsa_generic-y += ecdsa-p1363.o
|
|
ecdsa_generic-y += ecdsasignature.asn1.o
|
|
obj-$(CONFIG_CRYPTO_ECDSA) += ecdsa_generic.o
|
|
|
|
obj-$(CONFIG_CRYPTO_MLDSA) += mldsa.o
|
|
|
|
crypto_acompress-y := acompress.o
|
|
crypto_acompress-y += scompress.o
|
|
obj-$(CONFIG_CRYPTO_ACOMP2) += crypto_acompress.o
|
|
|
|
cryptomgr-y := algboss.o testmgr.o
|
|
|
|
obj-$(CONFIG_CRYPTO_MANAGER2) += cryptomgr.o
|
|
obj-$(CONFIG_CRYPTO_USER) += crypto_user.o
|
|
obj-$(CONFIG_CRYPTO_CMAC) += cmac.o
|
|
obj-$(CONFIG_CRYPTO_HMAC) += hmac.o
|
|
obj-$(CONFIG_CRYPTO_XCBC) += xcbc.o
|
|
obj-$(CONFIG_CRYPTO_NULL) += crypto_null.o
|
|
obj-$(CONFIG_CRYPTO_MD4) += md4.o
|
|
obj-$(CONFIG_CRYPTO_MD5) += md5.o
|
|
obj-$(CONFIG_CRYPTO_RMD160) += rmd160.o
|
|
obj-$(CONFIG_CRYPTO_SHA1) += sha1.o
|
|
obj-$(CONFIG_CRYPTO_SHA256) += sha256.o
|
|
obj-$(CONFIG_CRYPTO_SHA512) += sha512.o
|
|
obj-$(CONFIG_CRYPTO_SHA3) += sha3.o
|
|
obj-$(CONFIG_CRYPTO_SM3) += sm3.o
|
|
obj-$(CONFIG_CRYPTO_STREEBOG) += streebog_generic.o
|
|
obj-$(CONFIG_CRYPTO_WP512) += wp512.o
|
|
CFLAGS_wp512.o := $(call cc-option,-fno-schedule-insns) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149
|
|
obj-$(CONFIG_CRYPTO_BLAKE2B) += blake2b.o
|
|
obj-$(CONFIG_CRYPTO_ECB) += ecb.o
|
|
obj-$(CONFIG_CRYPTO_CBC) += cbc.o
|
|
obj-$(CONFIG_CRYPTO_CTS) += cts.o
|
|
obj-$(CONFIG_CRYPTO_LRW) += lrw.o
|
|
obj-$(CONFIG_CRYPTO_XTS) += xts.o
|
|
obj-$(CONFIG_CRYPTO_CTR) += ctr.o
|
|
obj-$(CONFIG_CRYPTO_XCTR) += xctr.o
|
|
obj-$(CONFIG_CRYPTO_HCTR2) += hctr2.o
|
|
obj-$(CONFIG_CRYPTO_ADIANTUM) += adiantum.o
|
|
obj-$(CONFIG_CRYPTO_GCM) += gcm.o
|
|
obj-$(CONFIG_CRYPTO_CCM) += ccm.o
|
|
obj-$(CONFIG_CRYPTO_CHACHA20POLY1305) += chacha20poly1305.o
|
|
obj-$(CONFIG_CRYPTO_AEGIS128) += aegis128.o
|
|
aegis128-y := aegis128-core.o
|
|
|
|
CFLAGS_aegis128-neon-inner.o += $(CC_FLAGS_FPU)
|
|
CFLAGS_REMOVE_aegis128-neon-inner.o += $(CC_FLAGS_NO_FPU)
|
|
ifeq ($(ARCH),arm)
|
|
CFLAGS_aegis128-neon-inner.o += -march=armv8-a -mfpu=crypto-neon-fp-armv8
|
|
aegis128-$(CONFIG_CRYPTO_AEGIS128_SIMD) += aegis128-neon.o aegis128-neon-inner.o
|
|
endif
|
|
ifeq ($(ARCH),arm64)
|
|
aegis128-cflags-y := -mcpu=generic+crypto
|
|
aegis128-cflags-$(CONFIG_CC_IS_GCC) += -ffixed-q16 -ffixed-q17 -ffixed-q18 \
|
|
-ffixed-q19 -ffixed-q20 -ffixed-q21 \
|
|
-ffixed-q22 -ffixed-q23 -ffixed-q24 \
|
|
-ffixed-q25 -ffixed-q26 -ffixed-q27 \
|
|
-ffixed-q28 -ffixed-q29 -ffixed-q30 \
|
|
-ffixed-q31
|
|
CFLAGS_aegis128-neon-inner.o += $(aegis128-cflags-y)
|
|
aegis128-$(CONFIG_CRYPTO_AEGIS128_SIMD) += aegis128-neon.o aegis128-neon-inner.o
|
|
endif
|
|
|
|
obj-$(CONFIG_CRYPTO_PCRYPT) += pcrypt.o
|
|
obj-$(CONFIG_CRYPTO_CRYPTD) += cryptd.o
|
|
obj-$(CONFIG_CRYPTO_DES) += des_generic.o
|
|
obj-$(CONFIG_CRYPTO_BLOWFISH) += blowfish_generic.o
|
|
obj-$(CONFIG_CRYPTO_BLOWFISH_COMMON) += blowfish_common.o
|
|
obj-$(CONFIG_CRYPTO_TWOFISH) += twofish_generic.o
|
|
obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o
|
|
obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o
|
|
CFLAGS_serpent_generic.o := $(call cc-option,-fsched-pressure) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149
|
|
obj-$(CONFIG_CRYPTO_AES) += aes.o
|
|
obj-$(CONFIG_CRYPTO_SM4) += sm4.o
|
|
obj-$(CONFIG_CRYPTO_SM4_GENERIC) += sm4_generic.o
|
|
obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o
|
|
obj-$(CONFIG_CRYPTO_CAST_COMMON) += cast_common.o
|
|
obj-$(CONFIG_CRYPTO_CAST5) += cast5_generic.o
|
|
obj-$(CONFIG_CRYPTO_CAST6) += cast6_generic.o
|
|
obj-$(CONFIG_CRYPTO_ARC4) += arc4.o
|
|
obj-$(CONFIG_CRYPTO_TEA) += tea.o
|
|
obj-$(CONFIG_CRYPTO_KHAZAD) += khazad.o
|
|
obj-$(CONFIG_CRYPTO_ANUBIS) += anubis.o
|
|
obj-$(CONFIG_CRYPTO_SEED) += seed.o
|
|
obj-$(CONFIG_CRYPTO_ARIA) += aria_generic.o
|
|
obj-$(CONFIG_CRYPTO_CHACHA20) += chacha.o
|
|
CFLAGS_chacha.o += -DARCH=$(ARCH)
|
|
obj-$(CONFIG_CRYPTO_DEFLATE) += deflate.o
|
|
obj-$(CONFIG_CRYPTO_CRC32C) += crc32c-cryptoapi.o
|
|
crc32c-cryptoapi-y := crc32c.o
|
|
obj-$(CONFIG_CRYPTO_CRC32) += crc32-cryptoapi.o
|
|
crc32-cryptoapi-y := crc32.o
|
|
obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o authencesn.o
|
|
obj-$(CONFIG_CRYPTO_KRB5ENC) += krb5enc.o
|
|
obj-$(CONFIG_CRYPTO_LZO) += lzo.o lzo-rle.o
|
|
obj-$(CONFIG_CRYPTO_LZ4) += lz4.o
|
|
obj-$(CONFIG_CRYPTO_LZ4HC) += lz4hc.o
|
|
obj-$(CONFIG_CRYPTO_XXHASH) += xxhash_generic.o
|
|
obj-$(CONFIG_CRYPTO_842) += 842.o
|
|
obj-$(CONFIG_CRYPTO_RNG2) += rng.o
|
|
obj-$(CONFIG_CRYPTO_DRBG) += drbg.o
|
|
obj-$(CONFIG_CRYPTO_JITTERENTROPY) += jitterentropy_rng.o
|
|
CFLAGS_jitterentropy.o = -O0
|
|
KASAN_SANITIZE_jitterentropy.o = n
|
|
UBSAN_SANITIZE_jitterentropy.o = n
|
|
jitterentropy_rng-y := jitterentropy.o jitterentropy-kcapi.o
|
|
obj-$(CONFIG_CRYPTO_JITTERENTROPY_TESTINTERFACE) += jitterentropy-testing.o
|
|
obj-$(CONFIG_CRYPTO_BENCHMARK) += tcrypt.o
|
|
obj-$(CONFIG_CRYPTO_USER_API) += af_alg.o
|
|
obj-$(CONFIG_CRYPTO_USER_API_HASH) += algif_hash.o
|
|
obj-$(CONFIG_CRYPTO_USER_API_SKCIPHER) += algif_skcipher.o
|
|
obj-$(CONFIG_CRYPTO_USER_API_RNG) += algif_rng.o
|
|
obj-$(CONFIG_CRYPTO_USER_API_AEAD) += algif_aead.o
|
|
obj-$(CONFIG_CRYPTO_ZSTD) += zstd.o
|
|
obj-$(CONFIG_CRYPTO_ECC) += ecc.o
|
|
obj-$(CONFIG_CRYPTO_ESSIV) += essiv.o
|
|
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124949
|
|
ifeq ($(CONFIG_ARM)$(CONFIG_KASAN_STACK)$(CONFIG_CC_IS_GCC),yyy)
|
|
CFLAGS_ecc.o += $(call cc-option,-Wframe-larger-than=1536)
|
|
endif
|
|
|
|
ecdh_generic-y += ecdh.o
|
|
ecdh_generic-y += ecdh_helper.o
|
|
obj-$(CONFIG_CRYPTO_ECDH) += ecdh_generic.o
|
|
|
|
$(obj)/ecrdsa_params.asn1.o: $(obj)/ecrdsa_params.asn1.c $(obj)/ecrdsa_params.asn1.h
|
|
$(obj)/ecrdsa_pub_key.asn1.o: $(obj)/ecrdsa_pub_key.asn1.c $(obj)/ecrdsa_pub_key.asn1.h
|
|
$(obj)/ecrdsa.o: $(obj)/ecrdsa_params.asn1.h $(obj)/ecrdsa_pub_key.asn1.h
|
|
ecrdsa_generic-y += ecrdsa.o
|
|
ecrdsa_generic-y += ecrdsa_params.asn1.o
|
|
ecrdsa_generic-y += ecrdsa_pub_key.asn1.o
|
|
obj-$(CONFIG_CRYPTO_ECRDSA) += ecrdsa_generic.o
|
|
|
|
#
|
|
# generic algorithms and the async_tx api
|
|
#
|
|
obj-$(CONFIG_ASYNC_CORE) += async_tx/
|
|
obj-$(CONFIG_ASYMMETRIC_KEY_TYPE) += asymmetric_keys/
|
|
crypto_simd-y := simd.o
|
|
obj-$(CONFIG_CRYPTO_SIMD) += crypto_simd.o
|
|
|
|
#
|
|
# Key derivation function
|
|
#
|
|
obj-$(CONFIG_CRYPTO_KDF800108_CTR) += kdf_sp800108.o
|
|
|
|
obj-$(CONFIG_CRYPTO_KRB5) += krb5/
|