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

Commit 5f73a140 authored by Roshan Pius's avatar Roshan Pius Committed by Android (Google) Code Review
Browse files

Merge changes from topics "hide_scan_from_app_ops", "security_type"

* changes:
  WifiScanner: Add a flag to hide request from app-ops
  WifiConfiguration: Add @hide method to set security params
parents 4bf858e3 fc900aa0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -4851,7 +4851,8 @@ package android.net.wifi {
    ctor public WifiScanner.ScanSettings();
    field public int band;
    field public android.net.wifi.WifiScanner.ChannelSpec[] channels;
    field @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean ignoreLocationSettings;
    field public boolean hideFromAppOps;
    field public boolean ignoreLocationSettings;
    field public int maxPeriodInMs;
    field public int maxScansToCache;
    field public int numBssidsPerScan;
+87 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.net.wifi;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
@@ -41,6 +42,8 @@ import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
import java.util.BitSet;
import java.util.HashMap;
@@ -339,6 +342,90 @@ public class WifiConfiguration implements Parcelable {
        public static final String[] strings = { "current", "disabled", "enabled" };
    }

    /**
     * Security types we support.
     */
    /** @hide */
    public static final int SECURITY_TYPE_OPEN = 0;
    /** @hide */
    public static final int SECURITY_TYPE_WEP = 1;
    /** @hide */
    public static final int SECURITY_TYPE_PSK = 2;
    /** @hide */
    public static final int SECURITY_TYPE_EAP = 3;
    /** @hide */
    public static final int SECURITY_TYPE_SAE = 4;
    /** @hide */
    public static final int SECURITY_TYPE_EAP_SUITE_B = 5;
    /** @hide */
    public static final int SECURITY_TYPE_OWE = 6;

    /** @hide */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "SECURITY_TYPE_" }, value = {
            SECURITY_TYPE_OPEN,
            SECURITY_TYPE_WEP,
            SECURITY_TYPE_PSK,
            SECURITY_TYPE_EAP,
            SECURITY_TYPE_SAE,
            SECURITY_TYPE_EAP_SUITE_B,
            SECURITY_TYPE_OWE
    })
    public @interface SecurityType {}

    /**
     * @hide
     * Set security params (sets the various bitsets exposed in WifiConfiguration).
     *
     * @param securityType One of the security types from {@link SecurityType}.
     */
    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:
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                break;
            case SECURITY_TYPE_WEP:
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
                allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
                break;
            case SECURITY_TYPE_PSK:
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
                break;
            case SECURITY_TYPE_EAP:
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
                break;
            case SECURITY_TYPE_SAE:
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE);
                requirePMF = true;
                break;
            case SECURITY_TYPE_EAP_SUITE_B:
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192);
                allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
                allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256);
                allowedSuiteBCiphers.set(WifiConfiguration.SuiteBCipher.ECDHE_ECDSA);
                allowedSuiteBCiphers.set(WifiConfiguration.SuiteBCipher.ECDHE_RSA);
                requirePMF = true;
                break;
            case SECURITY_TYPE_OWE:
                allowedKeyManagement.set(WifiConfiguration.KeyMgmt.OWE);
                requirePMF = true;
                break;
            default:
                throw new IllegalArgumentException("unknown security type " + securityType);
        }
    }

    /** @hide */
    public static final int UNKNOWN_UID = -1;

+6 −39
Original line number Diff line number Diff line
@@ -269,58 +269,26 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
        }


        /**
         * Set defaults for the various low level credential type fields in the newly created
         * WifiConfiguration object.
         *
         * See {@link com.android.server.wifi.WifiConfigManager#setDefaultsInWifiConfiguration(
         * WifiConfiguration)}.
         *
         * @param configuration provided WifiConfiguration object.
         */
        private static void setDefaultsInWifiConfiguration(
                @NonNull WifiConfiguration configuration) {
            configuration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
            configuration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
            configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        }

        private void setSecurityParamsInWifiConfiguration(
                @NonNull WifiConfiguration configuration) {
            if (!TextUtils.isEmpty(mWpa2PskPassphrase)) { // WPA-PSK network.
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
                // WifiConfiguration.preSharedKey needs quotes around ASCII password.
                configuration.preSharedKey = "\"" + mWpa2PskPassphrase + "\"";
            } else if (!TextUtils.isEmpty(mWpa3SaePassphrase)) { // WPA3-SAE network.
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE);
                // PMF mandatory for SAE.
                configuration.requirePMF = true;
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
                // WifiConfiguration.preSharedKey needs quotes around ASCII password.
                configuration.preSharedKey = "\"" + mWpa3SaePassphrase + "\"";
            } else if (mWpa2EnterpriseConfig != null) { // WPA-EAP network
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
                configuration.enterpriseConfig = mWpa2EnterpriseConfig;
            } else if (mWpa3EnterpriseConfig != null) { // WPA3-SuiteB network
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192);
                configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
                // TODO (b/113878056): Verify these params once we verify SuiteB configuration.
                configuration.allowedGroupManagementCiphers.set(
                        WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256);
                configuration.allowedSuiteBCiphers.set(
                        WifiConfiguration.SuiteBCipher.ECDHE_ECDSA);
                configuration.allowedSuiteBCiphers.set(
                        WifiConfiguration.SuiteBCipher.ECDHE_RSA);
                configuration.requirePMF = true;
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_SUITE_B);
                configuration.enterpriseConfig = mWpa3EnterpriseConfig;
            } else if (mIsEnhancedOpen) { // OWE network
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.OWE);
                // PMF mandatory.
                configuration.requirePMF = true;
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
            } else { // Open network
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
            }
        }

@@ -330,7 +298,6 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
         */
        private WifiConfiguration buildWifiConfiguration() {
            final WifiConfiguration wifiConfiguration = new WifiConfiguration();
            setDefaultsInWifiConfiguration(wifiConfiguration);
            // WifiConfiguration.SSID needs quotes around unicode SSID.
            if (mSsidPatternMatcher.getType() == PatternMatcher.PATTERN_LITERAL) {
                wifiConfiguration.SSID = "\"" + mSsidPatternMatcher.getPath() + "\"";
+6 −39
Original line number Diff line number Diff line
@@ -303,58 +303,26 @@ public final class WifiNetworkSuggestion implements Parcelable {
            return this;
        }

        /**
         * Set defaults for the various low level credential type fields in the newly created
         * WifiConfiguration object.
         *
         * See {@link com.android.server.wifi.WifiConfigManager#setDefaultsInWifiConfiguration(
         * WifiConfiguration)}.
         *
         * @param configuration provided WifiConfiguration object.
         */
        private static void setDefaultsInWifiConfiguration(
                @NonNull WifiConfiguration configuration) {
            configuration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
            configuration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
            configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        }

        private void setSecurityParamsInWifiConfiguration(
                @NonNull WifiConfiguration configuration) {
            if (!TextUtils.isEmpty(mWpa2PskPassphrase)) { // WPA-PSK network.
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
                // WifiConfiguration.preSharedKey needs quotes around ASCII password.
                configuration.preSharedKey = "\"" + mWpa2PskPassphrase + "\"";
            } else if (!TextUtils.isEmpty(mWpa3SaePassphrase)) { // WPA3-SAE network.
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE);
                // PMF mandatory for SAE.
                configuration.requirePMF = true;
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
                // WifiConfiguration.preSharedKey needs quotes around ASCII password.
                configuration.preSharedKey = "\"" + mWpa3SaePassphrase + "\"";
            } else if (mWpa2EnterpriseConfig != null) { // WPA-EAP network
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
                configuration.enterpriseConfig = mWpa2EnterpriseConfig;
            } else if (mWpa3EnterpriseConfig != null) { // WPA3-SuiteB network
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192);
                configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
                // TODO (b/113878056): Verify these params once we verify SuiteB configuration.
                configuration.allowedGroupManagementCiphers.set(
                        WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256);
                configuration.allowedSuiteBCiphers.set(
                        WifiConfiguration.SuiteBCipher.ECDHE_ECDSA);
                configuration.allowedSuiteBCiphers.set(
                        WifiConfiguration.SuiteBCipher.ECDHE_RSA);
                configuration.requirePMF = true;
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_SUITE_B);
                configuration.enterpriseConfig = mWpa3EnterpriseConfig;
            } else if (mIsEnhancedOpen) { // OWE network
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.OWE);
                // PMF mandatory.
                configuration.requirePMF = true;
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
            } else { // Open network
                configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                configuration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
            }
        }

@@ -364,7 +332,6 @@ public final class WifiNetworkSuggestion implements Parcelable {
         */
        private WifiConfiguration buildWifiConfiguration() {
            final WifiConfiguration wifiConfiguration = new WifiConfiguration();
            setDefaultsInWifiConfiguration(wifiConfiguration);
            // WifiConfiguration.SSID needs quotes around unicode SSID.
            wifiConfiguration.SSID = "\"" + mSsid + "\"";
            if (mBssid != null) {
+12 −1
Original line number Diff line number Diff line
@@ -259,8 +259,17 @@ public class WifiScanner {
         * {@hide}
         */
        @SystemApi
        @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE)
        public boolean ignoreLocationSettings;
        /**
         * This scan request will be hidden from app-ops noting for location information. This
         * should only be used by FLP/NLP module on the device which is using the scan results to
         * compute results for behalf on their clients. FLP/NLP module using this flag should ensure
         * that they note in app-ops the eventual delivery of location information computed using
         * these results to their client .
         * {@hide}
         */
        @SystemApi
        public boolean hideFromAppOps;

        /** Implement the Parcelable interface {@hide} */
        public int describeContents() {
@@ -279,6 +288,7 @@ public class WifiScanner {
            dest.writeInt(isPnoScan ? 1 : 0);
            dest.writeInt(type);
            dest.writeInt(ignoreLocationSettings ? 1 : 0);
            dest.writeInt(hideFromAppOps ? 1 : 0);
            if (channels != null) {
                dest.writeInt(channels.length);
                for (int i = 0; i < channels.length; i++) {
@@ -314,6 +324,7 @@ public class WifiScanner {
                        settings.isPnoScan = in.readInt() == 1;
                        settings.type = in.readInt();
                        settings.ignoreLocationSettings = in.readInt() == 1;
                        settings.hideFromAppOps = in.readInt() == 1;
                        int num_channels = in.readInt();
                        settings.channels = new ChannelSpec[num_channels];
                        for (int i = 0; i < num_channels; i++) {
Loading