
    h3                     2   d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ d"d	Zd"d
Zd Zg dg dgZdZd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$ G d de%          Z& G d de%          Z'd  Z(d! Z)dS )#    N)unpackpack)crc32)Cipher
algorithms)default_backend)orbchb)	Dot11TKIP)mac2strc                     t          j        |           }t          |dt                                }|                                }|r|                    d|z             |                    |          S )zQEncrypt data @data with key @key, skipping @skip first bytes of the
    keystreamN)modebackend    )r   ARC4r   r   	encryptorupdate)keydataskip	algorithmcipherr   s         ^/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/modules/krack/crypto.pyARC4_encryptr      sr     $$IID/2C2CDDDF  ""I )4(((D!!!    c                 $    t          | ||          S )zQDecrypt data @data with key @key, skipping @skip first bytes of the
    keystream)r   )r   r   r   s      r   ARC4_decryptr       s     T4(((r   c                    d}d                     t          ||g          t          ||g          z             }d}d}d}	||dz  dz   dz  k    rnt          j        | |t	          d          z   |z   t	          |          z   t
          j                  }
|dz  }|	|
                                z   }	||dz  dz   dz  k    n|	d	|         S )
z4Source https://stackoverflow.com/questions/12018920/s   Pairwise key expansionr   @   r               N)joinsortedhmacnewr
   hashlibsha1digest)r   amacsmacanoncesnonceABbleniRhmacsha1s              r   customPRF512r5   (   s    !At%%/?(@(@@AAAD	AA
CC'
(
(8CSYY!2SVV!;W\JJ	Q!!! CC'
(
( UdU8Or   (   i  i  i  i  i  i  i  iT  iP`  i  i  i}V  i  ib  iM  i  iE  i  i@  i  i  i  iɎ  i  iA  ig  i_  iE  i#  iS  i  i[  iu  i  i=  ijL  iZl  iA~  i  iO  i\h  iQ  i4  i  i  is  iSb  i?*  i  iR  ieF  i^  i(0  i7  i
  i/  i	  i6$  i  i=  i&  iiN  i  i  i  i  itX  i.4  i-6  i  i  i[  i  iMv  ia  i}  i{R  i>  iq^  i  i  ih  r   i,  i`@  i  iy  i  i  iF  ig  iKr  iޔ  iԘ  i  iJ  ik  i*  iO  i  iņ  iך  iUf  i  iϊ  i  i  i  i  iDx  i%  iK  i  i]  i  i  i?  i!  iHp  i  ic  iw  iu  icB  i0   i  i  im  iL  i  i5&  i/  i  i5  ï  i9.  iW  iU  i  iGz  i  i  i+2  i  i  i  iў  i  ifD  i~T  i;  i  iʌ  i)  ik  i<(  iy  i  i  iv  i;  iVd  iNt  i  iے  i
  ilH  i  i]  in  iC  i  i9  i1  i7  i  i2  iC  iYn  i  i  id  iҜ  iI  i  i  i  i%  i  i  iG  i  io  i  ioJ  ir\  i$8  iW  is  iQ  i#  i|  i  i!>  iݖ  ia  i  i  i  iB|  iq  i  iؐ  i  i  i  i  i_j  i  ii  i  iX  i':  i'  i8  i  i+  i3"  i  ip  i  i3  i-  i"<  i  i   iI  i  ixP  iz  i  iY  i	  i  ie  i1  iƄ  i  iÂ  i)  iwZ  i  i{  i  im  i:,  (   iƥ  i  i  i  i  iֽ  iޱ  iT  i`P  i  iΩ  iV}  i  ib  iM  i  iE  i  i@  i  i  i  i  i  iA  ig  i_  iE  i#  iS  i  i[  iu  i  i=  iLj  ilZ  i~A  i  iO  ih\  iQ  i4  i  i  is  ibS  i*?  i  iR  iFe  i^  i0(  i7  i
  i/  i	  i$6  i  i=  i&  iNi  i  i  i  i  iXt  i4.  i6-  iܲ  i  i[  i  ivM  ia  i}  iR{  i>  i^q  i  i  ih  r   i,  i@`  i  iy  i  iԾ  iF  ig  irK  i  i  i  iJ  ik  i*  iO  i  i  i  ifU  i  i  i  i  i  i  ixD  i%  iK  i  i]  i  i  i?  i!  ipH  i  ic  iw  iu  iBc  i 0  i  i  im  iL  i  i&5  i/  i  i5  i  i.9  iW  iU  i  izG  iȬ  i  i2+  i  i  i  i  i  iDf  iT~  i;  i  i  i)  ik  i(<  iy  i  i  iv  i;  idV  itN  i  i  i
  iHl  i  i]  in  iC  iĦ  i9  i1  i7  i  i2  iC  inY  iڷ  i  id  i  iI  iش  i  i  i%  iʯ  i  iG  i  io  i  iJo  i\r  i8$  iW  is  iQ  i#  i|  i  i>!  i  ia  i  i  i  i|B  iq  i̪  i  i  i  i  i£  ij_  i  ii  i  iX  i:'  i'  i8  i  i+  i"3  iһ  ip  i  i3  i-  i<"  i  i   iI  i  iPx  iz  i  iY  i	  i  ie  i1  i  iи  i  i)  iZw  i  i{  i  im  i,:  r    c                     | dz  |z  S )Nr     )b1b2s     r   _MK16r:      s    !Gr>r   c                 \    t           d         | dz           t           d         | dz	           z  S )Nr      r#   r    )_SBOXS)indexs    r   _SBOX16r?      s'    !9UT\"VAY
%<<<r   c                     | dz  S )Ni  r7   values    r   _CAST16rC      s    6>r   c                     | dz	  dz  | dz  z  S )Nr#   i     r7   rA   s    r   _RotR1rF      s    aZ6!erk22r   c                    t          |           dk    sJ t          |          dk    sJ t          |          dk    sJ t          d | |z   |z   D                       sJ g }|                    t          | d         | d                              |                    t          | d         | d                              |                    t          |d         |d	                              |                    t          |d         |d                              |                    t          |d         |d                              t	          t
                    D ]}d|dz  z  }t          |d	         t          |d         t          |d|z            |d	|z                      z            z             |d	<   t          |d         t          |d	         t          |d|z            |d|z                      z            z             |d<   t          |d         t          |d         t          |d
|z            |d|z                      z            z             |d<   t          |d         t          |d         t          |d|z            |d|z                      z            z             |d<   t          |d         t          |d         t          |d|z            |d	|z                      z            z   |z             |d<   t          |          }|                    t          |d         t          | d         | d	                   z                        t          |d	         t          |d         t          |d         |d	                   z            z             |d	<   t          |d         t          |d	         t          |d         |d                   z            z             |d<   t          |d         t          |d         t          |d         |d                   z            z             |d<   t          |d         t          |d         t          |d         |d                   z            z             |d<   t          |d         t          |d         t          |d
         |d                   z            z             |d<   t          |d         t          |d         t          |d         |d                   z            z             |d<   t          |d	         t          |d         t          |d         |d                   z            z             |d	<   t          |d         t          |d	         t          |d         |d                   z            z             |d<   t          |d         t          |d                   z             |d<   t          |d         t          |d                   z             |d<   t          |d         t          |d                   z             |d<   t          |d         t          |d                   z             |d<   g }|                    | d                    |                    | d         dz  dz             |                    | d	                    |                    |d         t          |d         |d	                   z  dz	  dz             t	          d          D ]>}|                    ||         dz             |                    ||         dz	             ?t          |          dk    sJ d
                    d |D                       S )zhImplement TKIP WEPSeed generation
    TSC: packet IV
    TA: target addr bytes
    TK: temporal key
          c              3   @   K   | ]}t          |t                    V  d S N)
isinstanceint.0xs     r   	<genexpr>z#gen_TKIP_RC4_key.<locals>.<genexpr>   s,      99az!S!!999999r               r#   r   	   r                
   rE             r<   r   c              3   4   K   | ]}t          |          V  d S rK   )r
   rN   s     r   rQ   z#gen_TKIP_RC4_key.<locals>.<genexpr>   s(      ,,qCFF,,,,,,r   )lenallappendr:   rangePHASE1_LOOP_CNTrC   r?   listrF   r$   )TSCTATKTTAKr2   jPPKWEPSeeds           r   gen_TKIP_RC4_keyrm      sv    s88q====r77a<<<<r77b====9938b=99999999 DKKc!fc!f%%&&&KKc!fc!f%%&&&KKbeRU##$$$KKbeRU##$$$KKbeRU##$$$ ?## X XQK$q'GDGeBq1uIr!a%y6Q6Q,Q$R$RRSSQ$q'GDGeBq1uIr!a%y6Q6Q,Q$R$RRSSQ$q'GDGeBq1uIr!a%y6Q6Q,Q$R$RRSSQ$q'GDGeBrAvJ2PQ6
6S6S,S$T$TTUUQ$q'GDGeBq1uIr!a%y6Q6Q,Q$R$RRUVVWWQ t**CJJwtAws1vs1v!6!6677888 SVgc!fuRUBqE/B/B&BCCCDDCFSVgc!fuRUBqE/B/B&BCCCDDCFSVgc!fuRUBqE/B/B&BCCCDDCFSVgc!fuRUBqE/B/B&BCCCDDCFSVgc!fuRUBqE/B/B&BCCCDDCFSVgc!fuRVRV/D/D&DEEEFFCFSVfSVeBrFBrF.C.C%CDDDEECFSVfSVeBrFBrF.C.C%CDDDEECFSVfSVnn,--CFSVfSVnn,--CFSVfSVnn,--CFSVfSVnn,--CF GNN3q6NNCFTMT)***NN3q6NNSVeBqE2a5111a74?@@@1XX $ $s1v}%%%s1v{####w<<288,,G,,,,,,r   c                 0    | |dz  z	  | d|z
  dz  z  z  dz  S Nr]       r7   rB   shifts     r   _rotate_right32rs      )    ebj!ErEzR.?$@@JNNr   c                 0    | |dz  z  | d|z
  dz  z	  z  dz  S ro   r7   rq   s     r   _rotate_left32rv      rt   r   c                 $    | dz  dz	  | dz  dz  z  S )z(Swap 2 least significant bytes of @valuel    ~ r    i  r7   rA   s    r   _XSWAPrx      s!    ZA%5:+=!*CDDr   c                     |t          | d          z  }| |z   dz  } |t          |           z  }| |z   dz  } |t          | d          z  }| |z   dz  } |t          | d          z  }| |z   dz  } | |fS )zDefined in 802.11i p.49   l        rR   rS   )rv   rx   rs   )m_lm_rs     r   
_michael_br}      s    
sB''
'C9
C
s
C9
C
sA&&
&C9
C
Q''
'C9
C8Or   c                 h   t          t          |          d          \  }}|t          d          z   dd|z
  z  z   }t          d|           \  }}t	          |dz             D ]A}t          d||dz  |dz  dz                      d         }||z  }t          ||          \  }}Bt          d||          S )	zDefined in 802.11i p.48rU   Z   r   rY   z<IIrS   <Ir   )divmodr`   r
   r   rc   r}   r   )	r   to_hashnb_blocknb_extra_bytesr   r{   r|   r2   block_is	            r   michaelr      s      &c'llA66HnSYYA,>!??D eS!!HC8a<   ( (tAE!a%!)O455a8wc3''SSsC   r   c                 F   | j         j        sJ | t                   }|j        }|j        st          d          |j        }|j        }|j        }|j	        }|j
        }|j        }|j        }	|dz  dz  |k    sJ d t          | j                  D             }
||||||	g}||
|fS )z4Extract TSCs, TA and encoded-data from a packet @pktz Extended IV must be set for TKIPr]   r^   c                 ,    g | ]}t          |          S r7   r	   rO   es     r   
<listcomp>z"parse_TKIP_hdr.<locals>.<listcomp>&  s    	-	-	-Q#a&&	-	-	-r   )FCfield	protectedr   r   ext_iv
ValueErrorTSC0TSC1rl   TSC2TSC3TSC4TSC5r   addr2)pkt
tkip_layerpayloadr   r   WEPseedr   r   r   r   rg   rf   s               r   parse_TKIP_hdrr     s     ;     YJoG  =;<<<?D?D G ?D?D?D?D 4K47****	-	-'#),,	-	-	-BtT4
.CGr   c                    |dz	  dz  |dz	  dz  |dz	  dz  |dz	  dz  |dz	  dz  |dz  f\  }}}}}}	d}
t          |          t          |dz  dz            z   t          |	          z   t          |
          z   }|t          |          t          |          z   t          |          z   t          |          z   z  }d t          |          D             }|	|||||g}d	 |D             }t          |||          }|t          ||           z   S )
zaBuild a TKIP header for IV @iv and mac @mac, and encrypt @data
    based on temporal key @tk
    (   r<   r]      rI   r    r^   c                 ,    g | ]}t          |          S r7   r   r   s     r   r   z&build_TKIP_payload.<locals>.<listcomp><  s    	'	'	'Q#a&&	'	'	'r   c                 ,    g | ]}t          |          S r7   r   rN   s     r   r   z&build_TKIP_payload.<locals>.<listcomp>>      			Q#a&&			r   )r
   r   rm   r   )r   ivmactkr   r   r   r   r   r   bitfieldTKIP_hdrrg   rf   rh   rc4_keys                   r   build_TKIP_payloadr   ,  s.   
 
rT	rT	rT	rT	qD
T	*&D$dD$ H4yy3tt3444s4yy@3x==PHD		CII%D		1CII==H	'	''#,,	'	'	'BtT4
.C		"			BsB++Gl7D1111r   c                     t          |           \  }}}d |D             }t          |||          }t          ||          S )z9Extract data from a WPA packet @pkt with temporal key @tkc                 ,    g | ]}t          |          S r7   r   rN   s     r   r   z"parse_data_pkt.<locals>.<listcomp>G  r   r   )r   rm   r   )r   r   rf   rg   r   rh   r   s          r   parse_data_pktr   D  sI    "3''MCT		"			BsB++G&&&r   c                       e Zd ZdZdS )ICVErrorz(The expected ICV is not the computed oneN__name__
__module____qualname____doc__r7   r   r   r   r   M          22Dr   r   c                       e Zd ZdZdS )MICErrorz(The expected MIC is not the computed oneNr   r7   r   r   r   r   R  r   r   r   c                 p   t          |           dk    sJ | dd         }| dd         }| dd         }t          dt          ||z             dz            }||k    rt                      t	          |          }t	          |          }	t          ||	|z   dz   |z             }
|
|k    rt                      |S )z=Check MIC, ICV & return the data from a decrypted TKIP packetrX   Nir   rp   s       )r`   r   r   r   r   r   r   )r   mic_keysourcedestICVMIC
data_clearexpected_ICVsadaexpected_MICs              r   check_MIC_ICVr   W  s    t99r>>>>
 rss)C
s2v,CdsdJeJ$455
BCCLsjj	B	B7BGk$9J$FGGLsjjr   c                     t          |          }t          |          }t          |||z   dz   dz   | z             }t          dt          | |z             dz            }| |z   |z   S )z0Compute and return the data with its MIC and ICVr   s      r   rp   )r   r   r   r   )r   r   r   r   r   r   r   r   s           r   build_MIC_ICVr   p  sk    
 
B	B
'27W,{:TA
B
BC
tU4#:&&3
4
4C#:r   )r   )*r(   r&   structr   r   zlibr   &cryptography.hazmat.primitives.ciphersr   r   cryptography.hazmat.backendsr   scapy.compatr	   r
   scapy.layers.dot11r   scapy.utilsr   r   r   r5   r=   rd   r:   r?   rC   rF   rm   rs   rv   rx   r}   r   r   r   r   	Exceptionr   r   r   r   r7   r   r   <module>r      s]  
                 E E E E E E E E 8 8 8 8 8 8 ! ! ! ! ! ! ! ! ( ( ( ( ( (      
	" 	" 	" 	") ) ) )  (! ! !D! ! !GE
P   = = =  3 3 3B- B- B-PO O OO O OE E E

 
 
! ! !(  @2 2 20' ' '	 	 	 	 	y 	 	 	
	 	 	 	 	y 	 	 	
  2
 
 
 
 
r   