]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Make cipher/AKM conversion helpers more reusable
authorPeddolla Harshavardhan Reddy <peddolla@qti.qualcomm.com>
Sat, 14 Jun 2025 05:58:53 +0000 (11:28 +0530)
committerJouni Malinen <j@w1.fi>
Tue, 24 Jun 2025 12:21:55 +0000 (15:21 +0300)
These helper functions for converting between cipher/AKM suites and
internal bitmaps should not be limited to cases where a pointer to a
buffer containing the suite selector is used. Split them into separate
functions that enable more convenient reuse in other places.

Signed-off-by: Peddolla Harshavardhan Reddy <peddolla@qti.qualcomm.com>
src/common/wpa_common.c
src/common/wpa_common.h

index b0170657344fefe66700cb4a73bfa3bb26793e48..39da3ea707c76632a16df0a5c306b7b17b0aee03 100644 (file)
@@ -127,6 +127,102 @@ unsigned int wpa_mic_len(int akmp, size_t pmk_len)
 }
 
 
+int rsn_cipher_suite_to_wpa_cipher(u32 cipher)
+{
+       switch (cipher) {
+       case RSN_CIPHER_SUITE_NONE:
+               return WPA_CIPHER_NONE;
+       case RSN_CIPHER_SUITE_TKIP:
+               return WPA_CIPHER_TKIP;
+       case RSN_CIPHER_SUITE_CCMP:
+               return WPA_CIPHER_CCMP;
+       case RSN_CIPHER_SUITE_AES_128_CMAC:
+               return WPA_CIPHER_AES_128_CMAC;
+       case RSN_CIPHER_SUITE_GCMP:
+               return WPA_CIPHER_GCMP;
+       case RSN_CIPHER_SUITE_CCMP_256:
+               return WPA_CIPHER_CCMP_256;
+       case RSN_CIPHER_SUITE_GCMP_256:
+               return WPA_CIPHER_GCMP_256;
+       case RSN_CIPHER_SUITE_BIP_GMAC_128:
+               return WPA_CIPHER_BIP_GMAC_128;
+       case RSN_CIPHER_SUITE_BIP_GMAC_256:
+               return WPA_CIPHER_BIP_GMAC_256;
+       case RSN_CIPHER_SUITE_BIP_CMAC_256:
+               return WPA_CIPHER_BIP_CMAC_256;
+       case RSN_CIPHER_SUITE_NO_GROUP_ADDRESSED:
+               return WPA_CIPHER_GTK_NOT_USED;
+       default:
+               return 0;
+       }
+}
+
+
+int rsn_key_mgmt_to_wpa_akm(u32 akm_suite)
+{
+       switch (akm_suite) {
+       case RSN_AUTH_KEY_MGMT_UNSPEC_802_1X:
+               return WPA_KEY_MGMT_IEEE8021X;
+       case RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X:
+               return WPA_KEY_MGMT_PSK;
+#ifdef CONFIG_IEEE80211R
+       case RSN_AUTH_KEY_MGMT_FT_802_1X:
+               return WPA_KEY_MGMT_FT_IEEE8021X;
+       case RSN_AUTH_KEY_MGMT_FT_PSK:
+               return WPA_KEY_MGMT_FT_PSK;
+#ifdef CONFIG_SHA384
+       case RSN_AUTH_KEY_MGMT_FT_802_1X_SHA384:
+               return WPA_KEY_MGMT_FT_IEEE8021X_SHA384;
+#endif /* CONFIG_SHA384 */
+#endif /* CONFIG_IEEE80211R */
+#ifdef CONFIG_SHA384
+       case RSN_AUTH_KEY_MGMT_802_1X_SHA384:
+               return WPA_KEY_MGMT_IEEE8021X_SHA384;
+#endif /* CONFIG_SHA384 */
+       case RSN_AUTH_KEY_MGMT_802_1X_SHA256:
+               return WPA_KEY_MGMT_IEEE8021X_SHA256;
+       case RSN_AUTH_KEY_MGMT_PSK_SHA256:
+               return WPA_KEY_MGMT_PSK_SHA256;
+#ifdef CONFIG_SAE
+       case RSN_AUTH_KEY_MGMT_SAE:
+               return WPA_KEY_MGMT_SAE;
+       case RSN_AUTH_KEY_MGMT_SAE_EXT_KEY:
+               return WPA_KEY_MGMT_SAE_EXT_KEY;
+       case RSN_AUTH_KEY_MGMT_FT_SAE:
+               return WPA_KEY_MGMT_FT_SAE;
+       case RSN_AUTH_KEY_MGMT_FT_SAE_EXT_KEY:
+               return WPA_KEY_MGMT_FT_SAE_EXT_KEY;
+#endif /* CONFIG_SAE */
+       case RSN_AUTH_KEY_MGMT_802_1X_SUITE_B:
+               return WPA_KEY_MGMT_IEEE8021X_SUITE_B;
+       case RSN_AUTH_KEY_MGMT_802_1X_SUITE_B_192:
+               return WPA_KEY_MGMT_IEEE8021X_SUITE_B_192;
+       case RSN_AUTH_KEY_MGMT_FILS_SHA256:
+               return WPA_KEY_MGMT_FILS_SHA256;
+       case RSN_AUTH_KEY_MGMT_FILS_SHA384:
+               return WPA_KEY_MGMT_FILS_SHA384;
+       case RSN_AUTH_KEY_MGMT_FT_FILS_SHA256:
+               return WPA_KEY_MGMT_FT_FILS_SHA256;
+       case RSN_AUTH_KEY_MGMT_FT_FILS_SHA384:
+               return WPA_KEY_MGMT_FT_FILS_SHA384;
+#ifdef CONFIG_OWE
+       case RSN_AUTH_KEY_MGMT_OWE:
+               return WPA_KEY_MGMT_OWE;
+#endif /* CONFIG_OWE */
+#ifdef CONFIG_DPP
+       case RSN_AUTH_KEY_MGMT_DPP:
+               return WPA_KEY_MGMT_DPP;
+#endif /* CONFIG_DPP */
+#ifdef CONFIG_PASN
+       case RSN_AUTH_KEY_MGMT_PASN:
+               return WPA_KEY_MGMT_PASN;
+#endif /* CONFIG_PASN */
+       default:
+               return 0;
+       }
+}
+
+
 /**
  * wpa_use_akm_defined - Is AKM-defined Key Descriptor Version used
  * @akmp: WPA_KEY_MGMT_* used in key derivation
@@ -1743,91 +1839,13 @@ int pasn_auth_frame_hash(int akmp, int cipher, const u8 *data, size_t len,
 
 static int rsn_selector_to_bitfield(const u8 *s)
 {
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_NONE)
-               return WPA_CIPHER_NONE;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_TKIP)
-               return WPA_CIPHER_TKIP;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_CCMP)
-               return WPA_CIPHER_CCMP;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_AES_128_CMAC)
-               return WPA_CIPHER_AES_128_CMAC;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_GCMP)
-               return WPA_CIPHER_GCMP;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_CCMP_256)
-               return WPA_CIPHER_CCMP_256;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_GCMP_256)
-               return WPA_CIPHER_GCMP_256;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_BIP_GMAC_128)
-               return WPA_CIPHER_BIP_GMAC_128;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_BIP_GMAC_256)
-               return WPA_CIPHER_BIP_GMAC_256;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_BIP_CMAC_256)
-               return WPA_CIPHER_BIP_CMAC_256;
-       if (RSN_SELECTOR_GET(s) == RSN_CIPHER_SUITE_NO_GROUP_ADDRESSED)
-               return WPA_CIPHER_GTK_NOT_USED;
-       return 0;
+       return rsn_cipher_suite_to_wpa_cipher(RSN_SELECTOR_GET(s));
 }
 
 
 static int rsn_key_mgmt_to_bitfield(const u8 *s)
 {
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_UNSPEC_802_1X)
-               return WPA_KEY_MGMT_IEEE8021X;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X)
-               return WPA_KEY_MGMT_PSK;
-#ifdef CONFIG_IEEE80211R
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_802_1X)
-               return WPA_KEY_MGMT_FT_IEEE8021X;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_PSK)
-               return WPA_KEY_MGMT_FT_PSK;
-#ifdef CONFIG_SHA384
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_802_1X_SHA384)
-               return WPA_KEY_MGMT_FT_IEEE8021X_SHA384;
-#endif /* CONFIG_SHA384 */
-#endif /* CONFIG_IEEE80211R */
-#ifdef CONFIG_SHA384
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_802_1X_SHA384)
-               return WPA_KEY_MGMT_IEEE8021X_SHA384;
-#endif /* CONFIG_SHA384 */
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_802_1X_SHA256)
-               return WPA_KEY_MGMT_IEEE8021X_SHA256;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_PSK_SHA256)
-               return WPA_KEY_MGMT_PSK_SHA256;
-#ifdef CONFIG_SAE
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_SAE)
-               return WPA_KEY_MGMT_SAE;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_SAE_EXT_KEY)
-               return WPA_KEY_MGMT_SAE_EXT_KEY;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_SAE)
-               return WPA_KEY_MGMT_FT_SAE;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_SAE_EXT_KEY)
-               return WPA_KEY_MGMT_FT_SAE_EXT_KEY;
-#endif /* CONFIG_SAE */
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_802_1X_SUITE_B)
-               return WPA_KEY_MGMT_IEEE8021X_SUITE_B;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_802_1X_SUITE_B_192)
-               return WPA_KEY_MGMT_IEEE8021X_SUITE_B_192;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FILS_SHA256)
-               return WPA_KEY_MGMT_FILS_SHA256;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FILS_SHA384)
-               return WPA_KEY_MGMT_FILS_SHA384;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_FILS_SHA256)
-               return WPA_KEY_MGMT_FT_FILS_SHA256;
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_FILS_SHA384)
-               return WPA_KEY_MGMT_FT_FILS_SHA384;
-#ifdef CONFIG_OWE
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_OWE)
-               return WPA_KEY_MGMT_OWE;
-#endif /* CONFIG_OWE */
-#ifdef CONFIG_DPP
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_DPP)
-               return WPA_KEY_MGMT_DPP;
-#endif /* CONFIG_DPP */
-#ifdef CONFIG_PASN
-       if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_PASN)
-               return WPA_KEY_MGMT_PASN;
-#endif /* CONFIG_PASN */
-       return 0;
+       return rsn_key_mgmt_to_wpa_akm(RSN_SELECTOR_GET(s));
 }
 
 
index 5b9773e3304554170d3479151af51e5a4a0641d8..eb75650ee8633567689b5f07f928f6c7284ce92d 100644 (file)
@@ -811,4 +811,7 @@ int wpa_pasn_add_extra_ies(struct wpabuf *buf, const u8 *extra_ies, size_t len);
 void rsn_set_snonce_cookie(u8 *snonce);
 bool rsn_is_snonce_cookie(const u8 *snonce);
 
+int rsn_cipher_suite_to_wpa_cipher(u32 cipher);
+int rsn_key_mgmt_to_wpa_akm(u32 akm_suite);
+
 #endif /* WPA_COMMON_H */