mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
feat(ble/blufi): Support setting BLE encryption for blufi
(cherry picked from commit 60a028fb17)
Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
This commit is contained in:
committed by
zhiweijian
parent
c1d1ca00c4
commit
fae52f14e8
@@ -695,7 +695,7 @@ void app_main(void)
|
||||
|
||||
/* set the security iocap & auth_req & key size & init key response key parameters to the stack*/
|
||||
esp_ble_auth_req_t auth_req = ESP_LE_AUTH_REQ_SC_MITM_BOND; //bonding with peer device after authentication
|
||||
esp_ble_io_cap_t iocap = ESP_IO_CAP_OUT; //set the IO capability to No output No input
|
||||
esp_ble_io_cap_t iocap = ESP_IO_CAP_OUT; //set the IO capability to DisplayOnly
|
||||
uint8_t key_size = 16; //the key size should be 7~16 bytes
|
||||
uint8_t init_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK;
|
||||
uint8_t rsp_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK;
|
||||
|
||||
@@ -82,3 +82,9 @@ I (1198) BLUFI_EXAMPLE: BLUFI init finish
|
||||
## Troubleshooting
|
||||
|
||||
For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you soon.
|
||||
|
||||
## Note
|
||||
BluFi is currently in maintenance mode, and no new features are planned.
|
||||
|
||||
For new projects or when adding network_provisioning, we recommend using the [network_provisioning](https://github.com/espressif/idf-extra-components/tree/master/network_provisioning).
|
||||
|
||||
|
||||
@@ -33,4 +33,23 @@ menu "Example Configuration"
|
||||
bool "WAPI PSK"
|
||||
endchoice
|
||||
|
||||
config EXAMPLE_BLUFI_BLE_SMP_ENABLE
|
||||
bool "Enable BLE SMP support in BLUFI"
|
||||
depends on BT_BLUEDROID_ENABLED
|
||||
select BT_BLUFI_BLE_SMP_ENABLE
|
||||
select BT_BLE_SMP_ENABLE
|
||||
default n
|
||||
help
|
||||
Enable BLE Security Manager Protocol (SMP) for BLUFI.
|
||||
Currently, this feature is only supported with the Bluedroid host.
|
||||
|
||||
If enabled:
|
||||
- BLUFI will configure SMP security parameters such as
|
||||
IO capabilities, authentication mode, and key size.
|
||||
- After a BLE connection is established, BLUFI will
|
||||
proactively initiate a security request.
|
||||
- Only after the BLE pairing is successfully completed,
|
||||
BLUFI can proceed with Wi-Fi provisioning.
|
||||
- If the user rejects pairing or inputs an incorrect passkey,
|
||||
BLUFI will not start Wi-Fi provisioning.
|
||||
endmenu
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
@@ -319,6 +319,14 @@ static void example_event_callback(esp_blufi_cb_event_t event, esp_blufi_cb_para
|
||||
ble_is_connected = true;
|
||||
esp_blufi_adv_stop();
|
||||
blufi_security_init();
|
||||
#ifdef CONFIG_EXAMPLE_BLUFI_BLE_SMP_ENABLE
|
||||
// Try to initiate BLE security request after connection established.
|
||||
BLUFI_INFO("Try to initiate BLE security request\n");
|
||||
esp_err_t ret = esp_blufi_start_security_request(param->connect.remote_bda);
|
||||
if (ret != ESP_OK) {
|
||||
BLUFI_ERROR("Failed to start security request: %s\n", esp_err_to_name(ret));
|
||||
}
|
||||
#endif // CONFIG_EXAMPLE_BLUFI_BLE_SMP_ENABLE
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_BLE_DISCONNECT:
|
||||
BLUFI_INFO("BLUFI ble disconnect\n");
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#ifdef CONFIG_BT_BLUEDROID_ENABLED
|
||||
#include "esp_bt_main.h"
|
||||
#include "esp_bt_device.h"
|
||||
#include "esp_gap_ble_api.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BT_NIMBLE_ENABLED
|
||||
@@ -56,6 +57,37 @@ esp_err_t esp_blufi_host_init(void)
|
||||
|
||||
}
|
||||
|
||||
#ifdef CONFIG_EXAMPLE_BLUFI_BLE_SMP_ENABLE
|
||||
|
||||
void esp_blufi_set_ble_security_params(void)
|
||||
{
|
||||
/* set the security iocap & auth_req & key size & init key response key parameters to the stack*/
|
||||
esp_ble_auth_req_t auth_req = ESP_LE_AUTH_REQ_SC_MITM; // Secure Connections with MITM protection (no bonding)
|
||||
esp_ble_io_cap_t iocap = ESP_IO_CAP_OUT; // IO capability: DisplayOnly
|
||||
uint8_t key_size = 16; //the key size should be 7~16 bytes
|
||||
uint8_t init_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK;
|
||||
uint8_t rsp_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK;
|
||||
//set static passkey
|
||||
uint32_t passkey = 123456;
|
||||
uint8_t auth_option = ESP_BLE_ONLY_ACCEPT_SPECIFIED_AUTH_ENABLE;
|
||||
uint8_t oob_support = ESP_BLE_OOB_DISABLE;
|
||||
BLUFI_INFO("BLE SMP passkey: %06" PRIu32 " (WARNING: Change this default value for production or don't use static passkey!)\n", passkey);
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, &passkey, sizeof(uint32_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_AUTHEN_REQ_MODE, &auth_req, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_IOCAP_MODE, &iocap, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_MAX_KEY_SIZE, &key_size, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_ONLY_ACCEPT_SPECIFIED_SEC_AUTH, &auth_option, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_OOB_SUPPORT, &oob_support, sizeof(uint8_t));
|
||||
/* If your BLE device acts as a Slave, the init_key means you hope which types of key of the master should distribute to you,
|
||||
and the response key means which key you can distribute to the master;
|
||||
If your BLE device acts as a master, the response key means you hope which types of key of the slave should distribute to you,
|
||||
and the init key means which key you can distribute to the slave. */
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_SET_INIT_KEY, &init_key, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_SET_RSP_KEY, &rsp_key, sizeof(uint8_t));
|
||||
}
|
||||
|
||||
#endif // #if CONFIG_EXAMPLE_BLUFI_BLE_SMP_ENABLE
|
||||
|
||||
esp_err_t esp_blufi_host_deinit(void)
|
||||
{
|
||||
int ret;
|
||||
@@ -112,8 +144,11 @@ esp_err_t esp_blufi_host_and_cb_init(esp_blufi_callbacks_t *example_callbacks)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ESP_OK;
|
||||
#ifdef CONFIG_EXAMPLE_BLUFI_BLE_SMP_ENABLE
|
||||
esp_blufi_set_ble_security_params();
|
||||
#endif // CONFIG_EXAMPLE_BLUFI_BLE_SMP_ENABLE
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_BT_BLUEDROID_ENABLED */
|
||||
|
||||
Reference in New Issue
Block a user