Skip to content

Commit

Permalink
Merge branch 'bugfix/fix_gatt_char_perm_key_size' into 'master'
Browse files Browse the repository at this point in the history
Bluedroid: fix encrypt keysize of GATT characteristic permission

Closes BT-2992

See merge request espressif/esp-idf!21250
  • Loading branch information
Weijian-Espressif committed Dec 12, 2022
2 parents 3146da3 + c37184a commit 6d67601
Show file tree
Hide file tree
Showing 8 changed files with 5 additions and 31 deletions.
4 changes: 4 additions & 0 deletions components/bt/host/bluedroid/api/esp_gap_ble_api.c
Expand Up @@ -561,6 +561,10 @@ esp_err_t esp_ble_gap_set_security_param(esp_ble_sm_param_t param_type,
return ESP_ERR_INVALID_ARG;
}
}
if (param_type == ESP_BLE_APP_ENC_KEY_SIZE) {
LOG_ERROR("ESP_BLE_APP_ENC_KEY_SIZE is deprecated, use ESP_GATT_PERM_ENCRYPT_KEY_SIZE in characteristic definition");
return ESP_ERR_NOT_SUPPORTED;
}

btc_msg_t msg = {0};
btc_ble_gap_args_t arg;
Expand Down
Expand Up @@ -277,6 +277,7 @@ typedef enum {
#define ESP_GATT_PERM_WRITE_SIGNED_MITM (1 << 8) /* bit 8 - 0x0100 */ /* relate to BTA_GATT_PERM_WRITE_SIGNED_MITM in bta/bta_gatt_api.h */
#define ESP_GATT_PERM_READ_AUTHORIZATION (1 << 9) /* bit 9 - 0x0200 */
#define ESP_GATT_PERM_WRITE_AUTHORIZATION (1 << 10) /* bit 10 - 0x0400 */
#define ESP_GATT_PERM_ENCRYPT_KEY_SIZE(keysize) (((keysize - 6) & 0xF) << 12) /* bit 12:15 - 0xF000 */
typedef uint16_t esp_gatt_perm_t;

/* relate to BTA_GATT_CHAR_PROP_BIT_xxx in bta/bta_gatt_api.h */
Expand Down
12 changes: 0 additions & 12 deletions components/bt/host/bluedroid/bta/dm/bta_dm_co.c
Expand Up @@ -51,7 +51,6 @@ tBTE_APPL_CFG bte_appl_cfg = {
BTM_BLE_MIN_KEY_SIZE,
BTM_BLE_ONLY_ACCEPT_SPECIFIED_SEC_AUTH_DISABLE,
BTM_BLE_OOB_DISABLE,
BTM_BLE_APPL_ENC_KEY_SIZE,
};
#endif

Expand Down Expand Up @@ -424,17 +423,6 @@ void bta_dm_co_ble_set_min_key_size(UINT8 ble_key_size)
#endif ///SMP_INCLUDED == TRUE
}

void bta_dm_co_ble_set_appl_enc_key_size(UINT8 ble_key_size)
{
#if (SMP_INCLUDED == TRUE)
if(ble_key_size >= bte_appl_cfg.ble_min_key_size && ble_key_size <= bte_appl_cfg.ble_max_key_size) {
bte_appl_cfg.ble_appl_enc_key_size = ble_key_size;
} else {
APPL_TRACE_ERROR("%s error:Invalid key size value, key_size =%d",__func__, ble_key_size);
}
#endif ///SMP_INCLUDED == TRUE
}

void bta_dm_co_ble_set_accept_auth_enable(UINT8 enable)
{
#if (SMP_INCLUDED == TRUE)
Expand Down
2 changes: 0 additions & 2 deletions components/bt/host/bluedroid/bta/include/bta/bta_dm_co.h
Expand Up @@ -215,6 +215,4 @@ extern UINT8 bta_dm_co_ble_get_accept_auth_enable(void);
extern UINT8 bta_dm_co_ble_get_auth_req(void);

extern void bta_dm_co_ble_oob_support(UINT8 enable);

extern void bta_dm_co_ble_set_appl_enc_key_size(UINT8 ble_key_size);
#endif
Expand Up @@ -1683,12 +1683,6 @@ void btc_gap_ble_call_handler(btc_msg_t *msg)
bta_dm_co_ble_oob_support(enable);
break;
}
case ESP_BLE_APP_ENC_KEY_SIZE: {
uint8_t key_size = 0;
STREAM_TO_UINT8(key_size, value);
bta_dm_co_ble_set_appl_enc_key_size(key_size);
break;
}
default:
break;
}
Expand Down
Expand Up @@ -34,7 +34,6 @@ typedef struct {
UINT8 ble_min_key_size;
UINT8 ble_accept_auth_enable;
UINT8 oob_support;
UINT8 ble_appl_enc_key_size;
#endif

} tBTE_APPL_CFG;
Expand Down
9 changes: 0 additions & 9 deletions components/bt/host/bluedroid/stack/gatt/gatt_db.c
Expand Up @@ -34,7 +34,6 @@
#include "gatt_int.h"
#include "stack/l2c_api.h"
#include "btm_int.h"
#include "common/bte_appl.h"

extern tGATT_STATUS gap_proc_read(tGATTS_REQ_TYPE type, tGATT_READ_REQ *p_data, tGATTS_RSP *p_rsp);
extern tGATT_STATUS gatt_proc_read(UINT16 conn_id, tGATTS_REQ_TYPE type, tGATT_READ_REQ *p_data, tGATTS_RSP *p_rsp);
Expand Down Expand Up @@ -128,14 +127,10 @@ static tGATT_STATUS gatts_check_attr_readability(tGATT_ATTR16 *p_attr,
tGATT_PERM perm = p_attr->permission;

UNUSED(offset);
#if SMP_INCLUDED == TRUE
min_key_size = bte_appl_cfg.ble_appl_enc_key_size;
#else
min_key_size = (((perm & GATT_ENCRYPT_KEY_SIZE_MASK) >> 12));
if (min_key_size != 0 ) {
min_key_size += 6;
}
#endif

if (!(perm & GATT_READ_ALLOWED)) {
GATT_TRACE_ERROR( "GATT_READ_NOT_PERMIT\n");
Expand Down Expand Up @@ -1144,14 +1139,10 @@ tGATT_STATUS gatts_write_attr_perm_check (tGATT_SVC_DB *p_db, UINT8 op_code,
while (p_attr != NULL) {
if (p_attr->handle == handle) {
perm = p_attr->permission;
#if SMP_INCLUDED == TRUE
min_key_size = bte_appl_cfg.ble_appl_enc_key_size;
#else
min_key_size = (((perm & GATT_ENCRYPT_KEY_SIZE_MASK) >> 12));
if (min_key_size != 0 ) {
min_key_size += 6;
}
#endif
GATT_TRACE_DEBUG( "gatts_write_attr_perm_check p_attr->permission =0x%04x min_key_size==0x%04x",
p_attr->permission,
min_key_size);
Expand Down
1 change: 0 additions & 1 deletion components/bt/host/bluedroid/stack/include/stack/btm_api.h
Expand Up @@ -1486,7 +1486,6 @@ typedef UINT8 tBTM_IO_CAP;
#define BTM_BLE_RESPONDER_KEY_SIZE 15
#define BTM_BLE_MAX_KEY_SIZE 16
#define BTM_BLE_MIN_KEY_SIZE 7
#define BTM_BLE_APPL_ENC_KEY_SIZE 7

typedef UINT8 tBTM_AUTH_REQ;

Expand Down

0 comments on commit 6d67601

Please sign in to comment.