# SPDX-License-Identifier: GPL-2.0-only
#
config INTEGRITY
	bool "Integrity subsystem"
	depends on SECURITY
	default y
	help
	  This option enables the integrity subsystem, which is comprised
	  of a number of different components including the Integrity
	  Measurement Architecture (IMA), Extended Verification Module
	  (EVM), IMA-appraisal extension, digital signature verification
	  extension and audit measurement log support.

	  Each of these components can be enabled/disabled separately.
	  Refer to the individual components for additional details.

if INTEGRITY

config INTEGRITY_SIGNATURE
	bool "Digital signature verification using multiple keyrings"
	default n
	select KEYS
	select SIGNATURE
	help
	  This option enables digital signature verification support
	  using multiple keyrings. It defines separate keyrings for each
	  of the different use cases - evm, ima, and modules.
	  Different keyrings improves search performance, but also allow
	  to "lock" certain keyring to prevent adding new keys.
	  This is useful for evm and module keyrings, when keys are
	  usually only added from initramfs.

config INTEGRITY_ASYMMETRIC_KEYS
	bool "Enable asymmetric keys support"
	depends on INTEGRITY_SIGNATURE
	default n
        select ASYMMETRIC_KEY_TYPE
        select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
        select CRYPTO_RSA
        select X509_CERTIFICATE_PARSER
	help
	  This option enables digital signature verification using
	  asymmetric keys.

config INTEGRITY_TRUSTED_KEYRING
	bool "Require all keys on the integrity keyrings be signed"
	depends on SYSTEM_TRUSTED_KEYRING
	depends on INTEGRITY_ASYMMETRIC_KEYS
	default y
	help
	   This option requires that all keys added to the .ima and
	   .evm keyrings be signed by a key on the system trusted
	   keyring.

config INTEGRITY_PLATFORM_KEYRING
        bool "Provide keyring for platform/firmware trusted keys"
        depends on INTEGRITY_ASYMMETRIC_KEYS
        depends on SYSTEM_BLACKLIST_KEYRING
        help
         Provide a separate, distinct keyring for platform trusted keys, which
         the kernel automatically populates during initialization from values
         provided by the platform for verifying the kexec'ed kerned image
         and, possibly, the initramfs signature.

config LOAD_UEFI_KEYS
       depends on INTEGRITY_PLATFORM_KEYRING
       depends on EFI
       def_bool y

config LOAD_IPL_KEYS
       depends on INTEGRITY_PLATFORM_KEYRING
       depends on S390
       def_bool y

config LOAD_PPC_KEYS
	bool "Enable loading of platform and blacklisted keys for POWER"
	depends on INTEGRITY_PLATFORM_KEYRING
	depends on PPC_SECURE_BOOT
	default y
	help
	  Enable loading of keys to the .platform keyring and blacklisted
	  hashes to the .blacklist keyring for powerpc based platforms.

config INTEGRITY_AUDIT
	bool "Enables integrity auditing support "
	depends on AUDIT
	default y
	help
	  In addition to enabling integrity auditing support, this
	  option adds a kernel parameter 'integrity_audit', which
	  controls the level of integrity auditing messages.
	  0 - basic integrity auditing messages (default)
	  1 - additional integrity auditing messages

	  Additional informational integrity auditing messages would
	  be enabled by specifying 'integrity_audit=1' on the kernel
	  command line.

source "security/integrity/ima/Kconfig"
source "security/integrity/evm/Kconfig"

endif   # if INTEGRITY
