diff --git a/common/native/src/plugin_utils/message_parcel_utils.cpp b/common/native/src/plugin_utils/message_parcel_utils.cpp index 7df81782cd621603ed487daf91462a54c632847f..2ac16532e0449566eb441b1aa9c24aedc1b0e835 100644 --- a/common/native/src/plugin_utils/message_parcel_utils.cpp +++ b/common/native/src/plugin_utils/message_parcel_utils.cpp @@ -33,7 +33,8 @@ void MessageParcelUtils::WriteWifiDeviceConfig(Wifi::WifiDeviceConfig &config, M data.WriteInt32(config.level); data.WriteBool(config.isPasspoint); data.WriteBool(config.isEphemeral); - data.WriteString(config.preSharedKey); + data.WriteCString(config.preSharedKey.data()); + config.preSharedKey.clear(); data.WriteString(config.keyMgmt); for (int i = 0; i < WEPKEYS_SIZE; i++) { data.WriteString(config.wepKeys[i]); @@ -52,7 +53,8 @@ void MessageParcelUtils::WriteWifiDeviceConfig(Wifi::WifiDeviceConfig &config, M data.WriteString(config.wifiIpConfig.staticIpAddress.domains); data.WriteString(config.wifiEapConfig.eap); data.WriteString(config.wifiEapConfig.identity); - data.WriteString(config.wifiEapConfig.password); + data.WriteCString(config.wifiEapConfig.password.data()); + config.wifiEapConfig.password.clear(); data.WriteString(config.wifiEapConfig.clientCert); data.WriteString(config.wifiEapConfig.privateKey); data.WriteUInt8Vector(config.wifiEapConfig.certEntry); @@ -91,7 +93,8 @@ void MessageParcelUtils::ReadWifiDeviceConfig(MessageParcel &data, Wifi::WifiDev config.level = data.ReadInt32(); config.isPasspoint = data.ReadBool(); config.isEphemeral = data.ReadBool(); - config.preSharedKey = data.ReadString(); + const char* tmpData = data.ReadCString(); + config.preSharedKey = OHOS::Wifi::SecureData(tmpData == nullptr ? "" : tmpData); config.keyMgmt = data.ReadString(); for (int i = 0; i < WEPKEYS_SIZE; i++) { config.wepKeys[i] = data.ReadString(); @@ -110,7 +113,8 @@ void MessageParcelUtils::ReadWifiDeviceConfig(MessageParcel &data, Wifi::WifiDev config.wifiIpConfig.staticIpAddress.domains = data.ReadString(); config.wifiEapConfig.eap = data.ReadString(); config.wifiEapConfig.identity = data.ReadString(); - config.wifiEapConfig.password = data.ReadString(); + tmpData = data.ReadCString(); + config.wifiEapConfig.password = OHOS::Wifi::SecureData(tmpData == nullptr ? "" : tmpData); config.wifiEapConfig.clientCert = data.ReadString(); config.wifiEapConfig.privateKey = data.ReadString(); data.ReadUInt8Vector(&config.wifiEapConfig.certEntry); diff --git a/interfaces/kits/wifi_manager/src/wifi_manager_addon.cpp b/interfaces/kits/wifi_manager/src/wifi_manager_addon.cpp index c09547e2f1aca474f73a4583a55edbb28b5d3d7c..a5d1e9055ffdf3cdc502e3462c0bf2d78c02a8e4 100644 --- a/interfaces/kits/wifi_manager/src/wifi_manager_addon.cpp +++ b/interfaces/kits/wifi_manager/src/wifi_manager_addon.cpp @@ -344,16 +344,21 @@ bool WifiManagerAddon::JsObjToDeviceConfig(napi_env env, napi_value object, Wifi int32_t type = static_cast(SecurityType::SEC_TYPE_INVALID); int32_t ipType = static_cast(IpType::UNKNOWN); /* "creatorUid" "disableReason" "randomMacType" "randomMacAddr" is not supported currently */ + std::tuple charArrayProp = {WIFI_PASSWORD_LEN, true}; + char tmpPsk[WIFI_PASSWORD_LEN] = {0}; if (!JsObjectToString(env, object, "ssid", true, config.ssid) || !JsObjectToString(env, object, "bssid", false, config.bssid) || - !JsObjectToString(env, object, "preSharedKey", true, config.preSharedKey) || + !JsObjectToCharArray(env, object, "preSharedKey", charArrayProp, tmpPsk) || !JsObjectToBool(env, object, "isHiddenSsid", false, config.hiddenSSID) || !JsObjectToInt(env, object, "securityType", true, type) || !JsObjectToInt(env, object, "netId", false, config.networkId) || !JsObjectToInt(env, object, "ipType", false, ipType) || !ProcessIpType(ipType, env, object, config.wifiIpConfig)) { + (void)memset_s(tmpPsk, sizeof(tmpPsk), 0, sizeof(tmpPsk)); return false; } + config.preSharedKey = OHOS::Wifi::SecureData(tmpPsk); + (void)memset_s(tmpPsk, sizeof(tmpPsk), 0, sizeof(tmpPsk)); ConvertEncryptionMode(type, config); if (type == static_cast(SecurityType::SEC_TYPE_EAP)) { return ProcessEapConfig(env, object, config.wifiEapConfig); @@ -369,9 +374,9 @@ void WifiManagerAddon::ConvertEncryptionMode(int32_t securityType, Wifi::WifiDev break; case static_cast(SecurityType::SEC_TYPE_WEP): config.keyMgmt = Wifi::KEY_MGMT_WEP; - config.wepKeys[0] = config.preSharedKey; + config.wepKeys[0] = config.preSharedKey.data(); config.wepTxKeyIndex = 0; - config.preSharedKey = ""; + config.preSharedKey.clear(); break; case static_cast(SecurityType::SEC_TYPE_PSK): config.keyMgmt = Wifi::KEY_MGMT_WPA_PSK; @@ -464,11 +469,16 @@ bool WifiManagerAddon::ProcessEapPeapConfig(napi_env env, napi_value object, Wif { eapConfig.eap = Wifi::EAP_METHOD_PEAP; int32_t phase2 = static_cast(Wifi::Phase2Method::NONE); + std::tuple charArrayProp = {WIFI_PASSWORD_LEN, true}; + char tmpPwd[WIFI_PASSWORD_LEN] = {0}; if (!JsObjectToString(env, object, "identity", true, eapConfig.identity) || - !JsObjectToString(env, object, "password", true, eapConfig.password) || + !JsObjectToCharArray(env, object, "password", charArrayProp, tmpPwd) || !JsObjectToInt(env, object, "phase2Method", true, phase2)) { + (void)memset_s(tmpPwd, sizeof(tmpPwd), 0, sizeof(tmpPwd)); return false; } + eapConfig.password = OHOS::Wifi::SecureData(tmpPwd); + (void)memset_s(tmpPwd, sizeof(tmpPwd), 0, sizeof(tmpPwd)); MessageParcelUtils::ProcessPhase2Method(phase2, eapConfig); return true; }