git: fa06d18b3b87 - main - wpa: add support for CCMP-256/GMCP-256
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 08 Apr 2025 01:35:30 UTC
The branch main has been updated by adrian:
URL: https://cgit.FreeBSD.org/src/commit/?id=fa06d18b3b8753a6b51198051d44edb2043db938
commit fa06d18b3b8753a6b51198051d44edb2043db938
Author: Adrian Chadd <adrian@FreeBSD.org>
AuthorDate: 2025-03-20 04:20:56 +0000
Commit: Adrian Chadd <adrian@FreeBSD.org>
CommitDate: 2025-04-08 01:35:22 +0000
wpa: add support for CCMP-256/GMCP-256
This adds support for CCMP-256 and GCMP-256 if available via
net80211 device capabilities, and will set the keys as needed.
Differential Revision: https://reviews.freebsd.org/D49418
Reviewed by: cy
---
contrib/wpa/src/drivers/driver_bsd.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/contrib/wpa/src/drivers/driver_bsd.c b/contrib/wpa/src/drivers/driver_bsd.c
index fc9a44743d7d..6efaa9c27ff2 100644
--- a/contrib/wpa/src/drivers/driver_bsd.c
+++ b/contrib/wpa/src/drivers/driver_bsd.c
@@ -378,9 +378,15 @@ bsd_set_key(void *priv, struct wpa_driver_set_key_params *params)
case WPA_ALG_CCMP:
wk.ik_type = IEEE80211_CIPHER_AES_CCM;
break;
+ case WPA_ALG_CCMP_256:
+ wk.ik_type = IEEE80211_CIPHER_AES_CCM_256;
+ break;
case WPA_ALG_GCMP:
wk.ik_type = IEEE80211_CIPHER_AES_GCM_128;
break;
+ case WPA_ALG_GCMP_256:
+ wk.ik_type = IEEE80211_CIPHER_AES_GCM_256;
+ break;
case WPA_ALG_BIP_CMAC_128:
wk.ik_type = IEEE80211_CIPHER_BIP_CMAC_128;
break;
@@ -448,16 +454,24 @@ bsd_configure_wpa(void *priv, struct wpa_bss_params *params)
{
#ifndef IEEE80211_IOC_APPIE
static const char *ciphernames[] =
- { "WEP", "TKIP", "AES-OCB", "AES-CCM", "CKIP", "NONE" };
+ { "WEP", "TKIP", "AES-OCB", "AES-CCM", "CKIP", "NONE",
+ "AES-CCM-256", "BIP-CMAC-128", "BIP-CMAC-256", "BIP-GMAC-128",
+ "BIP-GMAC-256", "AES-GCM-128", "AES-GCM-256" };
int v;
switch (params->wpa_group) {
case WPA_CIPHER_CCMP:
v = IEEE80211_CIPHER_AES_CCM;
break;
+ case WPA_CIPHER_CCMP_256:
+ v = IEEE80211_CIPHER_AES_CCM_256;
+ break;
case WPA_CIPHER_GCMP:
v = IEEE80211_CIPHER_AES_GCM_128;
break;
+ case WPA_CIPHER_GCMP_256:
+ v = IEEE80211_CIPHER_AES_GCM_256;
+ break;
case WPA_CIPHER_BIP_CMAC_128:
v = IEEE80211_CIPHER_BIP_CMAC_128;
break;
@@ -501,8 +515,12 @@ bsd_configure_wpa(void *priv, struct wpa_bss_params *params)
v |= 1<<IEEE80211_CIPHER_BIP_CMAC_128;
if (params->wpa_pairwise & WPA_CIPHER_GCMP)
v |= 1<<IEEE80211_CIPHER_AES_GCM_128;
+ if (params->wpa_pairwise & WPA_CIPHER_GCMP_256)
+ v |= 1<<IEEE80211_CIPHER_AES_GCM_256;
if (params->wpa_pairwise & WPA_CIPHER_CCMP)
v |= 1<<IEEE80211_CIPHER_AES_CCM;
+ if (params->wpa_pairwise & WPA_CIPHER_CCMP_256)
+ v |= 1<<IEEE80211_CIPHER_AES_CCM_256;
if (params->wpa_pairwise & WPA_CIPHER_TKIP)
v |= 1<<IEEE80211_CIPHER_TKIP;
if (params->wpa_pairwise & WPA_CIPHER_NONE)
@@ -1584,8 +1602,12 @@ static int wpa_driver_bsd_capa(struct bsd_driver_data *drv)
drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP;
if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_CCM)
drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP;
+ if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_CCM_256)
+ drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP_256;
if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_GCM_128)
drv->capa.enc |= WPA_DRIVER_CAPA_ENC_GCMP;
+ if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_GCM_256)
+ drv->capa.enc |= WPA_DRIVER_CAPA_ENC_GCMP_256;
if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_BIP_CMAC_128)
drv->capa.enc |= WPA_DRIVER_CAPA_ENC_BIP;