13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16 #include <linux/module.h>
18 #include <linux/slab.h>
19 #include <linux/random.h>
22 #include <linux/netdevice.h>
24 #include <linux/if_ether.h>
25 #include <linux/if_arp.h>
26 #include <asm/string.h>
28 #include <linux/wireless.h>
41 #define TKIP_HDR_LEN 8
44 #define TKIP_KEY_LEN 32
77 static unsigned long lib80211_tkip_set_flags(
unsigned long flags,
void *
priv)
80 unsigned long old_flags = _priv->
flags;
85 static unsigned long lib80211_tkip_get_flags(
void *
priv)
91 static void *lib80211_tkip_init(
int key_idx)
101 priv->
tx_tfm_arc4 = crypto_alloc_blkcipher(
"ecb(arc4)", 0,
115 priv->
rx_tfm_arc4 = crypto_alloc_blkcipher(
"ecb(arc4)", 0,
147 static void lib80211_tkip_deinit(
void *priv)
165 return (val >> 1) | (val << 15);
190 return lo | (((
u16) hi) << 8);
198 static const u16 Sbox[256] = {
199 0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
200 0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
201 0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
202 0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B,
203 0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F,
204 0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F,
205 0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5,
206 0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F,
207 0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB,
208 0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397,
209 0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED,
210 0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A,
211 0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194,
212 0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3,
213 0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104,
214 0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D,
215 0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39,
216 0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695,
217 0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83,
218 0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76,
219 0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4,
220 0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B,
221 0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0,
222 0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018,
223 0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751,
224 0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85,
225 0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12,
226 0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9,
227 0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7,
228 0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A,
229 0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8,
230 0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A,
236 return Sbox[
Lo8(v)] ^ ((t << 8) | (t >> 8));
239 #define PHASE1_LOOP_COUNT 8
241 static void tkip_mixing_phase1(
u16 * TTAK,
const u8 * TK,
const u8 *
TA,
247 TTAK[0] =
Lo16(IV32);
248 TTAK[1] =
Hi16(IV32);
249 TTAK[2] =
Mk16(TA[1], TA[0]);
250 TTAK[3] =
Mk16(TA[3], TA[2]);
251 TTAK[4] =
Mk16(TA[5], TA[4]);
255 TTAK[0] +=
_S_(TTAK[4] ^
Mk16(TK[1 + j], TK[0 + j]));
256 TTAK[1] +=
_S_(TTAK[0] ^
Mk16(TK[5 + j], TK[4 + j]));
257 TTAK[2] +=
_S_(TTAK[1] ^
Mk16(TK[9 + j], TK[8 + j]));
258 TTAK[3] +=
_S_(TTAK[2] ^
Mk16(TK[13 + j], TK[12 + j]));
259 TTAK[4] +=
_S_(TTAK[3] ^
Mk16(TK[1 + j], TK[0 + j])) +
i;
263 static void tkip_mixing_phase2(
u8 * WEPSeed,
const u8 * TK,
const u16 * TTAK,
268 u16 *PPK = (
u16 *) & WEPSeed[4];
276 PPK[5] = TTAK[4] + IV16;
279 PPK[0] +=
_S_(PPK[5] ^ Mk16_le((
__le16 *) & TK[0]));
280 PPK[1] +=
_S_(PPK[0] ^ Mk16_le((
__le16 *) & TK[2]));
281 PPK[2] +=
_S_(PPK[1] ^ Mk16_le((
__le16 *) & TK[4]));
282 PPK[3] +=
_S_(PPK[2] ^ Mk16_le((
__le16 *) & TK[6]));
283 PPK[4] +=
_S_(PPK[3] ^ Mk16_le((
__le16 *) & TK[8]));
284 PPK[5] +=
_S_(PPK[4] ^ Mk16_le((
__le16 *) & TK[10]));
286 PPK[0] +=
RotR1(PPK[5] ^ Mk16_le((
__le16 *) & TK[12]));
287 PPK[1] +=
RotR1(PPK[0] ^ Mk16_le((
__le16 *) & TK[14]));
288 PPK[2] +=
RotR1(PPK[1]);
289 PPK[3] +=
RotR1(PPK[2]);
290 PPK[4] +=
RotR1(PPK[3]);
291 PPK[5] +=
RotR1(PPK[4]);
295 WEPSeed[0] =
Hi8(IV16);
296 WEPSeed[1] = (
Hi8(IV16) | 0x20) & 0x7F;
297 WEPSeed[2] =
Lo8(IV16);
298 WEPSeed[3] =
Lo8((PPK[5] ^ Mk16_le((
__le16 *) & TK[0])) >> 1);
303 for (i = 0; i < 6; i++)
304 PPK[i] = (PPK[i] << 8) | (PPK[
i] >> 8);
310 u8 * rc4key,
int keylen,
void *priv)
321 if (rc4key ==
NULL || keylen < 16)
336 *pos++ = *(rc4key + 1);
337 *pos++ = *(rc4key + 2);
338 *pos++ = (tkey->
key_idx << 6) | (1 << 5) ;
340 *pos++ = (tkey->
tx_iv32 >> 8) & 0xff;
341 *pos++ = (tkey->
tx_iv32 >> 16) & 0xff;
342 *pos++ = (tkey->
tx_iv32 >> 24) & 0xff;
353 static int lib80211_tkip_encrypt(
struct sk_buff *skb,
int hdr_len,
void *priv)
358 u8 rc4key[16], *
pos, *icv;
369 if (skb_tailroom(skb) < 4 || skb->
len <
hdr_len)
375 if ((lib80211_tkip_hdr(skb, hdr_len, rc4key, 16, priv)) < 0)
385 crypto_blkcipher_setkey(tkey->
tx_tfm_arc4, rc4key, 16);
387 return crypto_blkcipher_encrypt(&desc, &
sg, &
sg, len + 4);
394 static inline int tkip_replay_check(
u32 iv32_n,
u16 iv16_n,
397 if ((
s32)iv32_n - (
s32)iv32_o < 0 ||
398 (iv32_n == iv32_o && iv16_n <= iv16_o))
403 static int lib80211_tkip_decrypt(
struct sk_buff *skb,
int hdr_len,
void *priv)
430 if (!(keyidx & (1 << 5))) {
438 "keyidx=%d priv=%p\n", tkey->
key_idx, keyidx, priv);
442 net_dbg_ratelimited(
"TKIP: received packet from %pM with keyid=%d that does not have a configured key\n",
446 iv16 = (pos[0] << 8) | pos[2];
447 iv32 = pos[4] | (pos[5] << 8) | (pos[6] << 16) | (pos[7] << 24);
450 if (tkip_replay_check(iv32, iv16, tkey->
rx_iv32, tkey->
rx_iv16)) {
451 #ifdef CONFIG_LIB80211_DEBUG
452 net_dbg_ratelimited(
"TKIP: replay detected: STA=%pM previous TSC %08x%04x received TSC %08x%04x\n",
464 tkip_mixing_phase2(rc4key, tkey->
key, tkey->
rx_ttak, iv16);
466 plen = skb->
len - hdr_len - 12;
468 crypto_blkcipher_setkey(tkey->
rx_tfm_arc4, rc4key, 16);
470 if (crypto_blkcipher_decrypt(&desc, &
sg, &
sg, plen + 4)) {
481 if (
memcmp(icv, pos + plen, 4) != 0) {
487 #ifdef CONFIG_LIB80211_DEBUG
514 if (tfm_michael ==
NULL) {
515 pr_warn(
"%s(): tfm_michael == NULL\n", __func__);
519 sg_set_buf(&
sg[0], hdr, 16);
520 sg_set_buf(&
sg[1], data, data_len);
522 if (crypto_hash_setkey(tfm_michael, key, 8))
525 desc.
tfm = tfm_michael;
527 return crypto_hash_digest(&desc,
sg, data_len + 16, mic);
530 static void michael_mic_hdr(
struct sk_buff *skb,
u8 * hdr)
562 hdr[13] = hdr[14] = hdr[15] = 0;
565 static int lib80211_michael_mic_add(
struct sk_buff *skb,
int hdr_len,
571 if (skb_tailroom(skb) < 8 || skb->
len < hdr_len) {
573 "(tailroom=%d hdr_len=%d skb->len=%d)\n",
574 skb_tailroom(skb), hdr_len, skb->
len);
578 michael_mic_hdr(skb, tkey->
tx_hdr);
581 skb->
data + hdr_len, skb->
len - 8 - hdr_len, pos))
587 static void lib80211_michael_mic_failure(
struct net_device *
dev,
595 memset(&ev, 0,
sizeof(ev));
597 if (hdr->
addr1[0] & 0x01)
603 memset(&wrqu, 0,
sizeof(wrqu));
604 wrqu.data.length =
sizeof(ev);
608 static int lib80211_michael_mic_verify(
struct sk_buff *skb,
int keyidx,
609 int hdr_len,
void *priv)
617 michael_mic_hdr(skb, tkey->
rx_hdr);
619 skb->
data + hdr_len, skb->
len - 8 - hdr_len, mic))
625 "MSDU from %pM keyidx=%d\n",
629 lib80211_michael_mic_failure(skb->
dev, hdr, keyidx);
644 static int lib80211_tkip_set_key(
void *key,
int len,
u8 * seq,
void *priv)
654 memset(tkey, 0,
sizeof(*tkey));
665 tkey->
rx_iv32 = (seq[5] << 24) | (seq[4] << 16) |
666 (seq[3] << 8) | seq[2];
667 tkey->
rx_iv16 = (seq[1] << 8) | seq[0];
677 static int lib80211_tkip_get_key(
void *key,
int len,
u8 * seq,
void *priv)
706 static char *lib80211_tkip_print_stats(
char *
p,
void *priv)
709 p +=
sprintf(p,
"key[%d] alg=TKIP key_set=%d "
710 "tx_pn=%02x%02x%02x%02x%02x%02x "
711 "rx_pn=%02x%02x%02x%02x%02x%02x "
712 "replays=%d icv_errors=%d local_mic_failures=%d\n",
734 .init = lib80211_tkip_init,
735 .deinit = lib80211_tkip_deinit,
736 .encrypt_mpdu = lib80211_tkip_encrypt,
737 .decrypt_mpdu = lib80211_tkip_decrypt,
738 .encrypt_msdu = lib80211_michael_mic_add,
739 .decrypt_msdu = lib80211_michael_mic_verify,
740 .set_key = lib80211_tkip_set_key,
741 .get_key = lib80211_tkip_get_key,
742 .print_stats = lib80211_tkip_print_stats,
743 .extra_mpdu_prefix_len = 4 + 4,
744 .extra_mpdu_postfix_len = 4,
745 .extra_msdu_postfix_len = 8,
746 .get_flags = lib80211_tkip_get_flags,
747 .set_flags = lib80211_tkip_set_flags,
751 static int __init lib80211_crypto_tkip_init(
void)
756 static void __exit lib80211_crypto_tkip_exit(
void)