16ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/*
26ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * hidl interface for wpa_supplicant daemon
36ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi>
46ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com>
56ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius *
66ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * This software may be distributed under the terms of the BSD license.
76ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * See README for more details.
86ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
96ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "hidl_manager.h"
116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "hidl_return_util.h"
126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "misc_utils.h"
136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "sta_network.h"
146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusextern "C" {
166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "wps_supplicant.h"
176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace {
206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piususing android::hardware::wifi::supplicant::V1_0::ISupplicantStaNetwork;
216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piususing android::hardware::wifi::supplicant::V1_0::SupplicantStatus;
226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr uint8_t kZeroBssid[6] = {0, 0, 0, 0, 0, 0};
246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr uint32_t kAllowedKeyMgmtMask =
266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    (static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::NONE) |
276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::WPA_PSK) |
286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::WPA_EAP) |
296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::IEEE8021X) |
306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::FT_EAP) |
316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::FT_PSK) |
326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::OSEN));
336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr uint32_t kAllowedProtoMask =
346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    (static_cast<uint32_t>(ISupplicantStaNetwork::ProtoMask::WPA) |
356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::ProtoMask::RSN) |
366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::ProtoMask::OSEN));
376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr uint32_t kAllowedAuthAlgMask =
386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    (static_cast<uint32_t>(ISupplicantStaNetwork::AuthAlgMask::OPEN) |
396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::AuthAlgMask::SHARED) |
406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::AuthAlgMask::LEAP));
416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr uint32_t kAllowedGroupCipherMask =
426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    (static_cast<uint32_t>(ISupplicantStaNetwork::GroupCipherMask::WEP40) |
436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::GroupCipherMask::WEP104) |
446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::GroupCipherMask::TKIP) |
456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::GroupCipherMask::CCMP) |
466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(
476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	 ISupplicantStaNetwork::GroupCipherMask::GTK_NOT_USED));
486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr uint32_t kAllowedPairwisewCipherMask =
496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    (static_cast<uint32_t>(ISupplicantStaNetwork::PairwiseCipherMask::NONE) |
506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::PairwiseCipherMask::TKIP) |
516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius     static_cast<uint32_t>(ISupplicantStaNetwork::PairwiseCipherMask::CCMP));
526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr uint32_t kEapMethodMax =
546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    static_cast<uint32_t>(ISupplicantStaNetwork::EapMethod::WFA_UNAUTH_TLS) + 1;
556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char const *kEapMethodStrings[kEapMethodMax] = {
566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    "PEAP", "TLS", "TTLS", "PWD", "SIM", "AKA", "AKA'", "WFA-UNAUTH-TLS"};
576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr uint32_t kEapPhase2MethodMax =
586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    static_cast<uint32_t>(ISupplicantStaNetwork::EapPhase2Method::AKA_PRIME) +
596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    1;
606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char const *kEapPhase2MethodStrings[kEapPhase2MethodMax] = {
616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    "", "PAP", "MSCHAP", "MSCHAPV2", "GTC", "SIM", "AKA", "AKA'"};
626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char kEapPhase2AuthPrefix[] = "auth=";
636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char kEapPhase2AuthEapPrefix[] = "autheap=";
646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char kNetworkEapSimGsmAuthResponse[] = "GSM-AUTH";
656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char kNetworkEapSimUmtsAuthResponse[] = "UMTS-AUTH";
666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char kNetworkEapSimUmtsAutsResponse[] = "UMTS-AUTS";
676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char kNetworkEapSimGsmAuthFailure[] = "GSM-FAIL";
686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr char kNetworkEapSimUmtsAuthFailure[] = "UMTS-FAIL";
696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace
706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace android {
726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace hardware {
736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace wifi {
746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace supplicant {
756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace V1_1 {
766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace implementation {
776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piususing hidl_return_util::validateAndCall;
786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
796ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::StaNetwork(
806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    struct wpa_global *wpa_global, const char ifname[], int network_id)
816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    : wpa_global_(wpa_global),
826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius      ifname_(ifname),
836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius      network_id_(network_id),
846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius      is_valid_(true)
856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusvoid StaNetwork::invalidate() { is_valid_ = false; }
896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusbool StaNetwork::isValid()
906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return (is_valid_ && (retrieveNetworkPtr() != nullptr));
926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
946ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getId(getId_cb _hidl_cb)
956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getIdInternal, _hidl_cb);
996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1016ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getInterfaceName(getInterfaceName_cb _hidl_cb)
1026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getInterfaceNameInternal, _hidl_cb);
1066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1086ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getType(getType_cb _hidl_cb)
1096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getTypeInternal, _hidl_cb);
1136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1156ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::registerCallback(
1166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const sp<ISupplicantStaNetworkCallback> &callback,
1176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    registerCallback_cb _hidl_cb)
1186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::registerCallbackInternal, _hidl_cb, callback);
1226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1246ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setSsid(
1256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_vec<uint8_t> &ssid, setSsid_cb _hidl_cb)
1266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setSsidInternal, _hidl_cb, ssid);
1306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1326ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setBssid(
1336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_array<uint8_t, 6> &bssid, setBssid_cb _hidl_cb)
1346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setBssidInternal, _hidl_cb, bssid);
1386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1406ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setScanSsid(bool enable, setScanSsid_cb _hidl_cb)
1416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setScanSsidInternal, _hidl_cb, enable);
1456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1476ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setKeyMgmt(
1486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t key_mgmt_mask, setKeyMgmt_cb _hidl_cb)
1496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setKeyMgmtInternal, _hidl_cb, key_mgmt_mask);
1536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1556ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setProto(uint32_t proto_mask, setProto_cb _hidl_cb)
1566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setProtoInternal, _hidl_cb, proto_mask);
1606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1626ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setAuthAlg(
1636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t auth_alg_mask,
1646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    std::function<void(const SupplicantStatus &status)> _hidl_cb)
1656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setAuthAlgInternal, _hidl_cb, auth_alg_mask);
1696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1716ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setGroupCipher(
1726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t group_cipher_mask, setGroupCipher_cb _hidl_cb)
1736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setGroupCipherInternal, _hidl_cb, group_cipher_mask);
1776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1796ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setPairwiseCipher(
1806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t pairwise_cipher_mask, setPairwiseCipher_cb _hidl_cb)
1816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setPairwiseCipherInternal, _hidl_cb,
1856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    pairwise_cipher_mask);
1866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1886ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setPskPassphrase(
1896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &psk, setPskPassphrase_cb _hidl_cb)
1906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
1926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
1936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setPskPassphraseInternal, _hidl_cb, psk);
1946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
1956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1966ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setPsk(
1976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_array<uint8_t, 32> &psk, setPsk_cb _hidl_cb)
1986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
1996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setPskInternal, _hidl_cb, psk);
2026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2046ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setWepKey(
2056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t key_idx, const hidl_vec<uint8_t> &wep_key, setWepKey_cb _hidl_cb)
2066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setWepKeyInternal, _hidl_cb, key_idx, wep_key);
2106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2126ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setWepTxKeyIdx(
2136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t key_idx, setWepTxKeyIdx_cb _hidl_cb)
2146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setWepTxKeyIdxInternal, _hidl_cb, key_idx);
2186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2206ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setRequirePmf(bool enable, setRequirePmf_cb _hidl_cb)
2216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setRequirePmfInternal, _hidl_cb, enable);
2256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2276ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapMethod(
2286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    ISupplicantStaNetwork::EapMethod method, setEapMethod_cb _hidl_cb)
2296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapMethodInternal, _hidl_cb, method);
2336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2356ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapPhase2Method(
2366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    ISupplicantStaNetwork::EapPhase2Method method,
2376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    setEapPhase2Method_cb _hidl_cb)
2386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapPhase2MethodInternal, _hidl_cb, method);
2426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2446ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapIdentity(
2456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_vec<uint8_t> &identity, setEapIdentity_cb _hidl_cb)
2466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapIdentityInternal, _hidl_cb, identity);
2506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
25289da2fbba2216ed312512c8a2ea5e675d5157077pkanwarReturn<void> StaNetwork::setEapEncryptedImsiIdentity(
25389da2fbba2216ed312512c8a2ea5e675d5157077pkanwar    const EapSimEncryptedIdentity &identity, setEapEncryptedImsiIdentity_cb _hidl_cb)
25489da2fbba2216ed312512c8a2ea5e675d5157077pkanwar{
25589da2fbba2216ed312512c8a2ea5e675d5157077pkanwar	return validateAndCall(
25689da2fbba2216ed312512c8a2ea5e675d5157077pkanwar	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
25789da2fbba2216ed312512c8a2ea5e675d5157077pkanwar	    &StaNetwork::setEapEncryptedImsiIdentityInternal, _hidl_cb, identity);
25889da2fbba2216ed312512c8a2ea5e675d5157077pkanwar}
25989da2fbba2216ed312512c8a2ea5e675d5157077pkanwar
2606ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapAnonymousIdentity(
2616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_vec<uint8_t> &identity, setEapAnonymousIdentity_cb _hidl_cb)
2626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapAnonymousIdentityInternal, _hidl_cb, identity);
2666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2686ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapPassword(
2696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_vec<uint8_t> &password, setEapPassword_cb _hidl_cb)
2706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapPasswordInternal, _hidl_cb, password);
2746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2766ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapCACert(
2776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &path, setEapCACert_cb _hidl_cb)
2786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapCACertInternal, _hidl_cb, path);
2826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2846ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapCAPath(
2856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &path, setEapCAPath_cb _hidl_cb)
2866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapCAPathInternal, _hidl_cb, path);
2906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2926ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapClientCert(
2936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &path, setEapClientCert_cb _hidl_cb)
2946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
2956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
2966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
2976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapClientCertInternal, _hidl_cb, path);
2986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
2996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3006ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapPrivateKeyId(
3016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &id, setEapPrivateKeyId_cb _hidl_cb)
3026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapPrivateKeyIdInternal, _hidl_cb, id);
3066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3086ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapSubjectMatch(
3096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &match, setEapSubjectMatch_cb _hidl_cb)
3106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapSubjectMatchInternal, _hidl_cb, match);
3146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3166ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapAltSubjectMatch(
3176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &match, setEapAltSubjectMatch_cb _hidl_cb)
3186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapAltSubjectMatchInternal, _hidl_cb, match);
3226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3246ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapEngine(bool enable, setEapEngine_cb _hidl_cb)
3256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapEngineInternal, _hidl_cb, enable);
3296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3316ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapEngineID(
3326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &id, setEapEngineID_cb _hidl_cb)
3336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapEngineIDInternal, _hidl_cb, id);
3376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3396ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setEapDomainSuffixMatch(
3406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &match, setEapDomainSuffixMatch_cb _hidl_cb)
3416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setEapDomainSuffixMatchInternal, _hidl_cb, match);
3456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3476ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setProactiveKeyCaching(
3486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    bool enable, setProactiveKeyCaching_cb _hidl_cb)
3496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setProactiveKeyCachingInternal, _hidl_cb, enable);
3536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3556ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setIdStr(
3566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_string &id_str, setIdStr_cb _hidl_cb)
3576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setIdStrInternal, _hidl_cb, id_str);
3616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3636ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::setUpdateIdentifier(
3646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t id, setUpdateIdentifier_cb _hidl_cb)
3656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::setUpdateIdentifierInternal, _hidl_cb, id);
3696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3716ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getSsid(getSsid_cb _hidl_cb)
3726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getSsidInternal, _hidl_cb);
3766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3786ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getBssid(getBssid_cb _hidl_cb)
3796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getBssidInternal, _hidl_cb);
3836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3856ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getScanSsid(getScanSsid_cb _hidl_cb)
3866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getScanSsidInternal, _hidl_cb);
3906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3926ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getKeyMgmt(getKeyMgmt_cb _hidl_cb)
3936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
3946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
3956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
3966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getKeyMgmtInternal, _hidl_cb);
3976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
3986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
3996ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getProto(getProto_cb _hidl_cb)
4006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getProtoInternal, _hidl_cb);
4046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4066ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getAuthAlg(getAuthAlg_cb _hidl_cb)
4076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getAuthAlgInternal, _hidl_cb);
4116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4136ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getGroupCipher(getGroupCipher_cb _hidl_cb)
4146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getGroupCipherInternal, _hidl_cb);
4186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4206ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getPairwiseCipher(getPairwiseCipher_cb _hidl_cb)
4216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getPairwiseCipherInternal, _hidl_cb);
4256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4276ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getPskPassphrase(getPskPassphrase_cb _hidl_cb)
4286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getPskPassphraseInternal, _hidl_cb);
4326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4346ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getPsk(getPsk_cb _hidl_cb)
4356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getPskInternal, _hidl_cb);
4396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4416ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getWepKey(uint32_t key_idx, getWepKey_cb _hidl_cb)
4426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getWepKeyInternal, _hidl_cb, key_idx);
4466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4486ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getWepTxKeyIdx(getWepTxKeyIdx_cb _hidl_cb)
4496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getWepTxKeyIdxInternal, _hidl_cb);
4536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4556ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getRequirePmf(getRequirePmf_cb _hidl_cb)
4566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getRequirePmfInternal, _hidl_cb);
4606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4626ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapMethod(getEapMethod_cb _hidl_cb)
4636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapMethodInternal, _hidl_cb);
4676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4696ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapPhase2Method(getEapPhase2Method_cb _hidl_cb)
4706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapPhase2MethodInternal, _hidl_cb);
4746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4766ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapIdentity(getEapIdentity_cb _hidl_cb)
4776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapIdentityInternal, _hidl_cb);
4816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4836ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapAnonymousIdentity(
4846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    getEapAnonymousIdentity_cb _hidl_cb)
4856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapAnonymousIdentityInternal, _hidl_cb);
4896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4916ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapPassword(getEapPassword_cb _hidl_cb)
4926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
4936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
4946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
4956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapPasswordInternal, _hidl_cb);
4966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
4976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
4986ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapCACert(getEapCACert_cb _hidl_cb)
4996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapCACertInternal, _hidl_cb);
5036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5056ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapCAPath(getEapCAPath_cb _hidl_cb)
5066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapCAPathInternal, _hidl_cb);
5106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5126ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapClientCert(getEapClientCert_cb _hidl_cb)
5136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapClientCertInternal, _hidl_cb);
5176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5196ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapPrivateKeyId(getEapPrivateKeyId_cb _hidl_cb)
5206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapPrivateKeyIdInternal, _hidl_cb);
5246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5266ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapSubjectMatch(getEapSubjectMatch_cb _hidl_cb)
5276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapSubjectMatchInternal, _hidl_cb);
5316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5336ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapAltSubjectMatch(
5346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    getEapAltSubjectMatch_cb _hidl_cb)
5356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapAltSubjectMatchInternal, _hidl_cb);
5396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5416ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapEngine(getEapEngine_cb _hidl_cb)
5426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapEngineInternal, _hidl_cb);
5466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5486ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapEngineID(getEapEngineID_cb _hidl_cb)
5496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapEngineIDInternal, _hidl_cb);
5536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5556ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getEapDomainSuffixMatch(
5566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    getEapDomainSuffixMatch_cb _hidl_cb)
5576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getEapDomainSuffixMatchInternal, _hidl_cb);
5616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5636ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getIdStr(getIdStr_cb _hidl_cb)
5646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getIdStrInternal, _hidl_cb);
5686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5706ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::getWpsNfcConfigurationToken(
5716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    getWpsNfcConfigurationToken_cb _hidl_cb)
5726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::getWpsNfcConfigurationTokenInternal, _hidl_cb);
5766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5786ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::enable(bool no_connect, enable_cb _hidl_cb)
5796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::enableInternal, _hidl_cb, no_connect);
5836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5856ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::disable(disable_cb _hidl_cb)
5866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::disableInternal, _hidl_cb);
5906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5926ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::select(select_cb _hidl_cb)
5936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
5946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
5956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
5966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::selectInternal, _hidl_cb);
5976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
5986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
5996ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::sendNetworkEapSimGsmAuthResponse(
6006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_vec<ISupplicantStaNetwork::NetworkResponseEapSimGsmAuthParams>
6016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	&vec_params,
6026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    sendNetworkEapSimGsmAuthResponse_cb _hidl_cb)
6036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
6056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
6066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::sendNetworkEapSimGsmAuthResponseInternal, _hidl_cb,
6076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    vec_params);
6086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6106ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::sendNetworkEapSimGsmAuthFailure(
6116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    sendNetworkEapSimGsmAuthFailure_cb _hidl_cb)
6126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
6146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
6156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::sendNetworkEapSimGsmAuthFailureInternal, _hidl_cb);
6166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6186ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::sendNetworkEapSimUmtsAuthResponse(
6196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const ISupplicantStaNetwork::NetworkResponseEapSimUmtsAuthParams &params,
6206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    sendNetworkEapSimUmtsAuthResponse_cb _hidl_cb)
6216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
6236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
6246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::sendNetworkEapSimUmtsAuthResponseInternal, _hidl_cb,
6256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    params);
6266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6286ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::sendNetworkEapSimUmtsAutsResponse(
6296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_array<uint8_t, 14> &auts,
6306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    sendNetworkEapSimUmtsAutsResponse_cb _hidl_cb)
6316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
6336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
6346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::sendNetworkEapSimUmtsAutsResponseInternal, _hidl_cb,
6356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    auts);
6366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6386ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::sendNetworkEapSimUmtsAuthFailure(
6396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    sendNetworkEapSimUmtsAuthFailure_cb _hidl_cb)
6406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
6426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
6436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::sendNetworkEapSimUmtsAuthFailureInternal, _hidl_cb);
6446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6466ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusReturn<void> StaNetwork::sendNetworkEapIdentityResponse(
6476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const hidl_vec<uint8_t> &identity,
6486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    sendNetworkEapIdentityResponse_cb _hidl_cb)
6496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return validateAndCall(
6516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
6526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    &StaNetwork::sendNetworkEapIdentityResponseInternal, _hidl_cb,
6536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    identity);
6546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
65689da2fbba2216ed312512c8a2ea5e675d5157077pkanwarReturn<void> StaNetwork::sendNetworkEapIdentityResponse_1_1(
65789da2fbba2216ed312512c8a2ea5e675d5157077pkanwar    const EapSimIdentity &identity,
65889da2fbba2216ed312512c8a2ea5e675d5157077pkanwar    const EapSimEncryptedIdentity &encrypted_imsi_identity,
65989da2fbba2216ed312512c8a2ea5e675d5157077pkanwar    sendNetworkEapIdentityResponse_1_1_cb _hidl_cb)
66089da2fbba2216ed312512c8a2ea5e675d5157077pkanwar{
66189da2fbba2216ed312512c8a2ea5e675d5157077pkanwar	return validateAndCall(
66289da2fbba2216ed312512c8a2ea5e675d5157077pkanwar	    this, SupplicantStatusCode::FAILURE_NETWORK_INVALID,
66389da2fbba2216ed312512c8a2ea5e675d5157077pkanwar	    &StaNetwork::sendNetworkEapIdentityResponseInternal_1_1, _hidl_cb,
66489da2fbba2216ed312512c8a2ea5e675d5157077pkanwar	    identity, encrypted_imsi_identity);
66589da2fbba2216ed312512c8a2ea5e675d5157077pkanwar}
66689da2fbba2216ed312512c8a2ea5e675d5157077pkanwar
6676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, uint32_t> StaNetwork::getIdInternal()
6686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, network_id_};
6706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string> StaNetwork::getInterfaceNameInternal()
6736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, ifname_};
6756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, IfaceType> StaNetwork::getTypeInternal()
6786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, IfaceType::STA};
6806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6826ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::registerCallbackInternal(
6836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const sp<ISupplicantStaNetworkCallback> &callback)
6846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	HidlManager *hidl_manager = HidlManager::getInstance();
6866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!hidl_manager ||
6876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    hidl_manager->addStaNetworkCallbackHidlObject(
6886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		ifname_, network_id_, callback)) {
6896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
6906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
6916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
6926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
6936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
6946ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setSsidInternal(const std::vector<uint8_t> &ssid)
6956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
6966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
6976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (ssid.size() == 0 ||
6986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ssid.size() >
6996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		static_cast<uint32_t>(ISupplicantStaNetwork::ParamSizeLimits::
7006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius					  SSID_MAX_LEN_IN_BYTES)) {
7016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
7026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setByteArrayFieldAndResetState(
7046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		ssid.data(), ssid.size(), &(wpa_ssid->ssid),
7056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		&(wpa_ssid->ssid_len), "ssid")) {
7066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
7076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_ssid->passphrase) {
7096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_config_update_psk(wpa_ssid);
7106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
7126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
7136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
7146ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setBssidInternal(
7156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::array<uint8_t, 6> &bssid)
7166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
7176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
7186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	int prev_bssid_set = wpa_ssid->bssid_set;
7196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	u8 prev_bssid[ETH_ALEN];
7206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	os_memcpy(prev_bssid, wpa_ssid->bssid, ETH_ALEN);
7216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Zero'ed array is used to clear out the BSSID value.
7226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (os_memcmp(bssid.data(), kZeroBssid, ETH_ALEN) == 0) {
7236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->bssid_set = 0;
7246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_printf(MSG_MSGDUMP, "BSSID any");
7256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	} else {
7266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		os_memcpy(wpa_ssid->bssid, bssid.data(), ETH_ALEN);
7276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->bssid_set = 1;
7286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_hexdump(MSG_MSGDUMP, "BSSID", wpa_ssid->bssid, ETH_ALEN);
7296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
7316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if ((wpa_ssid->bssid_set != prev_bssid_set ||
7326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	     os_memcmp(wpa_ssid->bssid, prev_bssid, ETH_ALEN) != 0)) {
7336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpas_notify_network_bssid_set_changed(wpa_s, wpa_ssid);
7346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
7366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
7376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
7386ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setScanSsidInternal(bool enable)
7396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
7406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
7416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->scan_ssid = enable ? 1 : 0;
7426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
7436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
7446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
7456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
7466ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setKeyMgmtInternal(uint32_t key_mgmt_mask)
7476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
7486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
7496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (key_mgmt_mask & ~kAllowedKeyMgmtMask) {
7506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
7516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->key_mgmt = key_mgmt_mask;
7536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_printf(MSG_MSGDUMP, "key_mgmt: 0x%x", wpa_ssid->key_mgmt);
7546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
7556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
7566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
7576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
7586ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setProtoInternal(uint32_t proto_mask)
7596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
7606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
7616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (proto_mask & ~kAllowedProtoMask) {
7626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
7636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->proto = proto_mask;
7656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_printf(MSG_MSGDUMP, "proto: 0x%x", wpa_ssid->proto);
7666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
7676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
7686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
7696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
7706ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setAuthAlgInternal(uint32_t auth_alg_mask)
7716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
7726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
7736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (auth_alg_mask & ~kAllowedAuthAlgMask) {
7746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
7756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->auth_alg = auth_alg_mask;
7776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_printf(MSG_MSGDUMP, "auth_alg: 0x%x", wpa_ssid->auth_alg);
7786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
7796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
7806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
7816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
7826ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setGroupCipherInternal(uint32_t group_cipher_mask)
7836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
7846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
7856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (group_cipher_mask & ~kAllowedGroupCipherMask) {
7866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
7876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
7886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->group_cipher = group_cipher_mask;
7896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_printf(MSG_MSGDUMP, "group_cipher: 0x%x", wpa_ssid->group_cipher);
7906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
7916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
7926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
7936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
7946ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setPairwiseCipherInternal(
7956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t pairwise_cipher_mask)
7966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
7976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
7986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (pairwise_cipher_mask & ~kAllowedPairwisewCipherMask) {
7996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
8006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
8016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->pairwise_cipher = pairwise_cipher_mask;
8026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_printf(
8036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_MSGDUMP, "pairwise_cipher: 0x%x", wpa_ssid->pairwise_cipher);
8046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
8056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
8066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
8076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
8086ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setPskPassphraseInternal(const std::string &psk)
8096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
8106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
8116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (isPskPassphraseValid(psk)) {
8126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
8136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
8146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_ssid->passphrase &&
8156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    os_strlen(wpa_ssid->passphrase) == psk.size() &&
8166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    os_memcmp(wpa_ssid->passphrase, psk.c_str(), psk.size()) == 0) {
8176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::SUCCESS, ""};
8186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
8196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Flag to indicate if raw psk is calculated or not using
8206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// |wpa_config_update_psk|. Deferred if ssid not already set.
8216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->psk_set = 0;
8226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringKeyFieldAndResetState(
8236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		psk.c_str(), &(wpa_ssid->passphrase), "psk passphrase")) {
8246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
8256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
8266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_ssid->ssid_len) {
8276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_config_update_psk(wpa_ssid);
8286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
8296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
8306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
8316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
8326ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setPskInternal(const std::array<uint8_t, 32> &psk)
8336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
8346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
8356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	WPA_ASSERT(psk.size() == sizeof(wpa_ssid->psk));
8366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	str_clear_free(wpa_ssid->passphrase);
8376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->passphrase = nullptr;
8386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	os_memcpy(wpa_ssid->psk, psk.data(), sizeof(wpa_ssid->psk));
8396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->psk_set = 1;
8406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
8416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
8426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
8436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
8446ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setWepKeyInternal(
8456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t key_idx, const std::vector<uint8_t> &wep_key)
8466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
8476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
8486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (key_idx >=
8496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    static_cast<uint32_t>(
8506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		ISupplicantStaNetwork::ParamSizeLimits::WEP_KEYS_MAX_NUM)) {
8516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
8526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
8536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wep_key.size() !=
8546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		static_cast<uint32_t>(ISupplicantStaNetwork::ParamSizeLimits::
8556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius					  WEP40_KEY_LEN_IN_BYTES) &&
8566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    wep_key.size() !=
8576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		static_cast<uint32_t>(ISupplicantStaNetwork::ParamSizeLimits::
8586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius					  WEP104_KEY_LEN_IN_BYTES)) {
8596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
8606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
8616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	os_memcpy(wpa_ssid->wep_key[key_idx], wep_key.data(), wep_key.size());
8626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->wep_key_len[key_idx] = wep_key.size();
8636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::string msg_dump_title("wep_key" + std::to_string(key_idx));
8646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_key(
8656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_MSGDUMP, msg_dump_title.c_str(), wpa_ssid->wep_key[key_idx],
8666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    wpa_ssid->wep_key_len[key_idx]);
8676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
8686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
8696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
8706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
8716ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setWepTxKeyIdxInternal(uint32_t key_idx)
8726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
8736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
8746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (key_idx >=
8756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    static_cast<uint32_t>(
8766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		ISupplicantStaNetwork::ParamSizeLimits::WEP_KEYS_MAX_NUM)) {
8776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
8786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
8796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->wep_tx_keyidx = key_idx;
8806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
8816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
8826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
8836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
8846ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setRequirePmfInternal(bool enable)
8856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
8866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
8876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->ieee80211w =
8886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    enable ? MGMT_FRAME_PROTECTION_REQUIRED : NO_MGMT_FRAME_PROTECTION;
8896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
8906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
8916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
8926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
8936ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapMethodInternal(
8946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    ISupplicantStaNetwork::EapMethod method)
8956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
8966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	uint32_t eap_method_idx = static_cast<
8976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::underlying_type<ISupplicantStaNetwork::EapMethod>::type>(
8986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    method);
8996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (eap_method_idx >= kEapMethodMax) {
9006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
9016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
9036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
9046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	int retrieved_vendor, retrieved_method;
9056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	const char *method_str = kEapMethodStrings[eap_method_idx];
9066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// This string lookup is needed to check if the device supports the
9076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// corresponding EAP type.
9086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	retrieved_method = eap_peer_get_type(method_str, &retrieved_vendor);
9096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (retrieved_vendor == EAP_VENDOR_IETF &&
9106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    retrieved_method == EAP_TYPE_NONE) {
9116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
9126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_ssid->eap.eap_methods) {
9146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		os_free(wpa_ssid->eap.eap_methods);
9156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// wpa_supplicant can support setting multiple eap methods for each
9176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// network. But, this is not really used by Android. So, just adding
9186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// support for setting one EAP method for each network. The additional
9196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// |eap_method_type| member in the array is used to indicate the end
9206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// of list.
9216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->eap.eap_methods =
9226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    (eap_method_type *)os_malloc(sizeof(eap_method_type) * 2);
9236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.eap_methods) {
9246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
9256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->eap.eap_methods[0].vendor = retrieved_vendor;
9276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->eap.eap_methods[0].method = retrieved_method;
9286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->eap.eap_methods[1].vendor = EAP_VENDOR_IETF;
9296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->eap.eap_methods[1].method = EAP_TYPE_NONE;
9306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
9316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->leap = 0;
9326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->non_leap = 0;
9336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (retrieved_vendor == EAP_VENDOR_IETF &&
9346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    retrieved_method == EAP_TYPE_LEAP) {
9356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->leap++;
9366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	} else {
9376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->non_leap++;
9386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump(
9406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_MSGDUMP, "eap methods", (u8 *)wpa_ssid->eap.eap_methods,
9416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    sizeof(eap_method_type) * 2);
9426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
9436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
9446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
9456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
9466ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapPhase2MethodInternal(
9476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    ISupplicantStaNetwork::EapPhase2Method method)
9486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
9496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	uint32_t eap_phase2_method_idx = static_cast<
9506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::underlying_type<ISupplicantStaNetwork::EapPhase2Method>::type>(
9516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    method);
9526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (eap_phase2_method_idx >= kEapPhase2MethodMax) {
9536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_ARGS_INVALID, ""};
9546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
9566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
9576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// EAP method needs to be set for us to construct the eap
9586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// phase 2 method string.
9596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus status;
9606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	ISupplicantStaNetwork::EapMethod eap_method;
9616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::tie(status, eap_method) = getEapMethodInternal();
9626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (status.code != SupplicantStatusCode::SUCCESS) {
9636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN,
9646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius			"EAP method not set"};
9656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::string eap_phase2_str;
9676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (method == ISupplicantStaNetwork::EapPhase2Method::NONE) {
9686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		eap_phase2_str = "";
9696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	} else if (
9706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    eap_method == ISupplicantStaNetwork::EapMethod::TTLS &&
9716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    method == ISupplicantStaNetwork::EapPhase2Method::GTC) {
9726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		eap_phase2_str = kEapPhase2AuthEapPrefix;
9736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	} else {
9746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		eap_phase2_str = kEapPhase2AuthPrefix;
9756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	eap_phase2_str += kEapPhase2MethodStrings[eap_phase2_method_idx];
9776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
9786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		eap_phase2_str.c_str(), &(wpa_ssid->eap.phase2),
9796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		"eap phase2")) {
9806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
9816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
9826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
9836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
9846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
9856ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapIdentityInternal(
9866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::vector<uint8_t> &identity)
9876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
9886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
9896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setByteArrayFieldAndResetState(
9906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		identity.data(), identity.size(), &(wpa_ssid->eap.identity),
9916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		&(wpa_ssid->eap.identity_len), "eap identity")) {
99200a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		return { SupplicantStatusCode::FAILURE_UNKNOWN, ""};
99300a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	}
99400a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	// plain IMSI identity
99500a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	if (setByteArrayFieldAndResetState(
99600a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		identity.data(), identity.size(), &(wpa_ssid->eap.imsi_identity),
99700a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		&(wpa_ssid->eap.imsi_identity_len), "eap imsi identity")) {
99800a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		return { SupplicantStatusCode::FAILURE_UNKNOWN, ""};
9996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
10006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
10016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
10026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
100389da2fbba2216ed312512c8a2ea5e675d5157077pkanwarSupplicantStatus StaNetwork::setEapEncryptedImsiIdentityInternal(
100489da2fbba2216ed312512c8a2ea5e675d5157077pkanwar    const std::vector<uint8_t> &identity)
100589da2fbba2216ed312512c8a2ea5e675d5157077pkanwar{
100600a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
100700a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	// encrypted IMSI identity
100800a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	if (setByteArrayFieldAndResetState(
100900a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		identity.data(), identity.size(), &(wpa_ssid->eap.identity),
101000a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		&(wpa_ssid->eap.identity_len), "eap encrypted imsi identity")) {
101100a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
101200a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	}
101300a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	return {SupplicantStatusCode::SUCCESS, ""};
101489da2fbba2216ed312512c8a2ea5e675d5157077pkanwar}
101589da2fbba2216ed312512c8a2ea5e675d5157077pkanwar
10166ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapAnonymousIdentityInternal(
10176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::vector<uint8_t> &identity)
10186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
10196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
10206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setByteArrayFieldAndResetState(
10216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		identity.data(), identity.size(),
10226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		&(wpa_ssid->eap.anonymous_identity),
10236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		&(wpa_ssid->eap.anonymous_identity_len),
10246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		"eap anonymous_identity")) {
10256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
10266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
10276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
10286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
10296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
10306ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapPasswordInternal(
10316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::vector<uint8_t> &password)
10326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
10336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
10346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setByteArrayKeyFieldAndResetState(
10356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		password.data(), password.size(), &(wpa_ssid->eap.password),
10366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		&(wpa_ssid->eap.password_len), "eap password")) {
10376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
10386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
10396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->eap.flags &= ~EAP_CONFIG_FLAGS_PASSWORD_NTHASH;
10406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->eap.flags &= ~EAP_CONFIG_FLAGS_EXT_PASSWORD;
10416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
10426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
10436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
10446ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapCACertInternal(const std::string &path)
10456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
10466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
10476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
10486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		path.c_str(), &(wpa_ssid->eap.ca_cert), "eap ca_cert")) {
10496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
10506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
10516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
10526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
10536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
10546ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapCAPathInternal(const std::string &path)
10556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
10566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
10576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
10586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		path.c_str(), &(wpa_ssid->eap.ca_path), "eap ca_path")) {
10596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
10606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
10616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
10626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
10636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
10646ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapClientCertInternal(const std::string &path)
10656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
10666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
10676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
10686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		path.c_str(), &(wpa_ssid->eap.client_cert),
10696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		"eap client_cert")) {
10706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
10716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
10726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
10736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
10746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
10756ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapPrivateKeyIdInternal(const std::string &id)
10766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
10776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
10786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
10796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		id.c_str(), &(wpa_ssid->eap.key_id), "eap key_id")) {
10806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
10816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
10826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
10836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
10846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
10856ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapSubjectMatchInternal(
10866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::string &match)
10876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
10886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
10896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
10906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		match.c_str(), &(wpa_ssid->eap.subject_match),
10916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		"eap subject_match")) {
10926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
10936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
10946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
10956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
10966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
10976ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapAltSubjectMatchInternal(
10986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::string &match)
10996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
11026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		match.c_str(), &(wpa_ssid->eap.altsubject_match),
11036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		"eap altsubject_match")) {
11046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
11056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
11066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
11076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11096ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapEngineInternal(bool enable)
11106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->eap.engine = enable ? 1 : 0;
11136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
11146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11166ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapEngineIDInternal(const std::string &id)
11176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
11206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		id.c_str(), &(wpa_ssid->eap.engine_id), "eap engine_id")) {
11216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
11226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
11236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
11246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11266ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setEapDomainSuffixMatchInternal(
11276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::string &match)
11286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
11316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		match.c_str(), &(wpa_ssid->eap.domain_suffix_match),
11326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		"eap domain_suffix_match")) {
11336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
11346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
11356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
11366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11386ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setProactiveKeyCachingInternal(bool enable)
11396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->proactive_key_caching = enable ? 1 : 0;
11426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
11436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
11446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11466ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setIdStrInternal(const std::string &id_str)
11476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (setStringFieldAndResetState(
11506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		id_str.c_str(), &(wpa_ssid->id_str), "id_str")) {
11516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
11526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
11536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
11546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11566ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::setUpdateIdentifierInternal(uint32_t id)
11576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_ssid->update_identifier = id;
11606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_printf(
11616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_MSGDUMP, "update_identifier: %d", wpa_ssid->update_identifier);
11626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
11636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
11646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::vector<uint8_t>> StaNetwork::getSsidInternal()
11676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::vector<uint8_t> ssid;
11706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	ssid.assign(wpa_ssid->ssid, wpa_ssid->ssid + wpa_ssid->ssid_len);
11716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, std::move(ssid)};
11726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::array<uint8_t, 6>>
11756ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getBssidInternal()
11766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::array<uint8_t, 6> bssid{};
11796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	os_memcpy(bssid.data(), kZeroBssid, ETH_ALEN);
11806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_ssid->bssid_set) {
11816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		os_memcpy(bssid.data(), wpa_ssid->bssid, ETH_ALEN);
11826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
11836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, std::move(bssid)};
11846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, bool> StaNetwork::getScanSsidInternal()
11876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
11906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		(wpa_ssid->scan_ssid == 1)};
11916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
11936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, uint32_t> StaNetwork::getKeyMgmtInternal()
11946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
11956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
11966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
11976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->key_mgmt & kAllowedKeyMgmtMask};
11986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
11996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, uint32_t> StaNetwork::getProtoInternal()
12016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
12046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->proto & kAllowedProtoMask};
12056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, uint32_t> StaNetwork::getAuthAlgInternal()
12086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
12116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->auth_alg & kAllowedAuthAlgMask};
12126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, uint32_t> StaNetwork::getGroupCipherInternal()
12156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
12186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->group_cipher & kAllowedGroupCipherMask};
12196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, uint32_t> StaNetwork::getPairwiseCipherInternal()
12226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
12256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->pairwise_cipher & kAllowedPairwisewCipherMask};
12266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string> StaNetwork::getPskPassphraseInternal()
12296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->passphrase) {
12326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
12336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
12346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, wpa_ssid->passphrase};
12356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::array<uint8_t, 32>>
12386ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getPskInternal()
12396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	WPA_ASSERT(psk.size() == sizeof(wpa_ssid->psk));
12426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->psk_set) {
12436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
12446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
12456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::array<uint8_t, 32> psk;
12466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	os_memcpy(psk.data(), wpa_ssid->psk, psk.size());
12476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, psk};
12486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::vector<uint8_t>> StaNetwork::getWepKeyInternal(
12516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    uint32_t key_idx)
12526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::vector<uint8_t> wep_key;
12546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (key_idx >=
12566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    static_cast<uint32_t>(
12576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		ISupplicantStaNetwork::ParamSizeLimits::WEP_KEYS_MAX_NUM)) {
12586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_ARGS_INVALID, ""},
12596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius			wep_key};
12606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
12616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wep_key.assign(
12626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    wpa_ssid->wep_key[key_idx],
12636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    wpa_ssid->wep_key[key_idx] + wpa_ssid->wep_key_len[key_idx]);
12646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, std::move(wep_key)};
12656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, uint32_t> StaNetwork::getWepTxKeyIdxInternal()
12686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, wpa_ssid->wep_tx_keyidx};
12716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, bool> StaNetwork::getRequirePmfInternal()
12746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
12776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		(wpa_ssid->ieee80211w == MGMT_FRAME_PROTECTION_REQUIRED)};
12786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
12796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
12806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, ISupplicantStaNetwork::EapMethod>
12816ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapMethodInternal()
12826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
12836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
12846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.eap_methods) {
12856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
12866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
12876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// wpa_supplicant can support setting multiple eap methods for each
12886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// network. But, this is not really used by Android. So, just reading
12896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// the first EAP method for each network.
12906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	const std::string eap_method_str = eap_get_name(
12916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    wpa_ssid->eap.eap_methods[0].vendor,
12926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    static_cast<EapType>(wpa_ssid->eap.eap_methods[0].method));
12936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	size_t eap_method_idx =
12946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::find(
12956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		std::begin(kEapMethodStrings), std::end(kEapMethodStrings),
12966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		eap_method_str) -
12976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::begin(kEapMethodStrings);
12986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (eap_method_idx >= kEapMethodMax) {
12996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
13006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
13026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		static_cast<ISupplicantStaNetwork::EapMethod>(eap_method_idx)};
13036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
13046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
13056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, ISupplicantStaNetwork::EapPhase2Method>
13066ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapPhase2MethodInternal()
13076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
13086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
13096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.phase2) {
13106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
13116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	const std::string eap_phase2_method_str_with_prefix =
13136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    wpa_ssid->eap.phase2;
13146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::string eap_phase2_method_str;
13156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Strip out the phase 2 method prefix before doing a reverse lookup
13166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// of phase 2 string to the Eap Phase 2 type.
13176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (eap_phase2_method_str_with_prefix.find(kEapPhase2AuthPrefix) == 0) {
13186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		eap_phase2_method_str =
13196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    eap_phase2_method_str_with_prefix.substr(
13206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius			strlen(kEapPhase2AuthPrefix),
13216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius			eap_phase2_method_str_with_prefix.size());
13226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	} else if (
13236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    eap_phase2_method_str_with_prefix.find(kEapPhase2AuthEapPrefix) ==
13246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    0) {
13256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		eap_phase2_method_str =
13266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    eap_phase2_method_str_with_prefix.substr(
13276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius			strlen(kEapPhase2AuthEapPrefix),
13286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius			eap_phase2_method_str_with_prefix.size());
13296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	size_t eap_phase2_method_idx =
13316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::find(
13326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		std::begin(kEapPhase2MethodStrings),
13336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		std::end(kEapPhase2MethodStrings), eap_phase2_method_str) -
13346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::begin(kEapPhase2MethodStrings);
13356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (eap_phase2_method_idx >= kEapPhase2MethodMax) {
13366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
13376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
13396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		static_cast<ISupplicantStaNetwork::EapPhase2Method>(
13406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    eap_phase2_method_idx)};
13416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
13426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
13436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::vector<uint8_t>>
13446ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapIdentityInternal()
13456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
13466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
13476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.identity) {
13486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
13496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
13516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		std::vector<uint8_t>(
13526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    wpa_ssid->eap.identity,
13536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    wpa_ssid->eap.identity + wpa_ssid->eap.identity_len)};
13546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
13556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
13566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::vector<uint8_t>>
13576ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapAnonymousIdentityInternal()
13586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
13596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
13606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.anonymous_identity) {
13616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
13626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
13646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		std::vector<uint8_t>(
13656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    wpa_ssid->eap.anonymous_identity,
13666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    wpa_ssid->eap.anonymous_identity +
13676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius			wpa_ssid->eap.anonymous_identity_len)};
13686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
13696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
13706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::vector<uint8_t>>
13716ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapPasswordInternal()
13726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
13736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
13746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.password) {
13756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
13766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
13786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		std::vector<uint8_t>(
13796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    wpa_ssid->eap.password,
13806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    wpa_ssid->eap.password + wpa_ssid->eap.password_len)};
13816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
13826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
13836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string> StaNetwork::getEapCACertInternal()
13846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
13856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
13866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.ca_cert) {
13876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
13886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
13906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		reinterpret_cast<char *>(wpa_ssid->eap.ca_cert)};
13916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
13926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
13936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string> StaNetwork::getEapCAPathInternal()
13946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
13956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
13966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.ca_path) {
13976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
13986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
13996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
14006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		reinterpret_cast<char *>(wpa_ssid->eap.ca_path)};
14016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string> StaNetwork::getEapClientCertInternal()
14046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.client_cert) {
14076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
14086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
14096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
14106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		reinterpret_cast<char *>(wpa_ssid->eap.client_cert)};
14116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string>
14146ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapPrivateKeyIdInternal()
14156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.key_id) {
14186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
14196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
14206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, wpa_ssid->eap.key_id};
14216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string>
14246ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapSubjectMatchInternal()
14256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.subject_match) {
14286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
14296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
14306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
14316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		reinterpret_cast<char *>(wpa_ssid->eap.subject_match)};
14326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string>
14356ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapAltSubjectMatchInternal()
14366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.altsubject_match) {
14396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
14406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
14416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
14426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		reinterpret_cast<char *>(wpa_ssid->eap.altsubject_match)};
14436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, bool> StaNetwork::getEapEngineInternal()
14466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, wpa_ssid->eap.engine == 1};
14496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string> StaNetwork::getEapEngineIDInternal()
14526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.engine_id) {
14556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
14566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
14576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, {wpa_ssid->eap.engine_id}};
14586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string>
14616ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getEapDomainSuffixMatchInternal()
14626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->eap.domain_suffix_match) {
14656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
14666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
14676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
14686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		{wpa_ssid->eap.domain_suffix_match}};
14696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::string> StaNetwork::getIdStrInternal()
14726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_ssid->id_str) {
14756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
14766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
14776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""}, {wpa_ssid->id_str}};
14786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstd::pair<SupplicantStatus, std::vector<uint8_t>>
14816ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusStaNetwork::getWpsNfcConfigurationTokenInternal()
14826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
14846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	auto token_buf = misc_utils::createWpaBufUniquePtr(
14866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    wpas_wps_network_config_token(wpa_s, 0, wpa_ssid));
14876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!token_buf) {
14886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, {}};
14896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
14906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {{SupplicantStatusCode::SUCCESS, ""},
14916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		misc_utils::convertWpaBufToVector(token_buf.get())};
14926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
14936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
14946ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::enableInternal(bool no_connect)
14956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
14966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
14976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_ssid->disabled == 2) {
14986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
14996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
15006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
15016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (no_connect) {
15026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_ssid->disabled = 0;
15036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	} else {
15046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_s->scan_min_time.sec = 0;
15056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_s->scan_min_time.usec = 0;
15066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_supplicant_enable_network(wpa_s, wpa_ssid);
15076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
15086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
15096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
15106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
15116ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::disableInternal()
15126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
15136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
15146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_ssid->disabled == 2) {
15156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
15166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
15176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
15186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_supplicant_disable_network(wpa_s, wpa_ssid);
15196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
15206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
15216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
15226ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::selectInternal()
15236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
15246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
15256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_ssid->disabled == 2) {
15266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
15276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
15286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
15296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_s->scan_min_time.sec = 0;
15306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_s->scan_min_time.usec = 0;
153120ba891e22aced98b4a6bb3af16b2ea5f592f633Jong Wook Kim	// Make sure that the supplicant is updated to the latest
153220ba891e22aced98b4a6bb3af16b2ea5f592f633Jong Wook Kim	// MAC address, which might have changed due to MAC randomization.
153320ba891e22aced98b4a6bb3af16b2ea5f592f633Jong Wook Kim	wpa_supplicant_update_mac_addr(wpa_s);
15346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_supplicant_select_network(wpa_s, wpa_ssid);
15356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
15366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
15376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
15386ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::sendNetworkEapSimGsmAuthResponseInternal(
15396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::vector<ISupplicantStaNetwork::NetworkResponseEapSimGsmAuthParams>
15406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	&vec_params)
15416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
15426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
15436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Convert the incoming parameters to a string to pass to
15446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// wpa_supplicant.
15456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::string ctrl_rsp_param = std::string(kNetworkEapSimGsmAuthResponse);
15466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	for (const auto &params : vec_params) {
15476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		uint32_t kc_hex_len = params.kc.size() * 2 + 1;
15486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		std::vector<char> kc_hex(kc_hex_len);
15496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		uint32_t sres_hex_len = params.sres.size() * 2 + 1;
15506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		std::vector<char> sres_hex(sres_hex_len);
15516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_snprintf_hex(
15526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    kc_hex.data(), kc_hex.size(), params.kc.data(),
15536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    params.kc.size());
15546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		wpa_snprintf_hex(
15556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    sres_hex.data(), sres_hex.size(), params.sres.data(),
15566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		    params.sres.size());
15576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		ctrl_rsp_param += ":" + std::string(kc_hex.data()) + ":" +
15586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius				  std::string(sres_hex.data());
15596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
15606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_SIM;
15616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
15626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_supplicant_ctrl_rsp_handle(
1563eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		wpa_s, wpa_ssid, rtype, ctrl_rsp_param.c_str(),
1564eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		ctrl_rsp_param.size())) {
15656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
15666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
15676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	eapol_sm_notify_ctrl_response(wpa_s->eapol);
15686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_ascii_key(
15696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_DEBUG, "network sim gsm auth response param",
15706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    (const u8 *)ctrl_rsp_param.c_str(), ctrl_rsp_param.size());
15716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
15726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
15736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
15746ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::sendNetworkEapSimGsmAuthFailureInternal()
15756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
15766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
15776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
15786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_SIM;
15796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_supplicant_ctrl_rsp_handle(
1580eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		wpa_s, wpa_ssid, rtype, kNetworkEapSimGsmAuthFailure,
1581eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		strlen(kNetworkEapSimGsmAuthFailure))) {
15826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
15836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
15846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	eapol_sm_notify_ctrl_response(wpa_s->eapol);
15856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
15866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
15876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
15886ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::sendNetworkEapSimUmtsAuthResponseInternal(
15896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const ISupplicantStaNetwork::NetworkResponseEapSimUmtsAuthParams &params)
15906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
15916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
15926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Convert the incoming parameters to a string to pass to
15936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// wpa_supplicant.
15946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	uint32_t ik_hex_len = params.ik.size() * 2 + 1;
15956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::vector<char> ik_hex(ik_hex_len);
15966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	uint32_t ck_hex_len = params.ck.size() * 2 + 1;
15976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::vector<char> ck_hex(ck_hex_len);
15986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	uint32_t res_hex_len = params.res.size() * 2 + 1;
15996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::vector<char> res_hex(res_hex_len);
16006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_snprintf_hex(
16016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ik_hex.data(), ik_hex.size(), params.ik.data(), params.ik.size());
16026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_snprintf_hex(
16036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ck_hex.data(), ck_hex.size(), params.ck.data(), params.ck.size());
16046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_snprintf_hex(
16056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    res_hex.data(), res_hex.size(), params.res.data(),
16066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    params.res.size());
16076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::string ctrl_rsp_param =
16086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::string(kNetworkEapSimUmtsAuthResponse) + ":" +
16096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::string(ik_hex.data()) + ":" + std::string(ck_hex.data()) +
16106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ":" + std::string(res_hex.data());
16116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_SIM;
16126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
16136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_supplicant_ctrl_rsp_handle(
1614eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		wpa_s, wpa_ssid, rtype, ctrl_rsp_param.c_str(),
1615eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		ctrl_rsp_param.size())) {
16166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
16176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
16186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	eapol_sm_notify_ctrl_response(wpa_s->eapol);
16196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_ascii_key(
16206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_DEBUG, "network sim umts auth response param",
16216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    (const u8 *)ctrl_rsp_param.c_str(), ctrl_rsp_param.size());
16226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
16236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
16246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
16256ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::sendNetworkEapSimUmtsAutsResponseInternal(
16266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::array<uint8_t, 14> &auts)
16276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
16286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
16296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	uint32_t auts_hex_len = auts.size() * 2 + 1;
16306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::vector<char> auts_hex(auts_hex_len);
16316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_snprintf_hex(
16326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    auts_hex.data(), auts_hex.size(), auts.data(), auts.size());
16336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::string ctrl_rsp_param =
16346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::string(kNetworkEapSimUmtsAutsResponse) + ":" +
16356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    std::string(auts_hex.data());
16366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_SIM;
16376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
16386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_supplicant_ctrl_rsp_handle(
1639eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		wpa_s, wpa_ssid, rtype, ctrl_rsp_param.c_str(),
1640eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		ctrl_rsp_param.size())) {
16416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
16426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
16436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	eapol_sm_notify_ctrl_response(wpa_s->eapol);
16446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_ascii_key(
16456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_DEBUG, "network sim umts auts response param",
16466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    (const u8 *)ctrl_rsp_param.c_str(), ctrl_rsp_param.size());
16476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
16486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
16496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
16506ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::sendNetworkEapSimUmtsAuthFailureInternal()
16516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
16526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
16536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
16546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_SIM;
16556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_supplicant_ctrl_rsp_handle(
1656eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		wpa_s, wpa_ssid, rtype, kNetworkEapSimUmtsAuthFailure,
1657eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		strlen(kNetworkEapSimUmtsAuthFailure))) {
16586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
16596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
16606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	eapol_sm_notify_ctrl_response(wpa_s->eapol);
16616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
16626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
16636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
16646ca7b54de22e93958b79bae0a4428107e08cb778Roshan PiusSupplicantStatus StaNetwork::sendNetworkEapIdentityResponseInternal(
16656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const std::vector<uint8_t> &identity)
16666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
16676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
16686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::string ctrl_rsp_param(identity.begin(), identity.end());
16696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_EAP_IDENTITY;
16706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
16716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_supplicant_ctrl_rsp_handle(
1672eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		wpa_s, wpa_ssid, rtype, ctrl_rsp_param.c_str(),
1673eb9203eb4fce4b311977f47e0bb0f9ae27a90d3apkanwar		ctrl_rsp_param.size())) {
16746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
16756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
16766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	eapol_sm_notify_ctrl_response(wpa_s->eapol);
16776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_ascii_key(
16786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_DEBUG, "network identity response param",
16796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    (const u8 *)ctrl_rsp_param.c_str(), ctrl_rsp_param.size());
16806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return {SupplicantStatusCode::SUCCESS, ""};
168189da2fbba2216ed312512c8a2ea5e675d5157077pkanwar}
168289da2fbba2216ed312512c8a2ea5e675d5157077pkanwar
168389da2fbba2216ed312512c8a2ea5e675d5157077pkanwarSupplicantStatus StaNetwork::sendNetworkEapIdentityResponseInternal_1_1(
168489da2fbba2216ed312512c8a2ea5e675d5157077pkanwar    const std::vector<uint8_t> &identity, const std::vector<uint8_t> &encrypted_imsi_identity)
168589da2fbba2216ed312512c8a2ea5e675d5157077pkanwar{
168600a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
168700a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	// format: plain identity + ":" + encrypted identity(encrypted_imsi_identity)
168800a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	std::string ctrl_rsp_param =
168900a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		std::string(identity.begin(), identity.end()) + ":" +
169000a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		std::string(encrypted_imsi_identity.begin(), encrypted_imsi_identity.end());
169100a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_EAP_IDENTITY;
169200a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
169300a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	if (wpa_supplicant_ctrl_rsp_handle(
169400a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		wpa_s, wpa_ssid, rtype, ctrl_rsp_param.c_str(),
169500a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		ctrl_rsp_param.size())) {
169600a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
169700a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	}
169800a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	eapol_sm_notify_ctrl_response(wpa_s->eapol);
169900a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	wpa_hexdump_ascii_key(
170000a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	    MSG_DEBUG, "network identity response param",
170100a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	    (const u8 *)ctrl_rsp_param.c_str(), ctrl_rsp_param.size());
170200a7b21c7b2af9b19a0b6173e0de92197d537fecEcco Park	return {SupplicantStatusCode::SUCCESS, ""};
17036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
17046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
17056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
17066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Retrieve the underlying |wpa_ssid| struct pointer for
17076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * this network.
17086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * If the underlying network is removed or the interface
17096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * this network belong to
17106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * is removed, all RPC method calls on this object will
17116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * return failure.
17126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
17136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstruct wpa_ssid *StaNetwork::retrieveNetworkPtr()
17146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
17156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_supplicant *wpa_s = retrieveIfacePtr();
17166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!wpa_s)
17176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return nullptr;
17186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return wpa_config_get_network(wpa_s->conf, network_id_);
17196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
17206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
17216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
17226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Retrieve the underlying |wpa_supplicant| struct
17236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * pointer for
17246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * this network.
17256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
17266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusstruct wpa_supplicant *StaNetwork::retrieveIfacePtr()
17276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
17286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return wpa_supplicant_get_iface(wpa_global_, ifname_.c_str());
17296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
17306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
17316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
17326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Check if the provided psk passhrase is valid or not.
17336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius *
17346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Returns 0 if valid, 1 otherwise.
17356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
17366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusint StaNetwork::isPskPassphraseValid(const std::string &psk)
17376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
17386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (psk.size() <
17396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		static_cast<uint32_t>(ISupplicantStaNetwork::ParamSizeLimits::
17406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius					  PSK_PASSPHRASE_MIN_LEN_IN_BYTES) ||
17416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    psk.size() >
17426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		static_cast<uint32_t>(ISupplicantStaNetwork::ParamSizeLimits::
17436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius					  PSK_PASSPHRASE_MAX_LEN_IN_BYTES)) {
17446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return 1;
17456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
17466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (has_ctrl_char((u8 *)psk.c_str(), psk.size())) {
17476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return 1;
17486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
17496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return 0;
17506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
17516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
17526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
17536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Reset internal wpa_supplicant state machine state
17546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * after params update (except
17556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * bssid).
17566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
17576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusvoid StaNetwork::resetInternalStateAfterParamsUpdate()
17586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
17596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
17606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
17616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
17626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_sm_pmksa_cache_flush(wpa_s->wpa, wpa_ssid);
17636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
17646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (wpa_s->current_ssid == wpa_ssid || wpa_s->current_ssid == NULL) {
17656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		/*
17666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		 * Invalidate the EAP session cache if
17676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		 * anything in the
17686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		 * current or previously used
17696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		 * configuration changes.
17706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		 */
17716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		eapol_sm_invalidate_cached_session(wpa_s->eapol);
17726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
17736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
17746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
17756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
17766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Helper function to set value in a string field in |wpa_ssid| structue
17776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * instance for this network.
17786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * This function frees any existing data in these fields.
17796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
17806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusint StaNetwork::setStringFieldAndResetState(
17816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const char *value, uint8_t **to_update_field, const char *hexdump_prefix)
17826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
17836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return setStringFieldAndResetState(
17846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    value, (char **)to_update_field, hexdump_prefix);
17856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
17866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
17876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
17886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Helper function to set value in a string field in |wpa_ssid| structue
17896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * instance for this network.
17906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * This function frees any existing data in these fields.
17916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
17926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusint StaNetwork::setStringFieldAndResetState(
17936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const char *value, char **to_update_field, const char *hexdump_prefix)
17946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
17956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	int value_len = strlen(value);
17966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (*to_update_field) {
17976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		os_free(*to_update_field);
17986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
17996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	*to_update_field = dup_binstr(value, value_len);
18006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!(*to_update_field)) {
18016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return 1;
18026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
18036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_ascii(
18046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_MSGDUMP, hexdump_prefix, *to_update_field, value_len);
18056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
18066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return 0;
18076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
18086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
18096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
18106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Helper function to set value in a string key field in |wpa_ssid| structue
18116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * instance for this network.
18126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * This function frees any existing data in these fields.
18136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
18146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusint StaNetwork::setStringKeyFieldAndResetState(
18156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const char *value, char **to_update_field, const char *hexdump_prefix)
18166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
18176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	int value_len = strlen(value);
18186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (*to_update_field) {
18196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		str_clear_free(*to_update_field);
18206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
18216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	*to_update_field = dup_binstr(value, value_len);
18226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!(*to_update_field)) {
18236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return 1;
18246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
18256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_ascii_key(
18266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_MSGDUMP, hexdump_prefix, *to_update_field, value_len);
18276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
18286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return 0;
18296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
18306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
18316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
18326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Helper function to set value in a string field with a corresponding length
18336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * field in |wpa_ssid| structue instance for this network.
18346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * This function frees any existing data in these fields.
18356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
18366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusint StaNetwork::setByteArrayFieldAndResetState(
18376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const uint8_t *value, const size_t value_len, uint8_t **to_update_field,
18386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    size_t *to_update_field_len, const char *hexdump_prefix)
18396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
18406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (*to_update_field) {
18416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		os_free(*to_update_field);
18426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
18436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	*to_update_field = (uint8_t *)os_malloc(value_len);
18446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!(*to_update_field)) {
18456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return 1;
18466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
18476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	os_memcpy(*to_update_field, value, value_len);
18486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	*to_update_field_len = value_len;
18496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
18506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_ascii(
18516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_MSGDUMP, hexdump_prefix, *to_update_field,
18526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    *to_update_field_len);
18536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
18546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return 0;
18556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
18566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
18576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
18586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Helper function to set value in a string key field with a corresponding
18596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * length field in |wpa_ssid| structue instance for this network.
18606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * This function frees any existing data in these fields.
18616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
18626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusint StaNetwork::setByteArrayKeyFieldAndResetState(
18636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    const uint8_t *value, const size_t value_len, uint8_t **to_update_field,
18646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius    size_t *to_update_field_len, const char *hexdump_prefix)
18656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
18666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (*to_update_field) {
18676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		bin_clear_free(*to_update_field, *to_update_field_len);
18686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
18696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	*to_update_field = (uint8_t *)os_malloc(value_len);
18706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	if (!(*to_update_field)) {
18716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		return 1;
18726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	}
18736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	os_memcpy(*to_update_field, value, value_len);
18746ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	*to_update_field_len = value_len;
18756ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
18766ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	wpa_hexdump_ascii_key(
18776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    MSG_MSGDUMP, hexdump_prefix, *to_update_field,
18786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    *to_update_field_len);
18796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	resetInternalStateAfterParamsUpdate();
18806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	return 0;
18816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
18826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
18836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace implementation
18846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace V1_1
18856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace wifi
18866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace supplicant
18876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace hardware
18886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace android
1889