diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-04-23 19:03:46 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-04-23 19:03:46 +0000 |
commit | d2928971124cdf469b41a7e4b4f0016fd7aaa04b (patch) | |
tree | 533ca2879de1b19095418945e1deaa561780dfd2 | |
parent | 27e0800248cfc5d08679e96f69820555f98a2197 (diff) | |
parent | bc888641a762ea07c3aadd01adcee0dfbaa787a4 (diff) | |
download | wpa_supplicant_8-d2928971124cdf469b41a7e4b4f0016fd7aaa04b.tar.gz |
Merge "Enable SAE Fast Transition key management in HIDL" into qt-dev
-rw-r--r-- | wpa_supplicant/hidl/1.2/sta_network.cpp | 45 | ||||
-rw-r--r-- | wpa_supplicant/hidl/1.2/sta_network.h | 2 |
2 files changed, 45 insertions, 2 deletions
diff --git a/wpa_supplicant/hidl/1.2/sta_network.cpp b/wpa_supplicant/hidl/1.2/sta_network.cpp index 13540557..9f4e9d2f 100644 --- a/wpa_supplicant/hidl/1.2/sta_network.cpp +++ b/wpa_supplicant/hidl/1.2/sta_network.cpp @@ -875,6 +875,7 @@ SupplicantStatus StaNetwork::setKeyMgmtInternal(uint32_t key_mgmt_mask) if (key_mgmt_mask & ~kAllowedKeyMgmtMask) { return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""}; } + setFastTransitionKeyMgmt(key_mgmt_mask); wpa_ssid->key_mgmt = key_mgmt_mask; wpa_printf(MSG_MSGDUMP, "key_mgmt: 0x%x", wpa_ssid->key_mgmt); resetInternalStateAfterParamsUpdate(); @@ -1320,8 +1321,10 @@ std::pair<SupplicantStatus, bool> StaNetwork::getScanSsidInternal() std::pair<SupplicantStatus, uint32_t> StaNetwork::getKeyMgmtInternal() { struct wpa_ssid *wpa_ssid = retrieveNetworkPtr(); - return {{SupplicantStatusCode::SUCCESS, ""}, - wpa_ssid->key_mgmt & kAllowedKeyMgmtMask}; + uint32_t key_mgmt_mask = wpa_ssid->key_mgmt & kAllowedKeyMgmtMask; + + resetFastTransitionKeyMgmt(key_mgmt_mask); + return {{SupplicantStatusCode::SUCCESS, ""}, key_mgmt_mask}; } std::pair<SupplicantStatus, uint32_t> StaNetwork::getProtoInternal() @@ -2120,6 +2123,44 @@ int StaNetwork::setByteArrayKeyFieldAndResetState( resetInternalStateAfterParamsUpdate(); return 0; } + +/** + * Helper function to set the fast transition bits in the key management + * bitmask, to allow FT support when possible. + */ +void StaNetwork::setFastTransitionKeyMgmt(uint32_t &key_mgmt_mask) +{ + if (key_mgmt_mask & WPA_KEY_MGMT_SAE) { + key_mgmt_mask |= WPA_KEY_MGMT_FT_SAE; + } + + if (key_mgmt_mask & WPA_KEY_MGMT_PSK) { + key_mgmt_mask |= WPA_KEY_MGMT_FT_PSK; + } + + if (key_mgmt_mask & WPA_KEY_MGMT_IEEE8021X) { + key_mgmt_mask |= WPA_KEY_MGMT_FT_IEEE8021X; + } +} + +/** + * Helper function to reset the fast transition bits in the key management + * bitmask. + */ +void StaNetwork::resetFastTransitionKeyMgmt(uint32_t &key_mgmt_mask) +{ + if (key_mgmt_mask & WPA_KEY_MGMT_SAE) { + key_mgmt_mask &= ~WPA_KEY_MGMT_FT_SAE; + } + + if (key_mgmt_mask & WPA_KEY_MGMT_PSK) { + key_mgmt_mask &= ~WPA_KEY_MGMT_FT_PSK; + } + + if (key_mgmt_mask & WPA_KEY_MGMT_IEEE8021X) { + key_mgmt_mask &= ~WPA_KEY_MGMT_FT_IEEE8021X; + } +} } // namespace implementation } // namespace V1_2 } // namespace supplicant diff --git a/wpa_supplicant/hidl/1.2/sta_network.h b/wpa_supplicant/hidl/1.2/sta_network.h index a2352576..16d065e0 100644 --- a/wpa_supplicant/hidl/1.2/sta_network.h +++ b/wpa_supplicant/hidl/1.2/sta_network.h @@ -363,6 +363,8 @@ private: const uint8_t* value, const size_t value_len, uint8_t** to_update_field, size_t* to_update_field_len, const char* hexdump_prefix); + void setFastTransitionKeyMgmt(uint32_t &key_mgmt_mask); + void resetFastTransitionKeyMgmt(uint32_t &key_mgmt_mask); // Reference to the global wpa_struct. This is assumed to be valid // for the lifetime of the process. |