diff options
| author | Zhu Yi <yi.zhu@intel.com> | 2006-01-19 16:22:32 +0800 | 
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2006-01-27 17:08:07 -0500 | 
| commit | 9184d9348a7a0e60d70d5f4c23de79fdbc72b9a3 (patch) | |
| tree | e7211258e23f29de34c39866cfa0933e5d10d2f7 /net/ieee80211/ieee80211_crypt_ccmp.c | |
| parent | 41a25c616b3140c388ff6009a1cb0b6b06a10f29 (diff) | |
| download | olio-linux-3.10-9184d9348a7a0e60d70d5f4c23de79fdbc72b9a3.tar.xz olio-linux-3.10-9184d9348a7a0e60d70d5f4c23de79fdbc72b9a3.zip  | |
[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>
Diffstat (limited to 'net/ieee80211/ieee80211_crypt_ccmp.c')
| -rw-r--r-- | net/ieee80211/ieee80211_crypt_ccmp.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/net/ieee80211/ieee80211_crypt_ccmp.c b/net/ieee80211/ieee80211_crypt_ccmp.c index 47022172850..097bcea2129 100644 --- a/net/ieee80211/ieee80211_crypt_ccmp.c +++ b/net/ieee80211/ieee80211_crypt_ccmp.c @@ -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;  |