diff mbox series

[16/26] ie: Add support for GCMP|CCMP-256

Message ID 20221021191307.31492-16-denkenz@gmail.com (mailing list archive)
State New
Headers show
Series [01/26] eapol: More strictly validate key_descriptor_version | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
prestwoj/iwd-ci-gitlint success GitLint

Commit Message

Denis Kenzior Oct. 21, 2022, 7:12 p.m. UTC
---
 src/ie.c | 26 ++++++++++++++++++++++++++
 src/ie.h |  2 ++
 2 files changed, 28 insertions(+)
diff mbox series

Patch

diff --git a/src/ie.c b/src/ie.c
index a424af275634..4a3e02e11cac 100644
--- a/src/ie.c
+++ b/src/ie.c
@@ -432,6 +432,10 @@  uint32_t ie_rsn_cipher_suite_to_cipher(enum ie_rsn_cipher_suite suite)
 		return CRYPTO_CIPHER_BIP_CMAC;
 	case IE_RSN_CIPHER_SUITE_GCMP:
 		return CRYPTO_CIPHER_GCMP;
+	case IE_RSN_CIPHER_SUITE_GCMP_256:
+		return CRYPTO_CIPHER_GCMP_256;
+	case IE_RSN_CIPHER_SUITE_CCMP_256:
+		return CRYPTO_CIPHER_CCMP_256;
 	default:
 		return 0;
 	}
@@ -452,6 +456,10 @@  const char *ie_rsn_cipher_suite_to_string(enum ie_rsn_cipher_suite suite)
 		return "BIP-CMAC-128";
 	case IE_RSN_CIPHER_SUITE_GCMP:
 		return "GCMP-128";
+	case IE_RSN_CIPHER_SUITE_GCMP_256:
+		return "GCMP-256";
+	case IE_RSN_CIPHER_SUITE_CCMP_256:
+		return "CCMP-256";
 	case IE_RSN_CIPHER_SUITE_NO_GROUP_TRAFFIC:
 		return "NO-TRAFFIC";
 	case IE_RSN_CIPHER_SUITE_USE_GROUP_CIPHER:
@@ -496,6 +504,12 @@  static bool ie_parse_cipher_suite(const uint8_t *data,
 		case 8:
 			*out = IE_RSN_CIPHER_SUITE_GCMP;
 			return true;
+		case 9:
+			*out = IE_RSN_CIPHER_SUITE_GCMP_256;
+			return true;
+		case 10:
+			*out = IE_RSN_CIPHER_SUITE_CCMP_256;
+			return true;
 		default:
 			return false;
 		}
@@ -610,6 +624,8 @@  static bool ie_parse_group_cipher(const uint8_t *data,
 	case IE_RSN_CIPHER_SUITE_WEP40:
 	case IE_RSN_CIPHER_SUITE_NO_GROUP_TRAFFIC:
 	case IE_RSN_CIPHER_SUITE_GCMP:
+	case IE_RSN_CIPHER_SUITE_GCMP_256:
+	case IE_RSN_CIPHER_SUITE_CCMP_256:
 		break;
 	default:
 		return false;
@@ -635,6 +651,8 @@  static int ie_parse_pairwise_cipher(const uint8_t *data,
 	case IE_RSN_CIPHER_SUITE_WEP40:
 	case IE_RSN_CIPHER_SUITE_USE_GROUP_CIPHER:
 	case IE_RSN_CIPHER_SUITE_GCMP:
+	case IE_RSN_CIPHER_SUITE_GCMP_256:
+	case IE_RSN_CIPHER_SUITE_CCMP_256:
 		break;
 	default:
 		return -ERANGE;
@@ -945,6 +963,12 @@  static bool ie_build_cipher_suite(uint8_t *data, const uint8_t *oui,
 	case IE_RSN_CIPHER_SUITE_GCMP:
 		selector = 8;
 		goto done;
+	case IE_RSN_CIPHER_SUITE_GCMP_256:
+		selector = 9;
+		goto done;
+	case IE_RSN_CIPHER_SUITE_CCMP_256:
+		selector = 10;
+		goto done;
 	}
 
 	return false;
@@ -1034,6 +1058,8 @@  static int build_ciphers_common(const struct ie_rsn_info *info, uint8_t *to,
 		IE_RSN_CIPHER_SUITE_WEP40,
 		IE_RSN_CIPHER_SUITE_USE_GROUP_CIPHER,
 		IE_RSN_CIPHER_SUITE_GCMP,
+		IE_RSN_CIPHER_SUITE_GCMP_256,
+		IE_RSN_CIPHER_SUITE_CCMP_256,
 	};
 	unsigned int pos = 0;
 	unsigned int i;
diff --git a/src/ie.h b/src/ie.h
index 1dadcb6be718..f447a4f98d81 100644
--- a/src/ie.h
+++ b/src/ie.h
@@ -332,6 +332,8 @@  enum ie_rsn_cipher_suite {
 	IE_RSN_CIPHER_SUITE_BIP_CMAC		= 0x0020,
 	IE_RSN_CIPHER_SUITE_NO_GROUP_TRAFFIC	= 0x0040,
 	IE_RSN_CIPHER_SUITE_GCMP		= 0x0080,
+	IE_RSN_CIPHER_SUITE_GCMP_256		= 0x0100,
+	IE_RSN_CIPHER_SUITE_CCMP_256		= 0x0200,
 };
 
 enum ie_rsn_akm_suite {