Export the michael_mic() function so that it can be reused by the ath11k, ath12k, and ipw2x00 drivers. Currently they have their own local implementations of it based on crypto_shash, which is redundant and inefficient. Signed-off-by: Eric Biggers --- include/linux/ieee80211.h | 5 +++++ net/mac80211/michael.c | 5 ++++- net/mac80211/michael.h | 22 ---------------------- net/mac80211/wpa.c | 1 - 4 files changed, 9 insertions(+), 24 deletions(-) delete mode 100644 net/mac80211/michael.h diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index b5d649db123fe..da6fcdc742e7c 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h @@ -1919,10 +1919,15 @@ enum ieee80211_radio_measurement_actioncode { #define FILS_ERP_MAX_RRK_LEN 64 #define PMK_MAX_LEN 64 #define SAE_PASSWORD_MAX_LEN 128 +#define MICHAEL_MIC_LEN 8 + +void michael_mic(const u8 *key, struct ieee80211_hdr *hdr, + const u8 *data, size_t data_len, u8 *mic); + /* Public action codes (IEEE Std 802.11-2016, 9.6.8.1, Table 9-307) */ enum ieee80211_pub_actioncode { WLAN_PUB_ACTION_20_40_BSS_COEX = 0, WLAN_PUB_ACTION_DSE_ENABLEMENT = 1, WLAN_PUB_ACTION_DSE_DEENABLEMENT = 2, diff --git a/net/mac80211/michael.c b/net/mac80211/michael.c index 8a1afc93e7499..50cdb67f0503d 100644 --- a/net/mac80211/michael.c +++ b/net/mac80211/michael.c @@ -6,11 +6,13 @@ #include #include #include #include -#include "michael.h" +struct michael_mic_ctx { + u32 l, r; +}; static void michael_block(struct michael_mic_ctx *mctx, u32 val) { mctx->l ^= val; mctx->r ^= rol32(mctx->l, 17); @@ -79,5 +81,6 @@ void michael_mic(const u8 *key, struct ieee80211_hdr *hdr, michael_block(&mctx, 0); put_unaligned_le32(mctx.l, mic); put_unaligned_le32(mctx.r, mic + 4); } +EXPORT_SYMBOL_GPL(michael_mic); diff --git a/net/mac80211/michael.h b/net/mac80211/michael.h deleted file mode 100644 index a7fdb8e84615a..0000000000000 --- a/net/mac80211/michael.h +++ /dev/null @@ -1,22 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * Michael MIC implementation - optimized for TKIP MIC operations - * Copyright 2002-2003, Instant802 Networks, Inc. - */ - -#ifndef MICHAEL_H -#define MICHAEL_H - -#include -#include - -#define MICHAEL_MIC_LEN 8 - -struct michael_mic_ctx { - u32 l, r; -}; - -void michael_mic(const u8 *key, struct ieee80211_hdr *hdr, - const u8 *data, size_t data_len, u8 *mic); - -#endif /* MICHAEL_H */ diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c index 64a57475ce506..724ec831a8857 100644 --- a/net/mac80211/wpa.c +++ b/net/mac80211/wpa.c @@ -16,11 +16,10 @@ #include #include #include #include "ieee80211_i.h" -#include "michael.h" #include "tkip.h" #include "aes_ccm.h" #include "aes_cmac.h" #include "aes_gmac.h" #include "aes_gcm.h" -- 2.53.0