diff options
| author | 2019-02-13 10:08:27 -0800 | |
|---|---|---|
| committer | 2019-02-26 21:46:37 -0800 | |
| commit | ede298f96688fc2137cb59dea77cd6b6d3b22b50 (patch) | |
| tree | a42079902b5d663506501fdc13346545ad25e3db | |
| parent | 26ab14c9f5e3e8e99f618be31f2ba63c857c9cf9 (diff) | |
WifiConfiguration: Add @hide method to set security params
Setting of these security params is duplicated in multiple parts of the
wifi stack. So, centralize this.
a) Move the security type enum from ScanResultMatchInfo class internally
into WifiConfiguration. (Note: Values don't change, just the name & location
since this is being persisted in multiple places)
b) Add a helper method to set the various security params required for
each security type.
Also, removed setting defaults in WifiNetworkSpecifier &
WifiNetworkSuggestion. This will anyway be handled by WifiConfigManager
on network addition. There is no need to replicate this in the API
surface.
Bug: 124071722
Test: ./frameworks/base/wifi/tests/runtests.sh
Change-Id: I382c497dfe331ee59f3560a8272b0e4ecf6ff8fc
4 files changed, 99 insertions, 108 deletions
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 3881e9e68eca..4d6ff4816621 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -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; diff --git a/wifi/java/android/net/wifi/WifiNetworkSpecifier.java b/wifi/java/android/net/wifi/WifiNetworkSpecifier.java index 333b82ccd146..c99bd2e45dad 100644 --- a/wifi/java/android/net/wifi/WifiNetworkSpecifier.java +++ b/wifi/java/android/net/wifi/WifiNetworkSpecifier.java @@ -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() + "\""; diff --git a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java index 233fa2cb4fff..f02404fc1940 100644 --- a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java +++ b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java @@ -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) { diff --git a/wifi/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java b/wifi/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java index bef33b769a75..feac0e598127 100644 --- a/wifi/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java +++ b/wifi/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java @@ -69,16 +69,6 @@ public class WifiNetworkSpecifierTest { assertEquals(MacAddress.ALL_ZEROS_ADDRESS, wifiNetworkSpecifier.bssidPatternMatcher.second); assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement .get(WifiConfiguration.KeyMgmt.NONE)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedProtocols - .get(WifiConfiguration.Protocol.RSN)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedAuthAlgorithms - .get(WifiConfiguration.AuthAlgorithm.OPEN)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedPairwiseCiphers - .get(WifiConfiguration.PairwiseCipher.CCMP)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers - .get(WifiConfiguration.GroupCipher.CCMP)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers - .get(WifiConfiguration.GroupCipher.TKIP)); } /** @@ -105,16 +95,6 @@ public class WifiNetworkSpecifierTest { wifiNetworkSpecifier.bssidPatternMatcher.second); assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement .get(WifiConfiguration.KeyMgmt.WPA_PSK)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedProtocols - .get(WifiConfiguration.Protocol.RSN)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedAuthAlgorithms - .get(WifiConfiguration.AuthAlgorithm.OPEN)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedPairwiseCiphers - .get(WifiConfiguration.PairwiseCipher.CCMP)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers - .get(WifiConfiguration.GroupCipher.CCMP)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers - .get(WifiConfiguration.GroupCipher.TKIP)); assertEquals("\"" + TEST_PRESHARED_KEY + "\"", wifiNetworkSpecifier.wifiConfiguration.preSharedKey); } @@ -150,16 +130,6 @@ public class WifiNetworkSpecifierTest { .get(WifiConfiguration.KeyMgmt.WPA_EAP)); assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement .get(WifiConfiguration.KeyMgmt.IEEE8021X)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedProtocols - .get(WifiConfiguration.Protocol.RSN)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedAuthAlgorithms - .get(WifiConfiguration.AuthAlgorithm.OPEN)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedPairwiseCiphers - .get(WifiConfiguration.PairwiseCipher.CCMP)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers - .get(WifiConfiguration.GroupCipher.CCMP)); - assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers - .get(WifiConfiguration.GroupCipher.TKIP)); assertTrue(wifiNetworkSpecifier.wifiConfiguration.hiddenSSID); assertEquals(enterpriseConfig.getEapMethod(), wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig.getEapMethod()); |