1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Host AP crypt: host-based TKIP encryption implementation for Host AP driver 4 * 5 * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi> 6 */ 7 8#include <crypto/arc4.h> 9#include <crypto/hash.h> 10#include <linux/fips.h> 11#include <linux/module.h> 12#include <linux/init.h> 13#include <linux/slab.h> 14#include <linux/random.h> 15#include <linux/skbuff.h> 16#include <linux/netdevice.h> 17#include <linux/if_ether.h> 18#include <linux/if_arp.h> 19#include <linux/string.h> 20#include <linux/crc32.h> 21#include <linux/etherdevice.h> 22 23#include "rtllib.h" 24 25struct rtllib_tkip_data { 26#define TKIP_KEY_LEN 32 27 u8 key[TKIP_KEY_LEN]; 28 int key_set; 29 30 u32 tx_iv32; 31 u16 tx_iv16; 32 u16 tx_ttak[5]; 33 int tx_phase1_done; 34 35 u32 rx_iv32; 36 u16 rx_iv16; 37 bool initialized; 38 u16 rx_ttak[5]; 39 int rx_phase1_done; 40 u32 rx_iv32_new; 41 u16 rx_iv16_new; 42 43 u32 dot11RSNAStatsTKIPReplays; 44 u32 dot11RSNAStatsTKIPICVErrors; 45 u32 dot11RSNAStatsTKIPLocalMICFailures; 46 47 int key_idx; 48 struct arc4_ctx rx_ctx_arc4; 49 struct arc4_ctx tx_ctx_arc4; 50 struct crypto_shash *rx_tfm_michael; 51 struct crypto_shash *tx_tfm_michael; 52 /* scratch buffers for virt_to_page() (crypto API) */ 53 u8 rx_hdr[16]; 54 u8 tx_hdr[16]; 55}; 56 57static void *rtllib_tkip_init(int key_idx) 58{ 59 struct rtllib_tkip_data *priv; 60 61 if (fips_enabled) 62 return NULL; 63 64 priv = kzalloc(sizeof(*priv), GFP_ATOMIC); 65 if (!priv) 66 goto fail; 67 priv->key_idx = key_idx; 68 69 priv->tx_tfm_michael = crypto_alloc_shash("michael_mic", 0, 0); 70 if (IS_ERR(priv->tx_tfm_michael)) { 71 pr_debug("Could not allocate crypto API michael_mic\n"); 72 priv->tx_tfm_michael = NULL; 73 goto fail; 74 } 75 76 priv->rx_tfm_michael = crypto_alloc_shash("michael_mic", 0, 0); 77 if (IS_ERR(priv->rx_tfm_michael)) { 78 pr_debug("Could not allocate crypto API michael_mic\n"); 79 priv->rx_tfm_michael = NULL; 80 goto fail; 81 } 82 return priv; 83 84fail: 85 if (priv) { 86 crypto_free_shash(priv->tx_tfm_michael); 87 crypto_free_shash(priv->rx_tfm_michael); 88 kfree(priv); 89 } 90 91 return NULL; 92} 93 94static void rtllib_tkip_deinit(void *priv) 95{ 96 struct rtllib_tkip_data *_priv = priv; 97 98 if (_priv) { 99 crypto_free_shash(_priv->tx_tfm_michael); 100 crypto_free_shash(_priv->rx_tfm_michael); 101 } 102 kfree_sensitive(priv); 103} 104 105static inline u16 RotR1(u16 val) 106{ 107 return (val >> 1) | (val << 15); 108} 109 110static inline u8 Lo8(u16 val) 111{ 112 return val & 0xff; 113} 114 115static inline u8 Hi8(u16 val) 116{ 117 return val >> 8; 118} 119 120static inline u16 Lo16(u32 val) 121{ 122 return val & 0xffff; 123} 124 125static inline u16 Hi16(u32 val) 126{ 127 return val >> 16; 128} 129 130static inline u16 Mk16(u8 hi, u8 lo) 131{ 132 return lo | (hi << 8); 133} 134 135static inline u16 Mk16_le(u16 *v) 136{ 137 return *v; 138} 139 140static const u16 Sbox[256] = { 141 0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154, 142 0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A, 143 0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B, 144 0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B, 145 0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F, 146 0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F, 147 0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5, 148 0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F, 149 0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB, 150 0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397, 151 0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED, 152 0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A, 153 0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194, 154 0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3, 155 0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104, 156 0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D, 157 0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39, 158 0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695, 159 0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83, 160 0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76, 161 0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4, 162 0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B, 163 0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0, 164 0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018, 165 0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751, 166 0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85, 167 0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12, 168 0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9, 169 0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7, 170 0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A, 171 0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8, 172 0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A, 173}; 174 175static inline u16 _S_(u16 v) 176{ 177 u16 t = Sbox[Hi8(v)]; 178 return Sbox[Lo8(v)] ^ ((t << 8) | (t >> 8)); 179} 180 181#define PHASE1_LOOP_COUNT 8 182 183static void tkip_mixing_phase1(u16 *TTAK, const u8 *TK, const u8 *TA, u32 IV32) 184{ 185 int i, j; 186 187 /* Initialize the 80-bit TTAK from TSC (IV32) and TA[0..5] */ 188 TTAK[0] = Lo16(IV32); 189 TTAK[1] = Hi16(IV32); 190 TTAK[2] = Mk16(TA[1], TA[0]); 191 TTAK[3] = Mk16(TA[3], TA[2]); 192 TTAK[4] = Mk16(TA[5], TA[4]); 193 194 for (i = 0; i < PHASE1_LOOP_COUNT; i++) { 195 j = 2 * (i & 1); 196 TTAK[0] += _S_(TTAK[4] ^ Mk16(TK[1 + j], TK[0 + j])); 197 TTAK[1] += _S_(TTAK[0] ^ Mk16(TK[5 + j], TK[4 + j])); 198 TTAK[2] += _S_(TTAK[1] ^ Mk16(TK[9 + j], TK[8 + j])); 199 TTAK[3] += _S_(TTAK[2] ^ Mk16(TK[13 + j], TK[12 + j])); 200 TTAK[4] += _S_(TTAK[3] ^ Mk16(TK[1 + j], TK[0 + j])) + i; 201 } 202} 203 204static void tkip_mixing_phase2(u8 *WEPSeed, const u8 *TK, const u16 *TTAK, 205 u16 IV16) 206{ 207 /* Make temporary area overlap WEP seed so that the final copy can be 208 * avoided on little endian hosts. 209 */ 210 u16 *PPK = (u16 *)&WEPSeed[4]; 211 212 /* Step 1 - make copy of TTAK and bring in TSC */ 213 PPK[0] = TTAK[0]; 214 PPK[1] = TTAK[1]; 215 PPK[2] = TTAK[2]; 216 PPK[3] = TTAK[3]; 217 PPK[4] = TTAK[4]; 218 PPK[5] = TTAK[4] + IV16; 219 220 /* Step 2 - 96-bit bijective mixing using S-box */ 221 PPK[0] += _S_(PPK[5] ^ Mk16_le((u16 *)&TK[0])); 222 PPK[1] += _S_(PPK[0] ^ Mk16_le((u16 *)&TK[2])); 223 PPK[2] += _S_(PPK[1] ^ Mk16_le((u16 *)&TK[4])); 224 PPK[3] += _S_(PPK[2] ^ Mk16_le((u16 *)&TK[6])); 225 PPK[4] += _S_(PPK[3] ^ Mk16_le((u16 *)&TK[8])); 226 PPK[5] += _S_(PPK[4] ^ Mk16_le((u16 *)&TK[10])); 227 228 PPK[0] += RotR1(PPK[5] ^ Mk16_le((u16 *)&TK[12])); 229 PPK[1] += RotR1(PPK[0] ^ Mk16_le((u16 *)&TK[14])); 230 PPK[2] += RotR1(PPK[1]); 231 PPK[3] += RotR1(PPK[2]); 232 PPK[4] += RotR1(PPK[3]); 233 PPK[5] += RotR1(PPK[4]); 234 235 /* Step 3 - bring in last of TK bits, assign 24-bit WEP IV value 236 * WEPSeed[0..2] is transmitted as WEP IV 237 */ 238 WEPSeed[0] = Hi8(IV16); 239 WEPSeed[1] = (Hi8(IV16) | 0x20) & 0x7F; 240 WEPSeed[2] = Lo8(IV16); 241 WEPSeed[3] = Lo8((PPK[5] ^ Mk16_le((u16 *)&TK[0])) >> 1); 242 243#ifdef __BIG_ENDIAN 244 { 245 int i; 246 247 for (i = 0; i < 6; i++) 248 PPK[i] = (PPK[i] << 8) | (PPK[i] >> 8); 249 } 250#endif 251} 252 253static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv) 254{ 255 struct rtllib_tkip_data *tkey = priv; 256 int len; 257 u8 *pos; 258 struct ieee80211_hdr *hdr; 259 struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + 260 MAX_DEV_ADDR_SIZE); 261 int ret = 0; 262 u8 rc4key[16], *icv; 263 u32 crc; 264 265 if (skb_headroom(skb) < 8 || skb_tailroom(skb) < 4 || 266 skb->len < hdr_len) 267 return -1; 268 269 hdr = (struct ieee80211_hdr *)skb->data; 270 271 if (!tcb_desc->bHwSec) { 272 if (!tkey->tx_phase1_done) { 273 tkip_mixing_phase1(tkey->tx_ttak, tkey->key, hdr->addr2, 274 tkey->tx_iv32); 275 tkey->tx_phase1_done = 1; 276 } 277 tkip_mixing_phase2(rc4key, tkey->key, tkey->tx_ttak, 278 tkey->tx_iv16); 279 } else { 280 tkey->tx_phase1_done = 1; 281 } 282 283 len = skb->len - hdr_len; 284 pos = skb_push(skb, 8); 285 memmove(pos, pos + 8, hdr_len); 286 pos += hdr_len; 287 288 if (tcb_desc->bHwSec) { 289 *pos++ = Hi8(tkey->tx_iv16); 290 *pos++ = (Hi8(tkey->tx_iv16) | 0x20) & 0x7F; 291 *pos++ = Lo8(tkey->tx_iv16); 292 } else { 293 *pos++ = rc4key[0]; 294 *pos++ = rc4key[1]; 295 *pos++ = rc4key[2]; 296 } 297 298 *pos++ = (tkey->key_idx << 6) | (1 << 5) /* Ext IV included */; 299 *pos++ = tkey->tx_iv32 & 0xff; 300 *pos++ = (tkey->tx_iv32 >> 8) & 0xff; 301 *pos++ = (tkey->tx_iv32 >> 16) & 0xff; 302 *pos++ = (tkey->tx_iv32 >> 24) & 0xff; 303 304 if (!tcb_desc->bHwSec) { 305 icv = skb_put(skb, 4); 306 crc = ~crc32_le(~0, pos, len); 307 icv[0] = crc; 308 icv[1] = crc >> 8; 309 icv[2] = crc >> 16; 310 icv[3] = crc >> 24; 311 312 arc4_setkey(&tkey->tx_ctx_arc4, rc4key, 16); 313 arc4_crypt(&tkey->tx_ctx_arc4, pos, pos, len + 4); 314 } 315 316 tkey->tx_iv16++; 317 if (tkey->tx_iv16 == 0) { 318 tkey->tx_phase1_done = 0; 319 tkey->tx_iv32++; 320 } 321 322 if (!tcb_desc->bHwSec) 323 return ret; 324 return 0; 325} 326 327static int rtllib_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) 328{ 329 struct rtllib_tkip_data *tkey = priv; 330 u8 keyidx, *pos; 331 u32 iv32; 332 u16 iv16; 333 struct ieee80211_hdr *hdr; 334 struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + 335 MAX_DEV_ADDR_SIZE); 336 u8 rc4key[16]; 337 u8 icv[4]; 338 u32 crc; 339 int plen; 340 341 if (skb->len < hdr_len + 8 + 4) 342 return -1; 343 344 hdr = (struct ieee80211_hdr *)skb->data; 345 pos = skb->data + hdr_len; 346 keyidx = pos[3]; 347 if (!(keyidx & (1 << 5))) { 348 if (net_ratelimit()) { 349 netdev_dbg(skb->dev, 350 "Received packet without ExtIV flag from %pM\n", 351 hdr->addr2); 352 } 353 return -2; 354 } 355 keyidx >>= 6; 356 if (tkey->key_idx != keyidx) { 357 netdev_dbg(skb->dev, 358 "RX tkey->key_idx=%d frame keyidx=%d priv=%p\n", 359 tkey->key_idx, keyidx, priv); 360 return -6; 361 } 362 if (!tkey->key_set) { 363 if (net_ratelimit()) { 364 netdev_dbg(skb->dev, 365 "Received packet from %pM with keyid=%d that does not have a configured key\n", 366 hdr->addr2, keyidx); 367 } 368 return -3; 369 } 370 iv16 = (pos[0] << 8) | pos[2]; 371 iv32 = pos[4] | (pos[5] << 8) | (pos[6] << 16) | (pos[7] << 24); 372 pos += 8; 373 374 if (!tcb_desc->bHwSec || (skb->cb[0] == 1)) { 375 if ((iv32 < tkey->rx_iv32 || 376 (iv32 == tkey->rx_iv32 && iv16 <= tkey->rx_iv16)) && 377 tkey->initialized) { 378 if (net_ratelimit()) { 379 netdev_dbg(skb->dev, 380 "Replay detected: STA= %pM previous TSC %08x%04x received TSC %08x%04x\n", 381 hdr->addr2, tkey->rx_iv32, 382 tkey->rx_iv16, iv32, iv16); 383 } 384 tkey->dot11RSNAStatsTKIPReplays++; 385 return -4; 386 } 387 tkey->initialized = true; 388 389 if (iv32 != tkey->rx_iv32 || !tkey->rx_phase1_done) { 390 tkip_mixing_phase1(tkey->rx_ttak, tkey->key, 391 hdr->addr2, iv32); 392 tkey->rx_phase1_done = 1; 393 } 394 tkip_mixing_phase2(rc4key, tkey->key, tkey->rx_ttak, iv16); 395 396 plen = skb->len - hdr_len - 12; 397 398 arc4_setkey(&tkey->rx_ctx_arc4, rc4key, 16); 399 arc4_crypt(&tkey->rx_ctx_arc4, pos, pos, plen + 4); 400 401 crc = ~crc32_le(~0, pos, plen); 402 icv[0] = crc; 403 icv[1] = crc >> 8; 404 icv[2] = crc >> 16; 405 icv[3] = crc >> 24; 406 407 if (memcmp(icv, pos + plen, 4) != 0) { 408 if (iv32 != tkey->rx_iv32) { 409 /* Previously cached Phase1 result was already 410 * lost, so it needs to be recalculated for the 411 * next packet. 412 */ 413 tkey->rx_phase1_done = 0; 414 } 415 if (net_ratelimit()) { 416 netdev_dbg(skb->dev, 417 "ICV error detected: STA= %pM\n", 418 hdr->addr2); 419 } 420 tkey->dot11RSNAStatsTKIPICVErrors++; 421 return -5; 422 } 423 } 424 425 /* Update real counters only after Michael MIC verification has 426 * completed 427 */ 428 tkey->rx_iv32_new = iv32; 429 tkey->rx_iv16_new = iv16; 430 431 /* Remove IV and ICV */ 432 memmove(skb->data + 8, skb->data, hdr_len); 433 skb_pull(skb, 8); 434 skb_trim(skb, skb->len - 4); 435 436 return keyidx; 437} 438 439static int michael_mic(struct crypto_shash *tfm_michael, u8 *key, u8 *hdr, 440 u8 *data, size_t data_len, u8 *mic) 441{ 442 SHASH_DESC_ON_STACK(desc, tfm_michael); 443 int err; 444 445 desc->tfm = tfm_michael; 446 447 if (crypto_shash_setkey(tfm_michael, key, 8)) 448 return -1; 449 450 err = crypto_shash_init(desc); 451 if (err) 452 goto out; 453 err = crypto_shash_update(desc, hdr, 16); 454 if (err) 455 goto out; 456 err = crypto_shash_update(desc, data, data_len); 457 if (err) 458 goto out; 459 err = crypto_shash_final(desc, mic); 460 461out: 462 shash_desc_zero(desc); 463 return err; 464} 465 466static void michael_mic_hdr(struct sk_buff *skb, u8 *hdr) 467{ 468 struct ieee80211_hdr *hdr11; 469 470 hdr11 = (struct ieee80211_hdr *)skb->data; 471 switch (le16_to_cpu(hdr11->frame_control) & 472 (IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS)) { 473 case IEEE80211_FCTL_TODS: 474 ether_addr_copy(hdr, hdr11->addr3); /* DA */ 475 ether_addr_copy(hdr + ETH_ALEN, hdr11->addr2); /* SA */ 476 break; 477 case IEEE80211_FCTL_FROMDS: 478 ether_addr_copy(hdr, hdr11->addr1); /* DA */ 479 ether_addr_copy(hdr + ETH_ALEN, hdr11->addr3); /* SA */ 480 break; 481 case IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS: 482 ether_addr_copy(hdr, hdr11->addr3); /* DA */ 483 ether_addr_copy(hdr + ETH_ALEN, hdr11->addr4); /* SA */ 484 break; 485 case 0: 486 ether_addr_copy(hdr, hdr11->addr1); /* DA */ 487 ether_addr_copy(hdr + ETH_ALEN, hdr11->addr2); /* SA */ 488 break; 489 } 490 491 /* priority */ 492 hdr[12] = 0; 493 494 /* reserved */ 495 hdr[13] = 0; 496 hdr[14] = 0; 497 hdr[15] = 0; 498} 499 500static int rtllib_michael_mic_add(struct sk_buff *skb, int hdr_len, void *priv) 501{ 502 struct rtllib_tkip_data *tkey = priv; 503 u8 *pos; 504 struct ieee80211_hdr *hdr; 505 506 hdr = (struct ieee80211_hdr *)skb->data; 507 508 if (skb_tailroom(skb) < 8 || skb->len < hdr_len) { 509 netdev_dbg(skb->dev, 510 "Invalid packet for Michael MIC add (tailroom=%d hdr_len=%d skb->len=%d)\n", 511 skb_tailroom(skb), hdr_len, skb->len); 512 return -1; 513 } 514 515 michael_mic_hdr(skb, tkey->tx_hdr); 516 517 if (RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_control))) 518 tkey->tx_hdr[12] = *(skb->data + hdr_len - 2) & 0x07; 519 pos = skb_put(skb, 8); 520 if (michael_mic(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr, 521 skb->data + hdr_len, skb->len - 8 - hdr_len, pos)) 522 return -1; 523 524 return 0; 525} 526 527static void rtllib_michael_mic_failure(struct net_device *dev, 528 struct ieee80211_hdr *hdr, 529 int keyidx) 530{ 531 union iwreq_data wrqu; 532 struct iw_michaelmicfailure ev; 533 534 /* TODO: needed parameters: count, keyid, key type, TSC */ 535 memset(&ev, 0, sizeof(ev)); 536 ev.flags = keyidx & IW_MICFAILURE_KEY_ID; 537 if (hdr->addr1[0] & 0x01) 538 ev.flags |= IW_MICFAILURE_GROUP; 539 else 540 ev.flags |= IW_MICFAILURE_PAIRWISE; 541 ev.src_addr.sa_family = ARPHRD_ETHER; 542 ether_addr_copy(ev.src_addr.sa_data, hdr->addr2); 543 memset(&wrqu, 0, sizeof(wrqu)); 544 wrqu.data.length = sizeof(ev); 545 wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&ev); 546} 547 548static int rtllib_michael_mic_verify(struct sk_buff *skb, int keyidx, 549 int hdr_len, void *priv) 550{ 551 struct rtllib_tkip_data *tkey = priv; 552 u8 mic[8]; 553 struct ieee80211_hdr *hdr; 554 555 hdr = (struct ieee80211_hdr *)skb->data; 556 557 if (!tkey->key_set) 558 return -1; 559 560 michael_mic_hdr(skb, tkey->rx_hdr); 561 if (RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_control))) 562 tkey->rx_hdr[12] = *(skb->data + hdr_len - 2) & 0x07; 563 564 if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr, 565 skb->data + hdr_len, skb->len - 8 - hdr_len, mic)) 566 return -1; 567 568 if (memcmp(mic, skb->data + skb->len - 8, 8) != 0) { 569 struct ieee80211_hdr *hdr; 570 571 hdr = (struct ieee80211_hdr *)skb->data; 572 netdev_dbg(skb->dev, 573 "Michael MIC verification failed for MSDU from %pM keyidx=%d\n", 574 hdr->addr2, keyidx); 575 netdev_dbg(skb->dev, "%d\n", 576 memcmp(mic, skb->data + skb->len - 8, 8) != 0); 577 if (skb->dev) { 578 pr_info("skb->dev != NULL\n"); 579 rtllib_michael_mic_failure(skb->dev, hdr, keyidx); 580 } 581 tkey->dot11RSNAStatsTKIPLocalMICFailures++; 582 return -1; 583 } 584 585 /* Update TSC counters for RX now that the packet verification has 586 * completed. 587 */ 588 tkey->rx_iv32 = tkey->rx_iv32_new; 589 tkey->rx_iv16 = tkey->rx_iv16_new; 590 591 skb_trim(skb, skb->len - 8); 592 593 return 0; 594} 595 596static int rtllib_tkip_set_key(void *key, int len, u8 *seq, void *priv) 597{ 598 struct rtllib_tkip_data *tkey = priv; 599 int keyidx; 600 struct crypto_shash *tfm = tkey->tx_tfm_michael; 601 struct crypto_shash *tfm3 = tkey->rx_tfm_michael; 602 603 keyidx = tkey->key_idx; 604 memset(tkey, 0, sizeof(*tkey)); 605 tkey->key_idx = keyidx; 606 tkey->tx_tfm_michael = tfm; 607 tkey->rx_tfm_michael = tfm3; 608 609 if (len == TKIP_KEY_LEN) { 610 memcpy(tkey->key, key, TKIP_KEY_LEN); 611 tkey->key_set = 1; 612 tkey->tx_iv16 = 1; /* TSC is initialized to 1 */ 613 if (seq) { 614 tkey->rx_iv32 = (seq[5] << 24) | (seq[4] << 16) | 615 (seq[3] << 8) | seq[2]; 616 tkey->rx_iv16 = (seq[1] << 8) | seq[0]; 617 } 618 } else if (len == 0) { 619 tkey->key_set = 0; 620 } else { 621 return -1; 622 } 623 624 return 0; 625} 626 627static int rtllib_tkip_get_key(void *key, int len, u8 *seq, void *priv) 628{ 629 struct rtllib_tkip_data *tkey = priv; 630 631 if (len < TKIP_KEY_LEN) 632 return -1; 633 634 if (!tkey->key_set) 635 return 0; 636 memcpy(key, tkey->key, TKIP_KEY_LEN); 637 638 if (seq) { 639 /* Return the sequence number of the last transmitted frame. */ 640 u16 iv16 = tkey->tx_iv16; 641 u32 iv32 = tkey->tx_iv32; 642 643 if (iv16 == 0) 644 iv32--; 645 iv16--; 646 seq[0] = tkey->tx_iv16; 647 seq[1] = tkey->tx_iv16 >> 8; 648 seq[2] = tkey->tx_iv32; 649 seq[3] = tkey->tx_iv32 >> 8; 650 seq[4] = tkey->tx_iv32 >> 16; 651 seq[5] = tkey->tx_iv32 >> 24; 652 } 653 654 return TKIP_KEY_LEN; 655} 656 657static void rtllib_tkip_print_stats(struct seq_file *m, void *priv) 658{ 659 struct rtllib_tkip_data *tkip = priv; 660 661 seq_printf(m, 662 "key[%d] alg=TKIP key_set=%d tx_pn=%02x%02x%02x%02x%02x%02x rx_pn=%02x%02x%02x%02x%02x%02x replays=%d icv_errors=%d local_mic_failures=%d\n", 663 tkip->key_idx, tkip->key_set, 664 (tkip->tx_iv32 >> 24) & 0xff, 665 (tkip->tx_iv32 >> 16) & 0xff, 666 (tkip->tx_iv32 >> 8) & 0xff, 667 tkip->tx_iv32 & 0xff, 668 (tkip->tx_iv16 >> 8) & 0xff, 669 tkip->tx_iv16 & 0xff, 670 (tkip->rx_iv32 >> 24) & 0xff, 671 (tkip->rx_iv32 >> 16) & 0xff, 672 (tkip->rx_iv32 >> 8) & 0xff, 673 tkip->rx_iv32 & 0xff, 674 (tkip->rx_iv16 >> 8) & 0xff, 675 tkip->rx_iv16 & 0xff, 676 tkip->dot11RSNAStatsTKIPReplays, 677 tkip->dot11RSNAStatsTKIPICVErrors, 678 tkip->dot11RSNAStatsTKIPLocalMICFailures); 679} 680 681static struct lib80211_crypto_ops rtllib_crypt_tkip = { 682 .name = "R-TKIP", 683 .init = rtllib_tkip_init, 684 .deinit = rtllib_tkip_deinit, 685 .encrypt_mpdu = rtllib_tkip_encrypt, 686 .decrypt_mpdu = rtllib_tkip_decrypt, 687 .encrypt_msdu = rtllib_michael_mic_add, 688 .decrypt_msdu = rtllib_michael_mic_verify, 689 .set_key = rtllib_tkip_set_key, 690 .get_key = rtllib_tkip_get_key, 691 .print_stats = rtllib_tkip_print_stats, 692 .extra_mpdu_prefix_len = 4 + 4, /* IV + ExtIV */ 693 .extra_mpdu_postfix_len = 4, /* ICV */ 694 .extra_msdu_postfix_len = 8, /* MIC */ 695 .owner = THIS_MODULE, 696}; 697 698static int __init rtllib_crypto_tkip_init(void) 699{ 700 return lib80211_register_crypto_ops(&rtllib_crypt_tkip); 701} 702 703static void __exit rtllib_crypto_tkip_exit(void) 704{ 705 lib80211_unregister_crypto_ops(&rtllib_crypt_tkip); 706} 707 708module_init(rtllib_crypto_tkip_init); 709module_exit(rtllib_crypto_tkip_exit); 710 711MODULE_LICENSE("GPL"); 712