Build a TKIP header for IV @iv and mac @mac, and encrypt @data based on temporal key @tk
(data, iv, mac, tk)
| 298 | |
| 299 | |
| 300 | def build_TKIP_payload(data, iv, mac, tk): |
| 301 | """Build a TKIP header for IV @iv and mac @mac, and encrypt @data |
| 302 | based on temporal key @tk |
| 303 | """ |
| 304 | TSC5, TSC4, TSC3, TSC2, TSC1, TSC0 = ( |
| 305 | (iv >> 40) & 0xFF, |
| 306 | (iv >> 32) & 0xFF, |
| 307 | (iv >> 24) & 0xFF, |
| 308 | (iv >> 16) & 0xFF, |
| 309 | (iv >> 8) & 0xFF, |
| 310 | iv & 0xFF |
| 311 | ) |
| 312 | bitfield = 1 << 5 # Extended IV |
| 313 | TKIP_hdr = chb(TSC1) + chb((TSC1 | 0x20) & 0x7f) + chb(TSC0) + chb(bitfield) # noqa: E501 |
| 314 | TKIP_hdr += chb(TSC2) + chb(TSC3) + chb(TSC4) + chb(TSC5) |
| 315 | |
| 316 | TA = [orb(e) for e in mac2str(mac)] |
| 317 | TSC = [TSC0, TSC1, TSC2, TSC3, TSC4, TSC5] |
| 318 | TK = [orb(x) for x in tk] |
| 319 | |
| 320 | rc4_key = gen_TKIP_RC4_key(TSC, TA, TK) |
| 321 | return TKIP_hdr + ARC4_encrypt(rc4_key, data) |
| 322 | |
| 323 | |
| 324 | def parse_data_pkt(pkt, tk): |
no test coverage detected