Commit c801242c38de247d82f12f6bf28bd19a280a12ae
Committed by
John W. Linville
1 parent
87228f5743
Exists in
master
and in
7 other branches
mac80211: tkip.c consolidate tkip IV writing in helper
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Showing 3 changed files with 17 additions and 20 deletions Side-by-side Diff
net/mac80211/tkip.c
... | ... | @@ -64,6 +64,15 @@ |
64 | 64 | return tkip_sbox[val & 0xff] ^ swab16(tkip_sbox[val >> 8]); |
65 | 65 | } |
66 | 66 | |
67 | +static u8 *write_tkip_iv(u8 *pos, u16 iv16) | |
68 | +{ | |
69 | + *pos++ = iv16 >> 8; | |
70 | + *pos++ = ((iv16 >> 8) | 0x20) & 0x7f; | |
71 | + *pos++ = iv16 & 0xFF; | |
72 | + return pos; | |
73 | +} | |
74 | + | |
75 | + | |
67 | 76 | /* |
68 | 77 | * P1K := Phase1(TA, TK, TSC) |
69 | 78 | * TA = transmitter address (48 bits) |
70 | 79 | |
... | ... | @@ -123,12 +132,9 @@ |
123 | 132 | ppk[4] += ror16(ppk[3], 1); |
124 | 133 | ppk[5] += ror16(ppk[4], 1); |
125 | 134 | |
126 | - rc4key[0] = tsc_IV16 >> 8; | |
127 | - rc4key[1] = ((tsc_IV16 >> 8) | 0x20) & 0x7f; | |
128 | - rc4key[2] = tsc_IV16 & 0xFF; | |
129 | - rc4key[3] = ((ppk[5] ^ get_unaligned_le16(tk)) >> 1) & 0xFF; | |
135 | + rc4key = write_tkip_iv(rc4key, tsc_IV16); | |
136 | + *rc4key++ = ((ppk[5] ^ get_unaligned_le16(tk)) >> 1) & 0xFF; | |
130 | 137 | |
131 | - rc4key += 4; | |
132 | 138 | for (i = 0; i < 6; i++) |
133 | 139 | put_unaligned_le16(ppk[i], rc4key + 2 * i); |
134 | 140 | } |
135 | 141 | |
... | ... | @@ -136,12 +142,9 @@ |
136 | 142 | /* Add TKIP IV and Ext. IV at @pos. @iv0, @iv1, and @iv2 are the first octets |
137 | 143 | * of the IV. Returns pointer to the octet following IVs (i.e., beginning of |
138 | 144 | * the packet payload). */ |
139 | -u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, | |
140 | - u8 iv0, u8 iv1, u8 iv2) | |
145 | +u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, u16 iv16) | |
141 | 146 | { |
142 | - *pos++ = iv0; | |
143 | - *pos++ = iv1; | |
144 | - *pos++ = iv2; | |
147 | + pos = write_tkip_iv(pos, iv16); | |
145 | 148 | *pos++ = (key->conf.keyidx << 6) | (1 << 5) /* Ext IV */; |
146 | 149 | put_unaligned_le32(key->u.tkip.tx.iv32, pos); |
147 | 150 | return pos + 4; |
... | ... | @@ -213,7 +216,7 @@ |
213 | 216 | u8 rc4key[16]; |
214 | 217 | |
215 | 218 | ieee80211_tkip_gen_rc4key(key, ta, rc4key); |
216 | - pos = ieee80211_tkip_add_iv(pos, key, rc4key[0], rc4key[1], rc4key[2]); | |
219 | + pos = ieee80211_tkip_add_iv(pos, key, key->u.tkip.tx.iv16); | |
217 | 220 | ieee80211_wep_encrypt_data(tfm, rc4key, 16, pos, payload_len); |
218 | 221 | } |
219 | 222 |
net/mac80211/tkip.h
... | ... | @@ -13,8 +13,8 @@ |
13 | 13 | #include <linux/crypto.h> |
14 | 14 | #include "key.h" |
15 | 15 | |
16 | -u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, | |
17 | - u8 iv0, u8 iv1, u8 iv2); | |
16 | +u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, u16 iv16); | |
17 | + | |
18 | 18 | void ieee80211_tkip_encrypt_data(struct crypto_blkcipher *tfm, |
19 | 19 | struct ieee80211_key *key, |
20 | 20 | u8 *pos, size_t payload_len, u8 *ta); |
net/mac80211/wpa.c
... | ... | @@ -198,14 +198,8 @@ |
198 | 198 | key->u.tkip.tx.iv32++; |
199 | 199 | |
200 | 200 | if (tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) { |
201 | - hdr = (struct ieee80211_hdr *)skb->data; | |
202 | - | |
203 | 201 | /* hwaccel - with preallocated room for IV */ |
204 | - ieee80211_tkip_add_iv(pos, key, | |
205 | - (u8) (key->u.tkip.tx.iv16 >> 8), | |
206 | - (u8) (((key->u.tkip.tx.iv16 >> 8) | 0x20) & | |
207 | - 0x7f), | |
208 | - (u8) key->u.tkip.tx.iv16); | |
202 | + ieee80211_tkip_add_iv(pos, key, key->u.tkip.tx.iv16); | |
209 | 203 | |
210 | 204 | info->control.hw_key = &tx->key->conf; |
211 | 205 | return 0; |