[PATCH] ieee80211: Add TKIP crypt->build_iv
This patch adds ieee80211 TKIP build_iv() method to support hardwares that can do TKIP encryption but relies on ieee80211 layer to build the IV. It also changes the build_iv() interface to return the key if possible after the IV is built (this is required by TKIP). Signed-off-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
@@ -190,7 +190,8 @@ static void ccmp_init_blocks(struct crypto_tfm *tfm,
|
||||
ieee80211_ccmp_aes_encrypt(tfm, b0, s0);
|
||||
}
|
||||
|
||||
static int ieee80211_ccmp_hdr(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
static int ieee80211_ccmp_hdr(struct sk_buff *skb, int hdr_len,
|
||||
u8 *aeskey, int keylen, void *priv)
|
||||
{
|
||||
struct ieee80211_ccmp_data *key = priv;
|
||||
int i;
|
||||
@@ -199,6 +200,9 @@ static int ieee80211_ccmp_hdr(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
if (skb_headroom(skb) < CCMP_HDR_LEN || skb->len < hdr_len)
|
||||
return -1;
|
||||
|
||||
if (aeskey != NULL && keylen >= CCMP_TK_LEN)
|
||||
memcpy(aeskey, key->key, CCMP_TK_LEN);
|
||||
|
||||
pos = skb_push(skb, CCMP_HDR_LEN);
|
||||
memmove(pos, pos + CCMP_HDR_LEN, hdr_len);
|
||||
pos += hdr_len;
|
||||
@@ -238,7 +242,7 @@ static int ieee80211_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
return -1;
|
||||
|
||||
data_len = skb->len - hdr_len;
|
||||
len = ieee80211_ccmp_hdr(skb, hdr_len, priv);
|
||||
len = ieee80211_ccmp_hdr(skb, hdr_len, NULL, 0, priv);
|
||||
if (len < 0)
|
||||
return -1;
|
||||
|
||||
|
Reference in New Issue
Block a user