/** @file\r
The Miscellaneous Routines for WiFi Connection Manager.\r
\r
- Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
\r
#include "WifiConnectionMgrDxe.h"\r
\r
+//\r
+// STA AKM preference order\r
+// REF: https://www.wi-fi.org/file/wpa3-specification\r
+//\r
+STATIC UINT32 mAKMSuitePreference[] = {\r
+ IEEE_80211_AKM_SUITE_8021X_SUITE_B192, // AKM Suite 12\r
+ IEEE_80211_AKM_SUITE_8021X_SUITE_B, // AKM Suite 11\r
+ IEEE_80211_AKM_SUITE_8021X_OR_PMKSA_SHA256, // AKM Suite 5\r
+ IEEE_80211_AKM_SUITE_8021X_OR_PMKSA, // AKM Suite 1\r
+\r
+ IEEE_80211_AKM_SUITE_SAE, // AKM Suite 8\r
+ IEEE_80211_AKM_SUITE_PSK_SHA256, // AKM Suite 6\r
+ IEEE_80211_AKM_SUITE_PSK, // AKM Suite 2\r
+\r
+ IEEE_80211_AKM_SUITE_OWE // AKM Suite 18\r
+};\r
+#define AKM_SUITE_PREFERENCE_COUNT (sizeof (mAKMSuitePreference) / sizeof (UINT32))\r
+\r
/**\r
Empty function for event process function.\r
\r
EFI_80211_AKM_SUITE_SELECTOR *SupportedAKMSuites;\r
EFI_80211_CIPHER_SUITE_SELECTOR *SupportedSwCipherSuites;\r
EFI_80211_CIPHER_SUITE_SELECTOR *SupportedHwCipherSuites;\r
- EFI_80211_SUITE_SELECTOR *AKMSuite;\r
+ UINT32 *AKMSuite;\r
EFI_80211_SUITE_SELECTOR *CipherSuite;\r
UINT16 AKMIndex;\r
UINT16 CipherIndex;\r
return EFI_SUCCESS;\r
}\r
\r
- for (AKMIndex = 0; AKMIndex < AKMList->AKMSuiteCount; AKMIndex++) {\r
- AKMSuite = AKMList->AKMSuiteList + AKMIndex;\r
- if (WifiMgrSupportAKMSuite (\r
- SupportedAKMSuites->AKMSuiteCount,\r
- (UINT32 *)SupportedAKMSuites->AKMSuiteList,\r
- (UINT32 *)AKMSuite\r
- ))\r
+ for (AKMIndex = 0; AKMIndex < AKM_SUITE_PREFERENCE_COUNT; AKMIndex++) {\r
+ AKMSuite = mAKMSuitePreference + AKMIndex;\r
+ if (WifiMgrSupportAKMSuite (AKMList->AKMSuiteCount, (UINT32 *)AKMList->AKMSuiteList, AKMSuite) &&\r
+ WifiMgrSupportAKMSuite (SupportedAKMSuites->AKMSuiteCount, (UINT32 *)SupportedAKMSuites->AKMSuiteList, AKMSuite))\r
{\r
if ((AKMSuiteSupported != NULL) && (CipherSuiteSupported != NULL)) {\r
*AKMSuiteSupported = TRUE;\r
}\r
\r
+ //\r
+ // OWE transition mode allow CipherSuiteCount is 0\r
+ //\r
+ if (CipherList->CipherSuiteCount == 0) {\r
+ *SecurityType = WifiMgrGetSecurityType ((UINT32 *)AKMSuite, NULL);\r
+ if (*SecurityType != SECURITY_TYPE_UNKNOWN) {\r
+ if ((AKMSuiteSupported != NULL) && (CipherSuiteSupported != NULL)) {\r
+ *CipherSuiteSupported = TRUE;\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+ }\r
+ }\r
+\r
for (CipherIndex = 0; CipherIndex < CipherList->CipherSuiteCount; CipherIndex++) {\r
CipherSuite = CipherList->CipherSuiteList + CipherIndex;\r
\r
IN UINT32 *CipherSuite\r
)\r
{\r
+ if ((AKMSuite != NULL) && (*AKMSuite == IEEE_80211_AKM_SUITE_OWE)) {\r
+ return SECURITY_TYPE_NONE;\r
+ }\r
+\r
if (CipherSuite == NULL) {\r
if (AKMSuite == NULL) {\r
return SECURITY_TYPE_NONE;\r
return SECURITY_TYPE_UNKNOWN;\r
}\r
\r
- if ((*AKMSuite == IEEE_80211_AKM_SUITE_8021X_OR_PMKSA) ||\r
- (*AKMSuite == IEEE_80211_AKM_SUITE_8021X_OR_PMKSA_SHA256))\r
+ if (*AKMSuite == IEEE_80211_AKM_SUITE_SAE) {\r
+ return SECURITY_TYPE_WPA3_PERSONAL;\r
+ } else if ((*AKMSuite == IEEE_80211_AKM_SUITE_8021X_OR_PMKSA) ||\r
+ (*AKMSuite == IEEE_80211_AKM_SUITE_8021X_OR_PMKSA_SHA256))\r
{\r
return SECURITY_TYPE_WPA2_ENTERPRISE;\r
} else if ((*AKMSuite == IEEE_80211_AKM_SUITE_PSK) ||\r
} else {\r
return SECURITY_TYPE_UNKNOWN;\r
}\r
+ } else if (*CipherSuite == IEEE_80211_PAIRWISE_CIPHER_SUITE_GCMP) {\r
+ if (AKMSuite == NULL) {\r
+ return SECURITY_TYPE_UNKNOWN;\r
+ }\r
+\r
+ if (*AKMSuite == IEEE_80211_AKM_SUITE_8021X_SUITE_B) {\r
+ return SECURITY_TYPE_WPA3_ENTERPRISE;\r
+ } else {\r
+ return SECURITY_TYPE_UNKNOWN;\r
+ }\r
+ } else if (*CipherSuite == IEEE_80211_PAIRWISE_CIPHER_SUITE_GCMP256) {\r
+ if (AKMSuite == NULL) {\r
+ return SECURITY_TYPE_UNKNOWN;\r
+ }\r
+\r
+ if (*AKMSuite == IEEE_80211_AKM_SUITE_8021X_SUITE_B192) {\r
+ return SECURITY_TYPE_WPA3_ENTERPRISE;\r
+ } else {\r
+ return SECURITY_TYPE_UNKNOWN;\r
+ }\r
} else {\r
return SECURITY_TYPE_UNKNOWN;\r
}\r