[PATCH v3] Add support for CCMP-256 and GCMP-256 ciphers

Joerg Werner schreibubi at gmail.com
Fri Aug 19 02:06:22 PDT 2022


Signed-off-by: Joerg Werner <schreibubi at gmail.com>
---
Update after review by Hauke Mehrtens
Order in IWINFO_CIPHER_NAMES needs to be consistent with bit order for IWINFO_CIPHER_*

 include/iwinfo.h | 22 ++++++++++++----------
 iwinfo_cli.c     |  6 ++++++
 iwinfo_lib.c     |  3 +++
 iwinfo_lua.c     |  6 ++++++
 iwinfo_nl80211.c | 14 ++++++++------
 iwinfo_utils.c   | 10 ++++++++--
 6 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/include/iwinfo.h b/include/iwinfo.h
index e9b7451..576632d 100644
--- a/include/iwinfo.h
+++ b/include/iwinfo.h
@@ -36,16 +36,18 @@
 #define IWINFO_BAND_6        (1 << 2)
 #define IWINFO_BAND_60       (1 << 3)
 
-#define IWINFO_CIPHER_NONE   (1 << 0)
-#define IWINFO_CIPHER_WEP40  (1 << 1)
-#define IWINFO_CIPHER_TKIP   (1 << 2)
-#define IWINFO_CIPHER_WRAP   (1 << 3)
-#define IWINFO_CIPHER_CCMP   (1 << 4)
-#define IWINFO_CIPHER_WEP104 (1 << 5)
-#define IWINFO_CIPHER_AESOCB (1 << 6)
-#define IWINFO_CIPHER_CKIP   (1 << 7)
-#define IWINFO_CIPHER_GCMP   (1 << 8)
-#define IWINFO_CIPHER_COUNT  9
+#define IWINFO_CIPHER_NONE    (1 << 0)
+#define IWINFO_CIPHER_WEP40   (1 << 1)
+#define IWINFO_CIPHER_TKIP    (1 << 2)
+#define IWINFO_CIPHER_WRAP    (1 << 3)
+#define IWINFO_CIPHER_CCMP    (1 << 4)
+#define IWINFO_CIPHER_WEP104  (1 << 5)
+#define IWINFO_CIPHER_AESOCB  (1 << 6)
+#define IWINFO_CIPHER_CKIP    (1 << 7)
+#define IWINFO_CIPHER_GCMP    (1 << 8)
+#define IWINFO_CIPHER_CCMP256 (1 << 9)
+#define IWINFO_CIPHER_GCMP256 (1 << 10)
+#define IWINFO_CIPHER_COUNT  11
 
 #define IWINFO_KMGMT_NONE    (1 << 0)
 #define IWINFO_KMGMT_8021x   (1 << 1)
diff --git a/iwinfo_cli.c b/iwinfo_cli.c
index 456c67a..dca86cf 100644
--- a/iwinfo_cli.c
+++ b/iwinfo_cli.c
@@ -158,9 +158,15 @@ static char * format_enc_ciphers(int ciphers)
 	if (ciphers & IWINFO_CIPHER_CCMP)
 		pos += sprintf(pos, "CCMP, ");
 
+	if (ciphers & IWINFO_CIPHER_CCMP256)
+		pos += sprintf(pos, "CCMP-256, ");
+
 	if (ciphers & IWINFO_CIPHER_GCMP)
 		pos += sprintf(pos, "GCMP, ");
 
+	if (ciphers & IWINFO_CIPHER_GCMP256)
+		pos += sprintf(pos, "GCMP-256, ");
+
 	if (ciphers & IWINFO_CIPHER_WRAP)
 		pos += sprintf(pos, "WRAP, ");
 
diff --git a/iwinfo_lib.c b/iwinfo_lib.c
index 118fe58..3364cfc 100644
--- a/iwinfo_lib.c
+++ b/iwinfo_lib.c
@@ -31,6 +31,9 @@ const char *IWINFO_CIPHER_NAMES[] = {
 	"WEP104",
 	"AES-OCB",
 	"CKIP",
+	"GCMP",
+	"CCMP-256",
+	"GCMP-256",
 };
 
 const char *IWINFO_KMGMT_NAMES[] = {
diff --git a/iwinfo_lua.c b/iwinfo_lua.c
index e49e454..a2fe9d1 100644
--- a/iwinfo_lua.c
+++ b/iwinfo_lua.c
@@ -61,9 +61,15 @@ static char * iwinfo_crypto_print_ciphers(int ciphers)
 	if (ciphers & IWINFO_CIPHER_CCMP)
 		pos += sprintf(pos, "CCMP, ");
 
+	if (ciphers & IWINFO_CIPHER_CCMP256)
+		pos += sprintf(pos, "CCMP-256, ");
+
 	if (ciphers & IWINFO_CIPHER_GCMP)
 		pos += sprintf(pos, "GCMP, ");
 
+	if (ciphers & IWINFO_CIPHER_GCMP256)
+		pos += sprintf(pos, "GCMP-256, ");
+
 	if (ciphers & IWINFO_CIPHER_WRAP)
 		pos += sprintf(pos, "WRAP, ");
 
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
index adb8c45..30da680 100644
--- a/iwinfo_nl80211.c
+++ b/iwinfo_nl80211.c
@@ -1708,12 +1708,14 @@ static struct {
 	const char *match;
 	int cipher;
 } wpa_cipher_strings[] = {
-	{ "WEP-104", IWINFO_CIPHER_WEP104 },
-	{ "WEP-40",  IWINFO_CIPHER_WEP40 },
-	{ "NONE",    IWINFO_CIPHER_NONE },
-	{ "TKIP",    IWINFO_CIPHER_TKIP },
-	{ "CCMP",    IWINFO_CIPHER_CCMP },
-	{ "GCMP",    IWINFO_CIPHER_GCMP }
+	{ "WEP-104", IWINFO_CIPHER_WEP104  },
+	{ "WEP-40",  IWINFO_CIPHER_WEP40   },
+	{ "NONE",    IWINFO_CIPHER_NONE    },
+	{ "TKIP",    IWINFO_CIPHER_TKIP    },
+	{ "CCMP-256",IWINFO_CIPHER_CCMP256 },
+	{ "CCMP",    IWINFO_CIPHER_CCMP    },
+	{ "GCMP-256",IWINFO_CIPHER_GCMP256 },
+	{ "GCMP",    IWINFO_CIPHER_GCMP    }
 };
 
 static void parse_wpa_ciphers(const char *str, uint16_t *ciphers)
diff --git a/iwinfo_utils.c b/iwinfo_utils.c
index d071997..f5eb398 100644
--- a/iwinfo_utils.c
+++ b/iwinfo_utils.c
@@ -316,10 +316,16 @@ static void iwinfo_parse_rsn_cipher(uint8_t idx, uint16_t *ciphers)
 			*ciphers |= IWINFO_CIPHER_GCMP;
 			break;
 
+		case 9:
+			*ciphers |= IWINFO_CIPHER_GCMP256;
+			break;
+
+		case 10:
+			*ciphers |= IWINFO_CIPHER_CCMP256;
+			break;
+
 		case 6:  /* AES-128-CMAC */
 		case 7:  /* No group addressed */
-		case 9:  /* GCMP-256 */
-		case 10: /* CCMP-256 */
 		case 11: /* BIP-GMAC-128 */
 		case 12: /* BIP-GMAC-256 */
 		case 13: /* BIP-CMAC-256 */
-- 
2.37.2




More information about the openwrt-devel mailing list