Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78ee3320 authored by Hai Shalom's avatar Hai Shalom Committed by Android (Google) Code Review
Browse files

Merge "[WPA3] Fix WPA3-Personal transition mode" into qt-qpr1-dev

parents 17eb45ab 8000abd6
Loading
Loading
Loading
Loading
+13 −46
Original line number Diff line number Diff line
@@ -718,20 +718,7 @@ public class AccessPoint implements Comparable<AccessPoint> {
                || (mConfig != null && mConfig.shared != config.shared)) {
            return false;
        }

        final int configSecurity = getSecurity(config);
        final WifiManager wifiManager = getWifiManager();
        switch (security) {
            case SECURITY_PSK_SAE_TRANSITION:
                return configSecurity == SECURITY_PSK
                        || (wifiManager.isWpa3SaeSupported() && configSecurity == SECURITY_SAE);
            case SECURITY_OWE_TRANSITION:
                return configSecurity == SECURITY_NONE
                        || (wifiManager.isEnhancedOpenSupported()
                                && configSecurity == SECURITY_OWE);
            default:
                return security == configSecurity;
        }
        return security == getSecurity(config);
    }

    public WifiConfiguration getConfig() {
@@ -1270,34 +1257,10 @@ public class AccessPoint implements Comparable<AccessPoint> {
        mAccessPointListener = listener;
    }

    private static final String sPskSuffix = "," + String.valueOf(SECURITY_PSK);
    private static final String sSaeSuffix = "," + String.valueOf(SECURITY_SAE);
    private static final String sPskSaeSuffix = "," + String.valueOf(SECURITY_PSK_SAE_TRANSITION);
    private static final String sOweSuffix = "," + String.valueOf(SECURITY_OWE);
    private static final String sOpenSuffix = "," + String.valueOf(SECURITY_NONE);
    private static final String sOweTransSuffix = "," + String.valueOf(SECURITY_OWE_TRANSITION);

    private boolean isKeyEqual(String compareTo) {
        if (mKey == null) {
            return false;
        }

        if (compareTo.endsWith(sPskSuffix) || compareTo.endsWith(sSaeSuffix)) {
            if (mKey.endsWith(sPskSaeSuffix)) {
                // Special handling for PSK-SAE transition mode. If the AP has advertised both,
                // we compare the key with both PSK and SAE for a match.
                return TextUtils.equals(mKey.substring(0, mKey.lastIndexOf(',')),
                        compareTo.substring(0, compareTo.lastIndexOf(',')));
            }
        }
        if (compareTo.endsWith(sOpenSuffix) || compareTo.endsWith(sOweSuffix)) {
            if (mKey.endsWith(sOweTransSuffix)) {
                // Special handling for OWE/Open networks. If AP advertises OWE in transition mode
                // and we have an Open network saved, allow this connection to be established.
                return TextUtils.equals(mKey.substring(0, mKey.lastIndexOf(',')),
                        compareTo.substring(0, compareTo.lastIndexOf(',')));
            }
        }
        return mKey.equals(compareTo);
    }

@@ -1628,8 +1591,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
    private static int getSecurity(ScanResult result) {
        if (result.capabilities.contains("WEP")) {
            return SECURITY_WEP;
        } else if (result.capabilities.contains("PSK+SAE")) {
            return SECURITY_PSK_SAE_TRANSITION;
        } else if (result.capabilities.contains("SAE")) {
            return SECURITY_SAE;
        } else if (result.capabilities.contains("PSK")) {
@@ -1638,8 +1599,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
            return SECURITY_EAP_SUITE_B;
        } else if (result.capabilities.contains("EAP")) {
            return SECURITY_EAP;
        } else if (result.capabilities.contains("OWE_TRANSITION")) {
            return SECURITY_OWE_TRANSITION;
        } else if (result.capabilities.contains("OWE")) {
            return SECURITY_OWE;
        }
@@ -1686,10 +1645,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
            return "SUITE_B";
        } else if (security == SECURITY_OWE) {
            return "OWE";
        } else if (security == SECURITY_PSK_SAE_TRANSITION) {
            return "PSK+SAE";
        } else if (security == SECURITY_OWE_TRANSITION) {
            return "OWE_TRANSITION";
        }
        return "NONE";
    }
@@ -1859,4 +1814,16 @@ public class AccessPoint implements Comparable<AccessPoint> {
            }
        }
    }

    /**
     * Lets the caller know if the network was cloned from another network
     *
     * @return true if the network is cloned
     */
    public boolean isCloned() {
        if (mConfig == null) {
            return false;
        }
        return mConfig.clonedNetworkConfigKey != null;
    }
}
+15 −5
Original line number Diff line number Diff line
@@ -382,12 +382,7 @@ public class WifiConfiguration implements Parcelable {
    public void setSecurityParams(@SecurityType int securityType) {
        // Clear all the bitsets.
        allowedKeyManagement.clear();
        allowedProtocols.clear();
        allowedAuthAlgorithms.clear();
        allowedPairwiseCiphers.clear();
        allowedGroupCiphers.clear();
        allowedGroupManagementCiphers.clear();
        allowedSuiteBCiphers.clear();

        switch (securityType) {
            case SECURITY_TYPE_OPEN:
@@ -410,6 +405,9 @@ public class WifiConfiguration implements Parcelable {
                requirePMF = true;
                break;
            case SECURITY_TYPE_EAP_SUITE_B:
                allowedGroupCiphers.clear();
                allowedGroupManagementCiphers.clear();
                allowedSuiteBCiphers.clear();
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192);
                allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
                allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256);
@@ -922,6 +920,12 @@ public class WifiConfiguration implements Parcelable {
     */
    public int meteredOverride = METERED_OVERRIDE_NONE;

    /**
     * This Wifi configuration is a clone of another network with lower security
     * @hide
     */
    public String clonedNetworkConfigKey;

    /**
     * Blend together all the various opinions to decide if the given network
     * should be considered metered or not.
@@ -1793,6 +1797,7 @@ public class WifiConfiguration implements Parcelable {
        shared = true;
        dtimInterval = 0;
        mRandomizedMacAddress = MacAddress.fromString(WifiInfo.DEFAULT_MAC_ADDRESS);
        clonedNetworkConfigKey = null;
    }

    /**
@@ -2352,6 +2357,7 @@ public class WifiConfiguration implements Parcelable {

    /** copy constructor {@hide} */
    @UnsupportedAppUsage

    public WifiConfiguration(WifiConfiguration source) {
        if (source != null) {
            networkId = source.networkId;
@@ -2431,6 +2437,7 @@ public class WifiConfiguration implements Parcelable {
            macRandomizationSetting = source.macRandomizationSetting;
            requirePMF = source.requirePMF;
            updateIdentifier = source.updateIdentifier;
            clonedNetworkConfigKey = source.clonedNetworkConfigKey;
        }
    }

@@ -2502,6 +2509,7 @@ public class WifiConfiguration implements Parcelable {
        dest.writeParcelable(mRandomizedMacAddress, flags);
        dest.writeInt(macRandomizationSetting);
        dest.writeInt(osu ? 1 : 0);
        dest.writeString(clonedNetworkConfigKey);
    }

    /** Implement the Parcelable interface {@hide} */
@@ -2575,6 +2583,8 @@ public class WifiConfiguration implements Parcelable {
                config.mRandomizedMacAddress = in.readParcelable(null);
                config.macRandomizationSetting = in.readInt();
                config.osu = in.readInt() != 0;
                config.clonedNetworkConfigKey = in.readString();

                return config;
            }