MCPcopy Index your code
hub / github.com/secdev/scapy / gen_TKIP_RC4_key

Function gen_TKIP_RC4_key

scapy/modules/krack/crypto.py:150–216  ·  view source on GitHub ↗

Implement TKIP WEPSeed generation TSC: packet IV TA: target addr bytes TK: temporal key

(TSC, TA, TK)

Source from the content-addressed store, hash-verified

148
149
150def gen_TKIP_RC4_key(TSC, TA, TK):
151 """Implement TKIP WEPSeed generation
152 TSC: packet IV
153 TA: target addr bytes
154 TK: temporal key
155 """
156
157 assert len(TSC) == 6
158 assert len(TA) == 6
159 assert len(TK) == 16
160 assert all(isinstance(x, int) for x in TSC + TA + TK)
161
162 # Phase 1
163 # 802.11i p.54
164
165 # Phase 1 - Step 1
166 TTAK = []
167 TTAK.append(_MK16(TSC[3], TSC[2]))
168 TTAK.append(_MK16(TSC[5], TSC[4]))
169 TTAK.append(_MK16(TA[1], TA[0]))
170 TTAK.append(_MK16(TA[3], TA[2]))
171 TTAK.append(_MK16(TA[5], TA[4]))
172
173 # Phase 1 - Step 2
174 for i in range(PHASE1_LOOP_CNT):
175 j = 2 * (i & 1)
176 TTAK[0] = _CAST16(TTAK[0] + _SBOX16(TTAK[4] ^ _MK16(TK[1 + j], TK[0 + j]))) # noqa: E501
177 TTAK[1] = _CAST16(TTAK[1] + _SBOX16(TTAK[0] ^ _MK16(TK[5 + j], TK[4 + j]))) # noqa: E501
178 TTAK[2] = _CAST16(TTAK[2] + _SBOX16(TTAK[1] ^ _MK16(TK[9 + j], TK[8 + j]))) # noqa: E501
179 TTAK[3] = _CAST16(TTAK[3] + _SBOX16(TTAK[2] ^ _MK16(TK[13 + j], TK[12 + j]))) # noqa: E501
180 TTAK[4] = _CAST16(TTAK[4] + _SBOX16(TTAK[3] ^ _MK16(TK[1 + j], TK[0 + j])) + i) # noqa: E501
181
182 # Phase 2
183 # 802.11i p.56
184
185 # Phase 2 - Step 1
186 PPK = list(TTAK)
187 PPK.append(_CAST16(TTAK[4] + _MK16(TSC[1], TSC[0])))
188
189 # Phase 2 - Step 2
190 PPK[0] = _CAST16(PPK[0] + _SBOX16(PPK[5] ^ _MK16(TK[1], TK[0])))
191 PPK[1] = _CAST16(PPK[1] + _SBOX16(PPK[0] ^ _MK16(TK[3], TK[2])))
192 PPK[2] = _CAST16(PPK[2] + _SBOX16(PPK[1] ^ _MK16(TK[5], TK[4])))
193 PPK[3] = _CAST16(PPK[3] + _SBOX16(PPK[2] ^ _MK16(TK[7], TK[6])))
194 PPK[4] = _CAST16(PPK[4] + _SBOX16(PPK[3] ^ _MK16(TK[9], TK[8])))
195 PPK[5] = _CAST16(PPK[5] + _SBOX16(PPK[4] ^ _MK16(TK[11], TK[10])))
196
197 PPK[0] = _CAST16(PPK[0] + _RotR1(PPK[5] ^ _MK16(TK[13], TK[12])))
198 PPK[1] = _CAST16(PPK[1] + _RotR1(PPK[0] ^ _MK16(TK[15], TK[14])))
199 PPK[2] = _CAST16(PPK[2] + _RotR1(PPK[1]))
200 PPK[3] = _CAST16(PPK[3] + _RotR1(PPK[2]))
201 PPK[4] = _CAST16(PPK[4] + _RotR1(PPK[3]))
202 PPK[5] = _CAST16(PPK[5] + _RotR1(PPK[4]))
203
204 # Phase 2 - Step 3
205 WEPSeed = []
206 WEPSeed.append(TSC[1])
207 WEPSeed.append((TSC[1] | 0x20) & 0x7f)

Callers 2

build_TKIP_payloadFunction · 0.85
parse_data_pktFunction · 0.85

Calls 7

chbFunction · 0.90
_MK16Function · 0.85
_CAST16Function · 0.85
_SBOX16Function · 0.85
_RotR1Function · 0.85
joinMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected