# SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later
#
# This file is sourced from src/security/Kconfig for menuconfig convenience.

#menu "CBFS verification"	# TODO: enable once it works

config CBFS_VERIFICATION
	bool	# TODO: make user selectable once it works
	depends on !VBOOT_STARTS_BEFORE_BOOTBLOCK # this is gonna get tricky...
	select VBOOT_LIB
	help
	  Work in progress. Do not use (yet).

config TOCTOU_SAFETY
	bool
	depends on CBFS_VERIFICATION
	depends on !NO_FMAP_CACHE
	depends on !NO_CBFS_MCACHE
	depends on !USE_OPTION_TABLE && !FSP_CAR  # Known to access CBFS before CBMEM init
	help
	  Work in progress. Not actually TOCTOU safe yet. Do not use.

	  Design idea here is that mcache overflows in this mode are only legal
	  for the RW CBFS, because it's relatively easy to retrieve the RW
	  metadata hash from persistent vboot context at any time, but the RO
	  metadata hash is lost after the bootblock is unloaded. This avoids the
	  need to carry yet another piece forward through the stages. Mcache
	  overflows are mostly a concern for RW updates (if an update adds more
	  files than originally planned for), for the RO section it should
	  always be possible to dimension the mcache correctly beforehand, so
	  this should be an acceptable limitation.

config CBFS_HASH_ALGO
	int
	default 1 if CBFS_HASH_SHA1
	default 2 if CBFS_HASH_SHA256
	default 3 if CBFS_HASH_SHA512

choice
	prompt "--> hash type"
	depends on CBFS_VERIFICATION
	default CBFS_HASH_SHA256

config CBFS_HASH_SHA1
	bool "SHA-1"

config CBFS_HASH_SHA256
	bool "SHA-256"

config CBFS_HASH_SHA512
	bool "SHA-512"

endchoice

#endmenu
