diff options
author | Assaf Krauss <assaf.krauss@intel.com> | 2012-08-01 15:12:48 +0300 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2012-10-23 19:52:52 +0200 |
commit | 5d0d04e477c44993f995f35b728ce9dd57a4615e (patch) | |
tree | 4f6ce81d78efc9f139ec25bc9f3c56a193d88ec2 /net/mac80211/aes_cmac.c | |
parent | 9a90bc81914ee77edcd6eb7e881639b7f7bf1667 (diff) |
mac80211: expose AES-CMAC subkey calculation
Expose a function for the AES-CMAC subkey calculation
to drivers. This is the first step of the AES-CMAC
cipher key setup and may be required for CMAC hardware
offloading.
Signed-off-by: Assaf Krauss <assaf.krauss@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/aes_cmac.c')
-rw-r--r-- | net/mac80211/aes_cmac.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/net/mac80211/aes_cmac.c b/net/mac80211/aes_cmac.c index a04752e9102..493353534a0 100644 --- a/net/mac80211/aes_cmac.c +++ b/net/mac80211/aes_cmac.c @@ -126,3 +126,20 @@ void ieee80211_aes_cmac_key_free(struct crypto_cipher *tfm) { crypto_free_cipher(tfm); } + +void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf, + u8 *k1, u8 *k2) +{ + u8 l[AES_BLOCK_SIZE] = {}; + struct ieee80211_key *key = + container_of(keyconf, struct ieee80211_key, conf); + + crypto_cipher_encrypt_one(key->u.aes_cmac.tfm, l, l); + + memcpy(k1, l, AES_BLOCK_SIZE); + gf_mulx(k1); + + memcpy(k2, k1, AES_BLOCK_SIZE); + gf_mulx(k2); +} +EXPORT_SYMBOL(ieee80211_aes_cmac_calculate_k1_k2); |