Commit a66baa11 authored by Vinayak Kariappa Chettimada's avatar Vinayak Kariappa Chettimada Committed by Fabio Baltieri
Browse files

Bluetooth: Controller: Introduce BT_CTLR_CRYPTO_SUPPORT



Introduce BT_CTLR_CRYPTO_SUPPORT so that preliminary port to
support nRF54L15 SoC can be upstreamed without encryption
support.

ENTROPY_GENERATOR now selected when BT_CTLR_CRYPTO enabled.

Signed-off-by: default avatarVinayak Kariappa Chettimada <vich@nordicsemi.no>
parent 073e627e
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -23,20 +23,20 @@
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(bt_rpa);

#if defined(CONFIG_BT_CTLR) && defined(CONFIG_BT_HOST_CRYPTO)
#if defined(CONFIG_BT_CTLR_CRYPTO) && defined(CONFIG_BT_HOST_CRYPTO)
#include "../controller/util/util.h"
#include "../controller/hal/ecb.h"
#endif /* defined(CONFIG_BT_CTLR) && defined(CONFIG_BT_HOST_CRYPTO) */
#endif /* CONFIG_BT_CTLR_CRYPTO && CONFIG_BT_HOST_CRYPTO */

#if defined(CONFIG_BT_PRIVACY) || defined(CONFIG_BT_CTLR_PRIVACY)
static int internal_rand(void *buf, size_t len)
{
/* Force using controller rand function. */
#if defined(CONFIG_BT_CTLR) && defined(CONFIG_BT_HOST_CRYPTO)
#if defined(CONFIG_BT_CTLR_CRYPTO) && defined(CONFIG_BT_HOST_CRYPTO)
	return lll_csrand_get(buf, len);
#else
#else /* !CONFIG_BT_CTLR_CRYPTO || !CONFIG_BT_HOST_CRYPTO */
	return bt_rand(buf, len);
#endif
#endif /* !CONFIG_BT_CTLR_CRYPTO || !CONFIG_BT_HOST_CRYPTO */
}
#endif /* defined(CONFIG_BT_PRIVACY) || defined(CONFIG_BT_CTLR_PRIVACY) */

@@ -44,13 +44,12 @@ static int internal_encrypt_le(const uint8_t key[16], const uint8_t plaintext[16
			       uint8_t enc_data[16])
{
/* Force using controller encrypt function if supported. */
#if defined(CONFIG_BT_CTLR) && defined(CONFIG_BT_HOST_CRYPTO) && \
    defined(CONFIG_BT_CTLR_LE_ENC)
#if defined(CONFIG_BT_CTLR_CRYPTO) && defined(CONFIG_BT_HOST_CRYPTO)
	ecb_encrypt(key, plaintext, enc_data, NULL);
	return 0;
#else
#else /* !CONFIG_BT_CTLR_CRYPTO || !CONFIG_BT_HOST_CRYPTO */
	return bt_encrypt_le(key, plaintext, enc_data);
#endif
#endif /* !CONFIG_BT_CTLR_CRYPTO || !CONFIG_BT_HOST_CRYPTO */
}

static int ah(const uint8_t irk[16], const uint8_t r[3], uint8_t out[3])
+5 −1
Original line number Diff line number Diff line
@@ -6,6 +6,9 @@
# The following symbols are enabled depending if the controller actually
# supports the respective features.

config BT_CTLR_CRYPTO_SUPPORT
	bool

config BT_CTLR_LE_ENC_SUPPORT
	bool

@@ -139,8 +142,9 @@ comment "BLE Controller configuration"

config BT_CTLR_CRYPTO
	bool "Crypto functions in Controller"
	default y
	depends on BT_CTLR_CRYPTO_SUPPORT
	select ENTROPY_GENERATOR
	default y
	help
	  Use random number generation and AES encryption support functions
	  provided by the controller.
+10 −5
Original line number Diff line number Diff line
@@ -15,14 +15,17 @@ config BT_LLL_VENDOR_NORDIC
	select ENTROPY_NRF5_BIAS_CORRECTION if ENTROPY_NRF5_RNG

	select BT_HAS_HCI_VS
	select BT_CTLR_LE_ENC_SUPPORT if !BT_CTLR_DATA_LENGTH_CLEAR && \
	select BT_CTLR_CRYPTO_SUPPORT
	select BT_CTLR_LE_ENC_SUPPORT if BT_CTLR_CRYPTO_SUPPORT && \
					 !BT_CTLR_DATA_LENGTH_CLEAR && \
					 !BT_CTLR_PHY_2M_NRF
	select BT_CTLR_PRIVACY_SUPPORT if BT_CTLR_CRYPTO_SUPPORT && \
					  !SOC_SERIES_NRF51X
	select BT_CTLR_CONN_PARAM_REQ_SUPPORT
	select BT_CTLR_EXT_REJ_IND_SUPPORT
	select BT_CTLR_PER_INIT_FEAT_XCHG_SUPPORT
	select BT_CTLR_DATA_LEN_UPDATE_SUPPORT if HAS_HW_NRF_CCM_LFLEN_8BIT || \
						  BT_CTLR_DATA_LENGTH_CLEAR
	select BT_CTLR_PRIVACY_SUPPORT if !SOC_SERIES_NRF51X
	select BT_CTLR_EXT_SCAN_FP_SUPPORT
	select BT_CTLR_PHY_2M_SUPPORT if HAS_HW_NRF_RADIO_BLE_2M || \
					 BT_CTLR_PHY_2M_NRF
@@ -64,11 +67,13 @@ config BT_LLL_VENDOR_NORDIC
config BT_LLL_VENDOR_OPENISA
	bool "Use OpenISA LLL"
	depends on SOC_OPENISA_RV32M1
	select BT_HAS_HCI_VS
	select BT_CTLR_CRYPTO_SUPPORT
	select BT_CTLR_LE_ENC_SUPPORT if BT_CTLR_CRYPTO_SUPPORT && \
					 !BT_CTLR_DATA_LENGTH_CLEAR
	select BT_CTLR_PRIVACY_SUPPORT if BT_CTLR_CRYPTO_SUPPORT
	select BT_CTLR_PHY_UPDATE_SUPPORT
	select BT_CTLR_EXT_REJ_IND_SUPPORT
	select BT_HAS_HCI_VS
	select BT_CTLR_LE_ENC_SUPPORT if !BT_CTLR_DATA_LENGTH_CLEAR
	select BT_CTLR_PRIVACY_SUPPORT

	select BT_TICKER_UPDATE if BT_BROADCASTER || BT_CONN

+4 −0
Original line number Diff line number Diff line
@@ -1466,6 +1466,7 @@ static void le_rem_dev_from_fal(struct net_buf *buf, struct net_buf **evt)
}
#endif /* CONFIG_BT_CTLR_FILTER_ACCEPT_LIST */

#if defined(CONFIG_BT_CTLR_CRYPTO)
static void le_encrypt(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_cp_le_encrypt *cmd = (void *)buf->data;
@@ -1479,6 +1480,7 @@ static void le_encrypt(struct net_buf *buf, struct net_buf **evt)
	rp->status = 0x00;
	memcpy(rp->enc_data, enc_data, 16);
}
#endif /* CONFIG_BT_CTLR_CRYPTO */

static void le_rand(struct net_buf *buf, struct net_buf **evt)
{
@@ -4338,9 +4340,11 @@ static int controller_cmd_handle(uint16_t ocf, struct net_buf *cmd,
		break;
#endif /* CONFIG_BT_CTLR_FILTER_ACCEPT_LIST */

#if defined(CONFIG_BT_CTLR_CRYPTO)
	case BT_OCF(BT_HCI_OP_LE_ENCRYPT):
		le_encrypt(cmd, evt);
		break;
#endif /* CONFIG_BT_CTLR_CRYPTO */

	case BT_OCF(BT_HCI_OP_LE_RAND):
		le_rand(cmd, evt);
+6 −1
Original line number Diff line number Diff line
@@ -91,11 +91,16 @@ zephyr_library_sources(

zephyr_library_sources(
  hal/nrf5/cntr.c
  hal/nrf5/ecb.c
  hal/nrf5/radio/radio.c
  hal/nrf5/mayfly.c
  hal/nrf5/ticker.c
  )

zephyr_library_sources_ifdef(
  CONFIG_BT_CTLR_CRYPTO
  hal/nrf5/ecb.c
  )

if(CONFIG_BT_CTLR_DF AND NOT CONFIG_SOC_SERIES_BSIM_NRFXX)
  zephyr_library_sources(
    hal/nrf5/radio/radio_df.c