# Copyright (c) 2022 Nordic Semiconductor
#
# SPDX-License-Identifier: Apache-2.0

config SUPPORT_BOOTLOADER
	bool
	default y

config SUPPORT_BOOTLOADER_MCUBOOT_ZEPHYR
	bool
	default y

choice BOOTLOADER
	prompt "Bootloader support"
	default BOOTLOADER_NONE
	depends on SUPPORT_BOOTLOADER

config BOOTLOADER_NONE
	bool "None"
	help
	  Do not Include a bootloader in the build

config BOOTLOADER_MCUBOOT
	bool "MCUboot"
	depends on SUPPORT_BOOTLOADER_MCUBOOT_ZEPHYR
	help
	  Include MCUboot (Zephyr port) as the bootloader to use

endchoice

if BOOTLOADER_MCUBOOT

config SIGNATURE_TYPE
	string
	default NONE if BOOT_SIGNATURE_TYPE_NONE
	default RSA  if BOOT_SIGNATURE_TYPE_RSA
	default ECDSA_P256 if BOOT_SIGNATURE_TYPE_ECDSA_P256
	default ED25519 if BOOT_SIGNATURE_TYPE_ED25519

choice BOOT_SIGNATURE_TYPE
	prompt "Signature type"
	default BOOT_SIGNATURE_TYPE_RSA

config BOOT_SIGNATURE_TYPE_NONE
	bool "No signature; use only hash check"

config BOOT_SIGNATURE_TYPE_RSA
	bool "RSA signatures"

config BOOT_SIGNATURE_TYPE_ECDSA_P256
	bool "Elliptic curve digital signatures with curve P-256"

config BOOT_SIGNATURE_TYPE_ED25519
	bool "Edwards curve digital signatures using ed25519"

endchoice

config BOOT_SIGNATURE_KEY_FILE
	string "PEM key file"
	default "$(ZEPHYR_MCUBOOT_MODULE_DIR)/root-ec-p256.pem" if BOOT_SIGNATURE_TYPE_ECDSA_P256
	default "$(ZEPHYR_MCUBOOT_MODULE_DIR)/root-ed25519.pem" if BOOT_SIGNATURE_TYPE_ED25519
	default "$(ZEPHYR_MCUBOOT_MODULE_DIR)/root-rsa-2048.pem" if BOOT_SIGNATURE_TYPE_RSA
	default ""
	help
	  Absolute path to key file to use with MCUBoot.

endif
