# 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"
	# FIXME: temporarily disabled because this driver hangs
	# 	 during initialization on rt11xx platforms
	#default y
	depends on DT_HAS_NXP_IMX_CAAM_ENABLED
	select ENTROPY_HAS_DRIVER
	help
	  This option enables the CAAM driver based on the MCUX
	  CAAM driver.

#
# 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
