mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-28 09:14:28 +03:00
Address review comments and fix build errors
This commit is contained in:
@@ -875,7 +875,7 @@ typedef struct {
|
||||
#define ESP_WIFI_NAN_NDP_PMK_LEN 32 /**< Length of NAN Datapath PMK */
|
||||
#define ESP_WIFI_NAN_NPK_LEN ESP_WIFI_NAN_NDP_PMK_LEN /**< Length of NAN Pairwise Key (same as NDP PMK) */
|
||||
#define ESP_WIFI_NAN_NDP_PMKID_LEN 16 /**< Length of NAN Datapath PMKID */
|
||||
#define ESP_WIFI_NAN_MAX_PEER_CREDS 2 /**< <Maximum number of NAN peer credentials that can be stored */
|
||||
#define ESP_WIFI_NAN_MAX_PEER_CREDS 2 /**< Maximum number of NAN peer credentials that can be stored */
|
||||
#define ESP_WIFI_NAN_MAX_CREDS_PER_SVC 4 /**< Maximum number of NAN security credentials per service (passphrase/PMK entries) */
|
||||
|
||||
#define ESP_WIFI_MAX_SVC_NAME_LEN 256 /**< Maximum length of NAN service name */
|
||||
@@ -1309,7 +1309,7 @@ typedef enum {
|
||||
WIFI_EVENT_NAN_BOOTSTRAP_COMPLETED, /**< NAN Pairing Bootstrapping completed (success/failure) */
|
||||
WIFI_EVENT_NAN_PAIRING_INDICATION, /**< Received NAN Pairing indication (reserved) */
|
||||
WIFI_EVENT_NAN_PAIRING_CONFIRM, /**< NAN pairing completed after NIK follow-up exchange */
|
||||
WIFI_EVENT_NAN_CLUSTER_JOIN, /**< NAN Cluster joined/started successfully */
|
||||
WIFI_EVENT_NAN_CLUSTER_JOIN, /**< Posted when the device joins, starts, or merges into a NAN cluster */
|
||||
WIFI_EVENT_MAX, /**< Invalid Wi-Fi event ID */
|
||||
} wifi_event_t;
|
||||
|
||||
@@ -1669,7 +1669,8 @@ typedef struct {
|
||||
uint32_t cookie; /**< Comeback cookie from responder (0 if none) */
|
||||
} wifi_event_nan_bootstrap_complete_t;
|
||||
|
||||
#define WIFI_NAN_PAIRING_REASON_NIK_FUP_TIMEOUT 1 /**< Peer NIK follow-up not received (Wi-Fi Aware v4.0 §7.6.4.2) */
|
||||
#define WIFI_NAN_PAIRING_REASON_NIK_FUP_TIMEOUT 1 /**< Local reason: peer NIK follow-up not received within timeout.
|
||||
See Wi-Fi Aware v4.0 §7.6.4.2 for the NIK-exchange procedure. */
|
||||
|
||||
/**
|
||||
* @brief Argument structure for WIFI_EVENT_NAN_PAIRING_CONFIRM event
|
||||
|
||||
@@ -1309,7 +1309,7 @@ typedef enum {
|
||||
WIFI_EVENT_NAN_BOOTSTRAP_COMPLETED, /**< NAN Pairing Bootstrapping completed (success/failure) */
|
||||
WIFI_EVENT_NAN_PAIRING_INDICATION, /**< Received NAN Pairing indication (reserved) */
|
||||
WIFI_EVENT_NAN_PAIRING_CONFIRM, /**< NAN pairing completed after NIK follow-up exchange */
|
||||
WIFI_EVENT_NAN_CLUSTER_JOIN, /**< NAN Cluster joined/started successfully */
|
||||
WIFI_EVENT_NAN_CLUSTER_JOIN, /**< Posted when the device joins, starts, or merges into a NAN cluster */
|
||||
WIFI_EVENT_MAX, /**< Invalid Wi-Fi event ID */
|
||||
} wifi_event_t;
|
||||
|
||||
@@ -1669,7 +1669,8 @@ typedef struct {
|
||||
uint32_t cookie; /**< Comeback cookie from responder (0 if none) */
|
||||
} wifi_event_nan_bootstrap_complete_t;
|
||||
|
||||
#define WIFI_NAN_PAIRING_REASON_NIK_FUP_TIMEOUT 1 /**< Peer NIK follow-up not received (Wi-Fi Aware v4.0 §7.6.4.2) */
|
||||
#define WIFI_NAN_PAIRING_REASON_NIK_FUP_TIMEOUT 1 /**< Local reason: peer NIK follow-up not received within timeout.
|
||||
See Wi-Fi Aware v4.0 §7.6.4.2 for the NIK-exchange procedure. */
|
||||
|
||||
/**
|
||||
* @brief Argument structure for WIFI_EVENT_NAN_PAIRING_CONFIRM event
|
||||
|
||||
@@ -53,8 +53,12 @@ void esp_nan_action_stop(void);
|
||||
|
||||
#ifdef CONFIG_ESP_WIFI_NAN_PAIRING
|
||||
|
||||
#define NAN_PAIRING_PINCODE_MIN 000000
|
||||
#ifndef NAN_PAIRING_PINCODE_MIN
|
||||
#define NAN_PAIRING_PINCODE_MIN 0
|
||||
#endif
|
||||
#ifndef NAN_PAIRING_PINCODE_MAX
|
||||
#define NAN_PAIRING_PINCODE_MAX 999999
|
||||
#endif
|
||||
|
||||
union pairing_cred_t {
|
||||
uint32_t pincode; /**< 6-digit PIN in range of NAN_PAIRING_PINCODE_MIN to NAN_PAIRING_PINCODE_MAX */
|
||||
|
||||
@@ -453,6 +453,36 @@ static bool nan_services_limit_reached(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Service ID = first 6 bytes of SHA256(lowercase(service_name))
|
||||
* per Wi-Fi Aware v4.0 §5.1.5 (Service Name and Service ID).
|
||||
*/
|
||||
bool nan_compute_service_id(const char *service_name, uint8_t service_id[6])
|
||||
{
|
||||
if (!service_name || !g_wifi_default_wpa_crypto_funcs.sha256_vector) {
|
||||
return false;
|
||||
}
|
||||
size_t name_len = strlen(service_name);
|
||||
char *lower = os_malloc(name_len + 1);
|
||||
if (!lower) {
|
||||
return false;
|
||||
}
|
||||
strlcpy(lower, service_name, name_len + 1);
|
||||
for (char *p = lower; *p; p++) {
|
||||
*p = tolower((unsigned char) * p);
|
||||
}
|
||||
uint8_t hash[32];
|
||||
const uint8_t *addr[1] = {(const uint8_t *)lower};
|
||||
size_t len[1] = {name_len};
|
||||
int ret = g_wifi_default_wpa_crypto_funcs.sha256_vector(1, addr, len, hash);
|
||||
os_free(lower);
|
||||
if (ret != 0) {
|
||||
return false;
|
||||
}
|
||||
memcpy(service_id, hash, 6);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Pre-claim a slot for an upcoming publish/subscribe service. The slot is
|
||||
* marked with a pending sentinel svc_id (0xFF) so nan_find_own_svc_by_name()
|
||||
* can find it from the derive callback running on the WiFi task — that's how
|
||||
|
||||
@@ -327,6 +327,7 @@ struct own_svc_info *nan_find_own_svc(uint8_t svc_id);
|
||||
struct own_svc_info *nan_find_own_svc_by_name(const char *svc_name);
|
||||
struct ndl_info *nan_find_ndl(uint8_t ndp_id, uint8_t peer_nmi[]);
|
||||
struct ndl_info *nan_find_ndl_by_pub_id_and_peer(uint8_t pub_id, const uint8_t *peer_nmi);
|
||||
bool nan_compute_service_id(const char *service_name, uint8_t service_id[6]);
|
||||
|
||||
/* === nan_secure_dp_funcs initializer targets === */
|
||||
|
||||
@@ -487,7 +488,6 @@ esp_err_t nan_app_register_paired_peer(const uint8_t *peer_nmi,
|
||||
const struct nan_paired_peer *nan_app_find_paired_peer(const uint8_t *peer_nmi);
|
||||
void nan_app_remove_paired_peer(const uint8_t *peer_nmi);
|
||||
void nan_app_clear_paired_peers(void);
|
||||
bool nan_compute_service_id(const char *service_name, uint8_t service_id[6]);
|
||||
|
||||
#endif /* CONFIG_ESP_WIFI_NAN_SECURITY */
|
||||
|
||||
|
||||
@@ -255,6 +255,13 @@ esp_err_t esp_wifi_nan_pairing_start(wifi_nan_pairing_config_t *cfg)
|
||||
}
|
||||
|
||||
#if defined(CONFIG_ESP_WIFI_PASN_SUPPORT)
|
||||
if (cfg->cred.pincode != UINT32_MAX &&
|
||||
cfg->cred.pincode > NAN_PAIRING_PINCODE_MAX) {
|
||||
ESP_LOGE(TAG, "Invalid pincode %u (valid range %u..%u or UINT32_MAX for default)",
|
||||
cfg->cred.pincode, NAN_PAIRING_PINCODE_MIN, NAN_PAIRING_PINCODE_MAX);
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
int ret;
|
||||
|
||||
switch (cfg->self_role) {
|
||||
@@ -497,13 +504,16 @@ static void nan_pairing_nik_fup_timeout_cb(void *eloop_data, void *user_ctx)
|
||||
}
|
||||
|
||||
own->nik_fup_pending = false;
|
||||
evt.status = WIFI_NAN_PAIRING_STATUS_REJECTED;
|
||||
evt.status = WIFI_NAN_PAIRING_STATUS_ACCEPTED;
|
||||
evt.reason_code = WIFI_NAN_PAIRING_REASON_NIK_FUP_TIMEOUT;
|
||||
MACADDR_COPY(evt.peer_nmi, own->nik_fup_pending_peer_nmi);
|
||||
#if defined(CONFIG_ESP_WIFI_NAN_SECURITY)
|
||||
nan_app_remove_paired_peer(own->nik_fup_pending_peer_nmi);
|
||||
#endif
|
||||
esp_nan_complete_pairing(own->svc_id);
|
||||
nan_app_post_event(WIFI_EVENT_NAN_PAIRING_CONFIRM, &evt, sizeof(evt));
|
||||
ESP_LOGW(TAG, "Pairing NIK follow-up timed out for peer " MACSTR,
|
||||
MAC2STR(own->nik_fup_pending_peer_nmi));
|
||||
ESP_LOGW(TAG, "Pairing succeeded but NIK caching timed out for peer " MACSTR
|
||||
" (reason=%u)", MAC2STR(own->nik_fup_pending_peer_nmi), evt.reason_code);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -99,36 +99,6 @@ static bool nan_csid_bitmap_has_pasn(uint16_t csid_bitmap)
|
||||
return (csid_bitmap & WIFI_NAN_CSID_BIT_NCS_PK_PASN_128) != 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Service ID = first 6 bytes of SHA256(lowercase(service_name))
|
||||
* per Wi-Fi Aware v4.0 §5.1.5 (Service Name and Service ID).
|
||||
*/
|
||||
bool nan_compute_service_id(const char *service_name, uint8_t service_id[6])
|
||||
{
|
||||
if (!service_name || !g_wifi_default_wpa_crypto_funcs.sha256_vector) {
|
||||
return false;
|
||||
}
|
||||
size_t name_len = strlen(service_name);
|
||||
char *lower = os_malloc(name_len + 1);
|
||||
if (!lower) {
|
||||
return false;
|
||||
}
|
||||
strlcpy(lower, service_name, name_len + 1);
|
||||
for (char *p = lower; *p; p++) {
|
||||
*p = tolower((unsigned char) * p);
|
||||
}
|
||||
uint8_t hash[32];
|
||||
const uint8_t *addr[1] = {(const uint8_t *)lower};
|
||||
size_t len[1] = {name_len};
|
||||
int ret = g_wifi_default_wpa_crypto_funcs.sha256_vector(1, addr, len, hash);
|
||||
os_free(lower);
|
||||
if (ret != 0) {
|
||||
return false;
|
||||
}
|
||||
memcpy(service_id, hash, 6);
|
||||
return true;
|
||||
}
|
||||
|
||||
#define NAN_SERVICE_ID_LEN 6
|
||||
|
||||
/*
|
||||
|
||||
@@ -1587,7 +1587,7 @@ static void nan_pasn_auth_eloop_cb(void *eloop_ctx, void *user_data)
|
||||
|
||||
if (ctx->pincode != UINT32_MAX) {
|
||||
n = os_snprintf(pin_digits, sizeof(pin_digits), "%06u",
|
||||
(unsigned)(ctx->pincode % 1000000U));
|
||||
(unsigned)ctx->pincode);
|
||||
if (os_snprintf_error(sizeof(pin_digits), n)) {
|
||||
nan_pasn_data_deinit(pd);
|
||||
os_free(ctx);
|
||||
@@ -1746,7 +1746,7 @@ int pasn_responder_init(const uint8_t *peer_addr, uint32_t pincode)
|
||||
|
||||
if (pincode != UINT32_MAX) {
|
||||
n = os_snprintf(pin_digits, sizeof(pin_digits), "%06u",
|
||||
(unsigned)(pincode % 1000000U));
|
||||
(unsigned)pincode);
|
||||
if (os_snprintf_error(sizeof(pin_digits), n)) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -243,8 +243,8 @@ typedef enum {
|
||||
typedef struct {
|
||||
uint8_t peer_nik[ESP_WIFI_NAN_NIK_LEN]; /**< Peer's NAN Identity Key (16 bytes) */
|
||||
uint8_t npk[ESP_WIFI_NAN_NPK_LEN]; /**< NAN Pairwise Key / NCS-SK PMK (32 bytes) */
|
||||
uint8_t service_hash[6];
|
||||
bool is_valid;
|
||||
uint8_t service_hash[6]; /**< Service Hash of the corresponding service */
|
||||
bool is_valid; /**< True if this credential entry is valid */
|
||||
} wifi_nan_peer_creds_t;
|
||||
|
||||
typedef wifi_scan_channel_bitmap_t channel_bitmap_t;
|
||||
@@ -344,7 +344,7 @@ uint8_t esp_wifi_ap_get_owe_config_internal(void);
|
||||
esp_err_t esp_nan_complete_pairing(uint8_t svc_id);
|
||||
esp_err_t esp_wifi_nan_load_saved_creds(uint8_t own_nik[ESP_WIFI_NAN_NIK_LEN], bool *own_nik_valid,
|
||||
wifi_nan_peer_creds_t peer_creds[ESP_WIFI_NAN_MAX_PEER_CREDS], uint8_t *num_peer_creds);
|
||||
esp_err_t esp_wifi_nan_save_own_nik(const uint8_t own_nik[ESP_WIFI_NAN_NIK_LEN]) ;
|
||||
esp_err_t esp_wifi_nan_save_own_nik(const uint8_t own_nik[ESP_WIFI_NAN_NIK_LEN]);
|
||||
esp_err_t esp_wifi_nan_save_creds_for_peer(const uint8_t peer_nik[ESP_WIFI_NAN_NIK_LEN],
|
||||
const uint8_t npk[ESP_WIFI_NAN_NPK_LEN], const uint8_t service_hash[6]);
|
||||
esp_err_t esp_wifi_nan_erase_all_creds(void);
|
||||
|
||||
Reference in New Issue
Block a user