# Cryptography primitive options for TinyCrypt version 2.0

# Copyright (c) 2015 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config ZEPHYR_TINYCRYPT_MODULE
	bool

config TINYCRYPT
	bool "TinyCrypt Support"
	depends on ZEPHYR_TINYCRYPT_MODULE
	help
	  This option enables the TinyCrypt cryptography library.

if TINYCRYPT
config TINYCRYPT_CTR_PRNG
	bool "PRNG in counter mode"
	help
	  This option enables support for the pseudo-random number
	  generator in counter mode.

config TINYCRYPT_SHA256
	bool "SHA-256 Hash function support"
	help
	  This option enables support for SHA-256
	  hash function primitive.

config TINYCRYPT_SHA256_HMAC
	bool "HMAC (via SHA256) message auth support"
	depends on TINYCRYPT_SHA256
	help
	  This option enables support for HMAC using SHA-256
	  message authentication code.

config TINYCRYPT_SHA256_HMAC_PRNG
	bool "PRNG (via HMAC-SHA256) support"
	depends on TINYCRYPT_SHA256_HMAC
	help
	  This option enables support for pseudo-random number
	  generator.

config TINYCRYPT_ECC_DH
	bool "ECC_DH anonymous key agreement protocol"
	help
	  This option enables support for the Elliptic curve
	  Diffie-Hellman anonymous key agreement protocol.

	  Enabling ECC requires a cryptographically secure random number
	  generator.

config TINYCRYPT_ECC_DSA
	bool "ECC_DSA digital signature algorithm"
	help
	  This option enables support for the Elliptic Curve Digital
	  Signature Algorithm (ECDSA).

	  Enabling ECC requires a cryptographically secure random number
	  generator.

config TINYCRYPT_AES
	bool "AES-128 decrypt/encrypt"
	help
	  This option enables support for AES-128 decrypt and encrypt.

config TINYCRYPT_AES_CBC
	bool "AES-128 block cipher"
	depends on TINYCRYPT_AES
	help
	  This option enables support for AES-128 block cipher mode.

config TINYCRYPT_AES_CTR
	bool "AES-128 counter mode"
	depends on TINYCRYPT_AES
	help
	  This option enables support for AES-128 counter mode.

config TINYCRYPT_AES_CCM
	bool "AES-128 CCM mode"
	depends on TINYCRYPT_AES
	help
	  This option enables support for AES-128 CCM mode.

config TINYCRYPT_AES_CMAC
	bool "AES-128 CMAC mode"
	depends on TINYCRYPT_AES
	help
	  This option enables support for AES-128 CMAC mode.
endif
