# mcux entropy generator driver configuration

# Copyright (c) 2016 ARM Ltd.
# SPDX-License-Identifier: Apache-2.0

config ENTROPY_MCUX_RNGA
	bool "MCUX RNGA driver"
	default y
	depends on DT_HAS_NXP_KINETIS_RNGA_ENABLED
	select ENTROPY_HAS_DRIVER
	help
	  This option enables the random number generator accelerator (RNGA)
	  driver based on the MCUX RNGA driver.

config ENTROPY_MCUX_TRNG
	bool "MCUX TRNG driver"
	default y
	depends on DT_HAS_NXP_KINETIS_TRNG_ENABLED
	select ENTROPY_HAS_DRIVER
	help
	  This option enables the true random number generator (TRNG)
	  driver based on the MCUX TRNG driver.

config ENTROPY_MCUX_RNG
	bool "MCUX RNG driver"
	default y
	depends on DT_HAS_NXP_LPC_RNG_ENABLED
	select ENTROPY_HAS_DRIVER
	help
	  This option enables the true random number generator (TRNG)
	  driver based on the MCUX RNG driver on LPC Family.

config ENTROPY_MCUX_CAAM
	bool "MCUX CAAM driver"
	default y
	depends on DT_HAS_NXP_IMX_CAAM_ENABLED
	select ENTROPY_HAS_DRIVER
	select NOCACHE_MEMORY if ARCH_HAS_NOCACHE_MEMORY_SUPPORT
	help
	  This option enables the CAAM driver based on the MCUX
	  CAAM driver.

config ENTROPY_MCUX_CSS
	bool "MCUX CSS RNG driver"
	default y
	depends on DT_HAS_NXP_CSS_V2_ENABLED
	select ENTROPY_HAS_DRIVER
	help
	  This option enables the driver for random number generation using
	  the CSS (Crypto Subsystem).
#
# Don't use use the MCUX TRNG as a random source as it is not designed
# to supply a continuous random stream. Instead, it is used to provide
# a seed to RNG generator.
#
# Use the software implemented xoroshiro RNG.
# Use CSPRNG for cryptographically secure RNG source.
#
choice RNG_GENERATOR_CHOICE
	default XOSHIRO_RANDOM_GENERATOR if ENTROPY_MCUX_TRNG
endchoice

choice CSPRNG_GENERATOR_CHOICE
	default CTR_DRBG_CSPRNG_GENERATOR if ENTROPY_MCUX_TRNG
endchoice
