Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 102971
b: refs/heads/master
c: c801242
h: refs/heads/master
i:
  102969: 9aeed70
  102967: 9c501f7
v: v3
  • Loading branch information
Harvey Harrison authored and John W. Linville committed Jun 14, 2008
1 parent 5652edc commit abdea85
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 87228f57434108d8463ff10fd408d8d1273a23d2
refs/heads/master: c801242c38de247d82f12f6bf28bd19a280a12ae
25 changes: 14 additions & 11 deletions trunk/net/mac80211/tkip.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ static u16 tkipS(u16 val)
return tkip_sbox[val & 0xff] ^ swab16(tkip_sbox[val >> 8]);
}

static u8 *write_tkip_iv(u8 *pos, u16 iv16)
{
*pos++ = iv16 >> 8;
*pos++ = ((iv16 >> 8) | 0x20) & 0x7f;
*pos++ = iv16 & 0xFF;
return pos;
}


/*
* P1K := Phase1(TA, TK, TSC)
* TA = transmitter address (48 bits)
Expand Down Expand Up @@ -123,25 +132,19 @@ static void tkip_mixing_phase2(struct ieee80211_key *key, struct tkip_ctx *ctx,
ppk[4] += ror16(ppk[3], 1);
ppk[5] += ror16(ppk[4], 1);

rc4key[0] = tsc_IV16 >> 8;
rc4key[1] = ((tsc_IV16 >> 8) | 0x20) & 0x7f;
rc4key[2] = tsc_IV16 & 0xFF;
rc4key[3] = ((ppk[5] ^ get_unaligned_le16(tk)) >> 1) & 0xFF;
rc4key = write_tkip_iv(rc4key, tsc_IV16);
*rc4key++ = ((ppk[5] ^ get_unaligned_le16(tk)) >> 1) & 0xFF;

rc4key += 4;
for (i = 0; i < 6; i++)
put_unaligned_le16(ppk[i], rc4key + 2 * i);
}

/* Add TKIP IV and Ext. IV at @pos. @iv0, @iv1, and @iv2 are the first octets
* of the IV. Returns pointer to the octet following IVs (i.e., beginning of
* the packet payload). */
u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key,
u8 iv0, u8 iv1, u8 iv2)
u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, u16 iv16)
{
*pos++ = iv0;
*pos++ = iv1;
*pos++ = iv2;
pos = write_tkip_iv(pos, iv16);
*pos++ = (key->conf.keyidx << 6) | (1 << 5) /* Ext IV */;
put_unaligned_le32(key->u.tkip.tx.iv32, pos);
return pos + 4;
Expand Down Expand Up @@ -213,7 +216,7 @@ void ieee80211_tkip_encrypt_data(struct crypto_blkcipher *tfm,
u8 rc4key[16];

ieee80211_tkip_gen_rc4key(key, ta, rc4key);
pos = ieee80211_tkip_add_iv(pos, key, rc4key[0], rc4key[1], rc4key[2]);
pos = ieee80211_tkip_add_iv(pos, key, key->u.tkip.tx.iv16);
ieee80211_wep_encrypt_data(tfm, rc4key, 16, pos, payload_len);
}

Expand Down
4 changes: 2 additions & 2 deletions trunk/net/mac80211/tkip.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
#include <linux/crypto.h>
#include "key.h"

u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key,
u8 iv0, u8 iv1, u8 iv2);
u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, u16 iv16);

void ieee80211_tkip_encrypt_data(struct crypto_blkcipher *tfm,
struct ieee80211_key *key,
u8 *pos, size_t payload_len, u8 *ta);
Expand Down
8 changes: 1 addition & 7 deletions trunk/net/mac80211/wpa.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,14 +198,8 @@ static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
key->u.tkip.tx.iv32++;

if (tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
hdr = (struct ieee80211_hdr *)skb->data;

/* hwaccel - with preallocated room for IV */
ieee80211_tkip_add_iv(pos, key,
(u8) (key->u.tkip.tx.iv16 >> 8),
(u8) (((key->u.tkip.tx.iv16 >> 8) | 0x20) &
0x7f),
(u8) key->u.tkip.tx.iv16);
ieee80211_tkip_add_iv(pos, key, key->u.tkip.tx.iv16);

info->control.hw_key = &tx->key->conf;
return 0;
Expand Down

0 comments on commit abdea85

Please sign in to comment.