
    h~                        d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& dd	l'm(Z(m)Z) dd
l*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z=m>Z>  G d de          Z? G d de          Z@ G d de          ZAe8e5e5dZB G d de          ZC G d de          ZDg dZE G d de          ZF G d de          ZG G d de          ZH G d  d!e          ZIeIe2d"<   eIe3d"<   d# ZJ ed$          d%iZK G d& d'e(          ZLd( ZM G d) d*e(          ZN G d+ d,e(          ZO G d- d.e:          ZPd/d0d1d2d3d4d5d6d7d8d9d:d8d;d<d=ZQd> ZR G d? d@e(          ZS G dA dBe:          ZT G dC dDe(          ZU e)ePeP           ePeBdE<    G dF dGe1          ZVdS )Ha  
SPNEGO

Implements parts of:

- GSSAPI SPNEGO: RFC4178 > RFC2478
- GSSAPI SPNEGO NEGOEX: [MS-NEGOEX]

.. note::
    You will find more complete documentation for this layer over at
    `GSSAPI <https://scapy.readthedocs.io/en/latest/layers/gssapi.html#spnego>`_
    N)UUID)ASN1_OIDASN1_STRINGASN1_Codecs)conf)
ASN1F_CHOICEASN1F_ENUMERATEDASN1F_FLAGSASN1F_GENERAL_STRING	ASN1F_OIDASN1F_PACKETASN1F_SEQUENCEASN1F_SEQUENCE_OFASN1F_STRINGASN1F_optional)ASN1_Packet)FieldListFieldLEIntEnumField
LEIntFieldLELongEnumFieldLELongFieldLEShortFieldMultipleTypeFieldPacketFieldPacketListFieldStrFieldStrFixedLenFieldUUIDEnumField	UUIDFieldXStrFixedLenFieldXStrLenField)Packetbind_layers)	GSSAPI_BLOBGSSAPI_BLOB_SIGNATUREGSS_C_FLAGSGSS_S_BAD_MECHGSS_S_COMPLETEGSS_S_CONTINUE_NEEDEDSSP_GSSAPI_OIDS_GSSAPI_SIGNATURE_OIDS)Kerberos)NEGOEX_EXCHANGE_NTLMNTLM_Header_NTLMPayloadField_NTLMPayloadPacket)DictOptionalTuplec                   4    e Zd Zej        Z edd          ZdS )SPNEGO_MechTypeoidN)__name__
__module____qualname__r   BER
ASN1_codecr   	ASN1_root     W/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/spnego.pyr6   r6   ^   s&        J	%&&IIIr?   r6   c                   6    e Zd Zej        Z edde          ZdS )SPNEGO_MechTypes	mechTypesN)	r8   r9   r:   r   r;   r<   r   r6   r=   r>   r?   r@   rB   rB   c   s)        J!!+t_EEIIIr?   rB   c                   4    e Zd Zej        Z edd          ZdS )SPNEGO_MechListMICvalue N)r8   r9   r:   r   r;   r<   r   r=   r>   r?   r@   rE   rE   h   s&        JWb))IIIr?   rE   )1.3.6.1.4.1.311.2.2.101.2.840.48018.1.2.21.2.840.113554.1.2.2c                   (     e Zd Z fdZ fdZ xZS )_SPNEGO_Token_Fieldc                 x    |d}t          t          |                               |t          |                    S )Nr?   )superrL   i2mbytes)selfpktx	__class__s      r@   rO   z_SPNEGO_Token_Field.i2mu   s4    9A($//33CqBBBr?   c                    t          t          |                               ||          \  }}t          |j        t
                    r|j        j        }n't          |j        t                    r|j        j        g}|rM|d         rE|d         j	        j
        t          v r,t          |d         j	        j
                 |j
                  |fS ||fS Nr   )rN   rL   m2i
isinstance
underlayerSPNEGO_negTokenInitrC   SPNEGO_negTokenRespsupportedMechr7   val_mechDissector)rQ   rR   sdatrtypesrT   s         r@   rW   z_SPNEGO_Token_Field.m2iz   s    *D1155c1==Qcn&9:: 	3N,EE(;<< 	3^12E 	@U1X 	@%(,"2n"D"D!%(,"23CG<<a??Avr?   )r8   r9   r:   rO   rW   __classcell__rT   s   @r@   rL   rL   t   sV        C C C C C
        r?   rL   c                   4    e Zd Zej        Z edd          ZdS )SPNEGO_TokenrF   N)r8   r9   r:   r   r;   r<   rL   r=   r>   r?   r@   rf   rf      s'        J##GT22IIIr?   rf   )	delegFlag
mutualFlag
replayFlagsequenceFlag
supersededanonFlagconfFlag	integFlagc            
           e Zd Zej        Z e e eddd                     e eddd                              Z	dS )SPNEGO_negHintshintNamez$not_defined_in_RFC4178@please_ignore   explicit_taghintAddressN   )
r8   r9   r:   r   r;   r<   r   r   r   r=   r>   r?   r@   rp   rp      sy        J  BQU  	
 	

 	  4HHH	
 	
	 	IIIr?   rp   c                   D   e Zd Zej        Z e e edde	d                     e e
dded                     e edded	                     e ed
ded                     e edded                     e edded                              ZdS )rZ   rC   Nrr   rs   reqFlags   )implicit_tag	mechToken   negHints   mechListMIC   _mechListMIC)r8   r9   r:   r   r;   r<   r   r   r   r6   r
   _ContextFlagsr   rf   rp   rE   r=   r>   r?   r@   rZ   rZ      s       Jk4tTTT	
 	
 	{{:t]QUVVVWWLdLtLLL	
 	
 	LT?NNN	
 	
 	L.@tTTT	
 	
 	L/APTUUU	
 	
! IIIr?   rZ   c                      e Zd Zej        Z e e edddddddd	                     e e	d
 e
            e
d	                     e e	dded	                     e e	dded	                              ZdS )r[   	negResultr   zaccept-completedzaccept-incompleterejectzrequest-mic)r            rr   rs   r\   rv   responseTokenNr|   r   r~   )r8   r9   r:   r   r;   r<   r   r   r	   r   r6   rf   rE   r=   r>   r?   r@   r[   r[      s        J)*$	  "
 
 
	
 	
 	L!2!2ORV  	
 	

 	L$4PPP	
 	
 	L.@tTTT	
 	
- IIIr?   r[   c                       e Zd Zej        Z ed e             ed e            ed           ed e	            e	d                    Z
dS )SPNEGO_negTokentokennegTokenInitrr   rs   negTokenResprv   N)r8   r9   r:   r   r;   r<   r   rZ   r   r[   r=   r>   r?   r@   r   r      s        J!!		
 	
 	
 	!!		
 	
 	
 IIIr?   r   z1.3.6.1.5.5.2c                 <    t          t          |                     S )zJ
    Implementation of RFC 4178 - Appendix D. mechListMIC Computation
    rC   )rP   rB   )oidss    r@   r   r      s     !D111222r?   $5c33530d-eaf9-0d4d-b2ec-4ae3786ec308zUUID('[NTLM-UUID]')c                       e Zd Z eddd           eddddd	d
ddddd           edd           edd           edd           edd          gZd ZdS )NEGOEX_MESSAGE_HEADER	SignatureNEGOEXTS   lengthMessageTyper   INITIATOR_NEGOACCEPTOR_NEGOINITIATOR_META_DATAACCEPTOR_META_DATA	CHALLENGE
AP_REQUESTVERIFYALERT)r   r   r   r               SequenceNumcbHeaderLengthNcbMessageLengthConversationIdc                 (   | j         8|dd          t          j        dt          |                    z   |dd          z   }| j        H|dd          t          j        dt          |          t          |          z             z   |dd          z   }||z   S )N   <I      )r   structpacklenr   rQ   rR   pays      r@   
post_buildz NEGOEX_MESSAGE_HEADER.post_build"  s    &bcc(V[s3xx8883rss8CC'bcc(V[s3xx#c((/BCCCc"##hNCSyr?   )	r8   r9   r:   r   r   r   r   fields_descr   r>   r?   r@   r   r     s        j;;;%%+*!"	 		
 	
 	
=!$$
#T**
$d++	"D))'K,    r?   r   c                 8   | j         d         D ]
\  }}|                     d          j        |                             | |          }|                     d          j        |                             | |          }||         }|                     |dz             .|d|         t          j        d|          z   ||dz   d         z   }|                     |dz             1|d|dz            t          j        d|          z   ||dz   d         z   }||z  }|S )	z:Util function to build the offset and populate the lengthsPayloadBufferOffsetNr   r   Countz<Hr   )fields	get_field
fields_mapi2leni2countgetfieldvalr   r   )	rQ   p
pay_offsetr   
field_namerF   r   countoffsets	            r@   _NEGOEX_post_buildr   *  s     "[3 
 

E	**5jAGGeTTy))4Z@HHuUU
#J788@'6'
V[z:::Qvz||_LAJ0119,FQJ,&+dE":"::Qvz||_LAf

Hr?   c                   D    e Zd Z edd           edd          gZd ZdS )NEGOEX_BYTE_VECTORByteArrayBufferOffsetr   ByteArrayLengthc                     t           j        S N)r   padding_layer)rQ   payloads     r@   guess_payload_classz&NEGOEX_BYTE_VECTOR.guess_payload_classA  s    !!r?   N)r8   r9   r:   r   r   r   r>   r?   r@   r   r   ;  sJ        
*A..
$a((K
" " " " "r?   r   c                   >    e Zd Z edd           edd          gZdS )NEGOEX_EXTENSION_VECTORExtensionArrayOffsetr   ExtensionCountN)r8   r9   r:   r   r   r   r>   r?   r@   r   r   E  s5        *A..%q))KKKr?   r   c                   2   e Zd ZdZdZe eddd           edd           edd	           e	d
d	           edd	           e	dd	           e
de edg  edd	e          d            edg ed           gd           gZd Zedd            Zd	S )NEGOEX_NEGO_MESSAGE\   r   Randomr?       r   ProtocolVersionAuthSchemeBufferOffsetNAuthSchemeCountExtensionBufferOffsetr   r   
AuthSchemerG   c                     | j         S r   )r   rR   s    r@   <lambda>zNEGOEX_NEGO_MESSAGE.<lambda>`  s	    3+> r?   )
count_from	Extensionc                     | j         S r   )r   r   s    r@   r   zNEGOEX_NEGO_MESSAGE.<lambda>f  s	    3+= r?   c                     | j         dz
  S )Nr   )r   r   s    r@   r   zNEGOEX_NEGO_MESSAGE.<lambda>i  s    C$7"$< r?   length_fromc                 <    t          | || j        ddd          |z   S )N`   f   )r   r   )r   OFFSETr   s      r@   r   zNEGOEX_NEGO_MESSAGE.post_buildn  s;     "$!$ 	  		
r?   c                     |rLt          |          dk    r9t          j        d|dd                   d         }|dv rt          S |dv rt          S | S )N   r   r   r   )r   r   )r   r   )r   r   unpackr   NEGOEX_EXCHANGE_MESSAGE)cls_pktargskargsr   s        r@   dispatch_hookz!NEGOEX_NEGO_MESSAGE.dispatch_hook}  s]     	/CIIOO -d1R4j99!<Kf$$**&&..
r?   r   )r8   r9   r:   r   show_indentr   r    r   r   r   r0   r   r   _NEGOEX_AUTH_SCHEMESr   r   r   r   classmethodr   r>   r?   r@   r   r   L  s;       FK(C333%q))
+T22&--
*D11%t,, !M"d,@AA>>	    +==	   =<#	
 	
 	
K>
 
 
    [  r?   r   CRC32zRSA-MD4zRSA-MD4-DESzDES-MACz	DES-MAC-KzRSA-MDA-DES-KzRSA-MD5zRSA-MD5-DESzRSA-MD5-DES3SHA1zHMAC-SHA1-DES3-KDzHMAC-SHA1-DES3zHMAC-SHA1-96-AES128zHMAC-SHA1-96-AES256)r   r   r   r   r   r   r   r   	   
   r            r   c                 |    | j         dk    rdS | j         dv rdS | j         dv rdS | j         dk    rdS | j         d	v rd
S dS )Nr   r   )r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )ChecksumTyper   s    r@   _checksum_sizer     sg    
1q		\	)	)r		Y	&	&r		Q		q		5	5	5r1r?   c                   v    e Zd Z edd           eddddi           edde           edd	e
          gZdS )NEGOEX_CHECKSUMr   r   ChecksumSchemer   CHECKSUM_SCHEME_RFC3961r   NChecksumValuer?   r   )	r8   r9   r:   r   r   _checksum_typesr!   r   r   r>   r?   r@   r  r    sb        $b))(!a1J-KLLo>>_c~FFF	KKKr?   r  c                       e Zd ZdZdZe edde           edd           edd           e	de e
 edde          d	 fg edd
                    gd           gZdS )r   @   r   r   NExchangeBufferOffsetExchangeLenr   Exchangec                 2    | j         t          d          k    S )Nr   )r   r   r   s    r@   r   z NEGOEX_EXCHANGE_MESSAGE.<lambda>  s    #$JKK)L r?   r?   c                      | j         | j        z
  S r   )r   r   r   s    r@   r   z NEGOEX_EXCHANGE_MESSAGE.<lambda>  s    C$7#:L$L r?   r   )r8   r9   r:   r   r   r   r   r   r   r0   r   r   r.   r   r   r>   r?   r@   r   r     s        FKlD*>??
)1--
=!$$ "! (K
D:NOOL L HZ--	 	  ML'	
 	
 	
KKKr?   r   c                   X    e Zd ZdZe edde           ed e            e          gZ	dS )NEGOEX_VERIFY_MESSAGEr   r   NChecksum)
r8   r9   r:   r   r   r   r   r   r  r   r>   r?   r@   r  r    sH        KlD*>??J 1 1?CCKKKr?   r  1.3.6.1.4.1.311.2.2.30c                       e Zd ZdZddgZdZ G d dej                  Z G d dej                  Zd	d
dZ	g dZ
 fdZd Zd Zd Zd Zd Zd ZdefdZddZ	 ddedee         fdZd defdZd defdZd!defdZdefdZ xZS )"	SPNEGOSSPa  
    The SPNEGO SSP

    :param ssps: a dict with keys being the SSP class, and the value being a
                 dictionary of the keyword arguments to pass it on init.

    Example::

        from scapy.layers.ntlm import NTLMSSP
        from scapy.layers.kerberos import KerberosSSP
        from scapy.layers.spnego import SPNEGOSSP
        from scapy.layers.smbserver import smbserver
        from scapy.libs.rfc3961 import Encryption, Key

        ssp = SPNEGOSSP([
            NTLMSSP(
                IDENTITIES={
                    "User1": MD4le("Password1"),
                    "Administrator": MD4le("Password123!"),
                }
            ),
            KerberosSSP(
                SPN="cifs/server2.domain.local",
                KEY=Key(
                    Encryption.AES256,
                    key=hex_bytes("5e9255c907b2f7e969ddad816eabbec8f1f7a387c7194ecc98b827bdc9421c2b")
                )
            )
        ])
        smbserver(ssp=ssp)
    supported_sspsforce_supported_mechtypesr   c                       e Zd ZdZdZdZdS )SPNEGOSSP.STATEr   r   r   N)r8   r9   r:   FIRST	CHANGESSPNORMALr>   r?   r@   STATEr    s        	r?   r  c                   x     e Zd Zg dZ	 d
 fd	Zd Zd Zd Zed             Z	e	j
        d             Z	d	 Z xZS )SPNEGOSSP.CONTEXT)supported_mechtypesrequested_mechtypes	req_flagsnegotiated_mechtypefirst_choicesub_contextsspNc                 N   t           j        j        | _        d | _        || _        d| _        d | _        d | _        d | _	        |.d |D             | _
        | j
                            d            n|| _
        t          t           j        |                                            d S )NTc                 H    g | ]}t          t          |                      S )r7   )r6   r   ).0r7   s     r@   
<listcomp>z.SPNEGOSSP.CONTEXT.__init__.<locals>.<listcomp>&  s6     , , ,;>O666, , ,r?   c                 T    t           j                            | j        j                  S r   )r  _PREF_ORDERindexr7   r]   )rS   s    r@   r   z,SPNEGOSSP.CONTEXT.__init__.<locals>.<lambda>*  s    )"7"="=aei"H"H r?   )key)r  r  r  stater  r   r"  r!  r#  r$  r  sortrN   CONTEXT__init__)rQ   r  r   r  rT   s       r@   r1  zSPNEGOSSP.CONTEXT.__init__  s     #.DJ'+D$&DN $D'+D$#DDH(0, ,BP, , ,( (--HH .     ,E()#T**3355555r?   c                 8    | j                                          d S r   )r#  
clifailurerQ   s    r@   r3  zSPNEGOSSP.CONTEXT.clifailure2  s    '')))))r?   c                     	 t                               | |          S # t          $ r t          | j        |          cY S w xY wr   )object__getattribute__AttributeErrorgetattrr#  )rQ   attrs     r@   __getattr__zSPNEGOSSP.CONTEXT.__getattr__5  sQ    7..tT:::! 7 7 7t/666667s    ??c                     	 t                               | ||          S # t          $ r t          | j        ||          cY S w xY wr   )r6  __setattr__r8  setattrr#  )rQ   r:  r]   s      r@   r=  zSPNEGOSSP.CONTEXT.__setattr__;  sU    <))$c:::! < < <t/s;;;;;<s     A Ac                 F    | j         r| j         j        S t          d          S rV   )r#  flagsr&   r4  s    r@   r@  zSPNEGOSSP.CONTEXT.flagsC  s%     .'--q>>!r?   c                 0    | j         sd S || j         _        d S r   )r#  r@  )rQ   rS   s     r@   r@  zSPNEGOSSP.CONTEXT.flagsI  s#    # %&D"""r?   c                 0    dt          | j                  z  S )NzSPNEGOSSP[%s])reprr#  r4  s    r@   __repr__zSPNEGOSSP.CONTEXT.__repr__O  s    "T$*:%;%;;;r?   NN)r8   r9   r:   	__slots__r1  r3  r;  r=  propertyr@  setterrD  rc   rd   s   @r@   r0  r    s        
 
 
	 MQ	6 	6 	6 	6 	6 	6.	* 	* 	*	7 	7 	7	< 	< 	< 
	" 	" 
	"
 
	' 	' 
	'
	< 	< 	< 	< 	< 	< 	<r?   r0  rJ   rI   )rI   rJ   )rI   rJ   r  rH   c                    d |D             | _         |D ]:}|j        | j        v r*| j         |j                 | j         | j        |j                 <   ;|                    dd           | _         t          t          |           j        di | d S )Nc                     i | ]
}|j         |S r>   r'  )r(  rS   s     r@   
<dictcomp>z&SPNEGOSSP.__init__.<locals>.<dictcomp>a  s    666Aqua666r?   r  r>   )r  r7   _MECH_ALIASESpopr  rN   r  r1  )rQ   sspskwargsr$  rT   s       r@   r1  zSPNEGOSSP.__init__`  s    66666 	 	Cw$,,,CGCVGD#D$6sw$?@ *04OQU)V)V&'i'11&11111r?   c                    d\  }}}t          |t                    r|j        }t          |t                    r|j        }t          |d          r|j        |_        d |_        t          |d          r|j	        |j	        |_        t          |d          r%|j
        rt          |j
        j        j                  }t          |d          r%|j        rt          |j        j        j                  }t          |d          r|j        }	 |j        }n+# t"          $ r 	 |j        }n# t"          $ r d}Y nw xY wY nw xY wt          |t&                    r|j        }|j        r	 t(          |j        p|j        d         j        j                 }n# t,          $ r t.          j        }Y nw xY wt          |t2                    r ||j                  }n*t          |t.          j                  r ||j                  }||||fS )	N)NNFrC   r\   r   r   r   Tr   )rX   r$   
innerTokenr   r   hasattrrC   r  r!  r\   r   r%   rF   r]   r   r   r{   r8  r   rf   r^   r7   KeyErrorr   	raw_layerr   load)rQ   ContextrS   statusotherMICrawTokenr   s          r@   _extract_gssapizSPNEGOSSP._extract_gssapik  s.   %6"(a%% 	Aa)) 	A1k"" 	/*++G'*.G'1o&& 	:1?+F*+/G'1m$$ 	F 	F,Q]-@-DEEH1n%% 	G!. 	G,Q^-A-EFFH1k"" 	![F	 AA 	  	  	  O!       	  a&& 	A& 	 %$3Uw7RST7U#
  % % %n%![))  CJJAt~..  CKK&(H,,sH   D 
D7D"!D7"D1.D70D11D76D7)F F! F!c                     |                      | j        | j                  }|t          t	          t          |j                                      fS )zX
        Server-Initiation of GSSAPI/SPNEGO.
        See [MS-SPNG] sect 3.2.5.2
        )r  r   r   rQ  )r0  r  r  r$   r   rZ   r  rQ   rV  s     r@   NegTokenInit2zSPNEGOSSP.NegTokenInit2  sl    
 ,,&*&D  
 

 *-8STTT    
 	
r?   c                 8     |j         j        |j        g|R i |S r   )r$  
GSS_WrapExr#  rQ   rV  r   rO  s       r@   ra  zSPNEGOSSP.GSS_WrapEx  s*    %w{%g&9KDKKKFKKKr?   c                 8     |j         j        |j        g|R i |S r   )r$  GSS_UnwrapExr#  rb  s       r@   rd  zSPNEGOSSP.GSS_UnwrapEx  *    'w{'(;MdMMMfMMMr?   c                 8     |j         j        |j        g|R i |S r   )r$  GSS_GetMICExr#  rb  s       r@   rg  zSPNEGOSSP.GSS_GetMICEx  re  r?   c                 8     |j         j        |j        g|R i |S r   )r$  GSS_VerifyMICExr#  rb  s       r@   ri  zSPNEGOSSP.GSS_VerifyMICEx  s*    *w{*7+>PPPPPPPr?   rV  c                     dS )Nr   r>   r^  s     r@   
LegsAmountzSPNEGOSSP.LegsAmount  s    qr?   Nc                 v   5t                               | j        || j                  |rj        _        d\  }}}}|r|                     |          \  }}}}j        j        j        rd	 t          fdj        D                       _        n# t          $ r t          d          w xY wj        j        d         k    r	|rd_        n)j        rj        d         _        nt          d          | j        j        j        j                 _        j        s(t           j        j        _        d_        d t$          }}	n|r1j                            j        |j        	          \  _        }	}n*j                            j        |
          \  _        }	}|t.          k    r,j        j        j        g}
j        j        j        t           j        v r4|
                    t           j        j        j        j                            t5          j                  D ]*}|j        j        |
v rj                            |           +	 t          fdj        D                       _        n# t          $ r t          d          w xY wt           j        j        _        d _        d _        |r|                     dd           S d t$          }}	|r|	|fS |r|	|t<          k    rd |fS |t<          k    rd}n|t$          k    rd}nd}j        rj                            j                  r|_|r/j                             |tC          j                             n.j                             |tC          j                             |r4|dk    r-j        "                    tC          j                            }n-j        "                    tC          j                            }|r͉j        t           j        j        k    r@tG          tI          j                            }|	rtK          |	          |j&        _'        ntG          tQ          d d                     }|	rtK          |	          |j&        _)        j        t           j        j        k    r||j&        _*        j        |j&        _+        nutG          tQ          d |                    }j        t           j        j        t           j        j        fv rj        |j&        _+        |	rtK          |	          |j&        _)        |r'tY          t[          |                    |j&        _!        |r*j        t           j        j        k    rt]          |          }t           j        j/        _        ||fS )N)r   r  )r   NNFc              3   .   K   | ]}|j         v |V  d S r   r  r(  rS   rV  s     r@   	<genexpr>z3SPNEGOSSP._common_spnego_handler.<locals>.<genexpr>  s=       ; ; ! G$??? ????; ;r?   zNo common SSP mechanisms !r   Fz Can't figure out what SSP to useTr]   r   )r]   c              3   .   K   | ]}|j         v |V  d S r   rn  ro  s     r@   rp  z3SPNEGOSSP._common_spnego_handler.<locals>.<genexpr>  s=       7 7 ;;; ;;;;7 7r?   z/No common SSP mechanisms after GSS_S_BAD_MECH !r   r   r   r\  )rF   )r\   r   r]  )0r  r0  r  r  r  r  rZ  r$  r!  nextStopIteration
ValueErrorr"  r7   r]   r  r  r.  r)   GSS_Init_sec_contextr#  r   GSS_Accept_sec_contextr'   rL  appendlistremover  _common_spnego_handlerr(   canMechListMICverifyMechListMICr   getMechListMICr   rZ   rf   r   r{   r[   r   r   r\   rE   r   r$   r  )rQ   rV  IsClientr]   r   rW  MICrX  rY  tok	to_removerS   r   
spnego_toks    `            r@   r{  z SPNEGOSSP._common_spnego_handler  s   ?''##*.*H (  G
  J.5.I+ +?'Xx 	Q.2.B.B7C.P.P+C8 ;*2. IG6: ; ; ; ;%,%@; ; ; 7 733
 ) G G G()EFFFG
  3w7RST7UUU V 05,0 I292Ma2PG//$%GHHH-g.I.M.QRGK# 8	> &O1GM#'G  5CC  
 K44'%/ 5  	'F 4;;3U3U'S 4V 4 40#S& ''$8<@A	.26):QQQ$$!/0K0O0ST   g9:: > >AuyI--3::1===X26 7 7 7 7!(!<7 7 7 3 3G//
 % X X X$%VWWWX !* 9"&*# >66wdKKK #'(=C 	(C''  	).(@(@D&(( ^##II,,,III ; %	7;55g6IJJ %	 # K11 #G$?@@    K11 #G$?@@    >> "+44#G$?@@ C
 k00 ;<< 
  "	I}	 555,-8STTT  
  I1=C1H1H1HJ$. --&*"&    
  M5A5L5L5LJ$2=IO$===1:J$.5<5PJ$2()"&'    J }!6	8Q RRR 291L
 . I1=C1H1H1H
 . 	+=!#&&, , ,J( 	< )/*??? %
;;;J!.
F**s   3%B B3%J Jr   c                 4    |                      |d||          S )NTrq  r{  )rQ   rV  r]   r   s       r@   rv  zSPNEGOSSP.GSS_Init_sec_context  s!     **7DcY*WWWr?   c                 4    |                      |d|d          S )NFr   rq  r  )rQ   rV  r]   s      r@   rw  z SPNEGOSSP.GSS_Accept_sec_context  s    **7Esa*PPPr?   c                 >   |&t                               | j                  }d|_        |                     ||          \  }}}}||t
          k    r|d fS |j        r|j        }n5|j        r|j        d         }n |r|j        r|j        d         }n	d t          fS 	 | j        |j
        j                 }n# t          $ r d t          fcY S w xY w|j        |j        |k    r||_        d |_        n||_        |j                            |j        |          \  |_        }||fS )NTr   )r  r0  r  passiverZ  r(   r!  r  r  r'   r7   r]   rS  r$  r#  GSS_Passive)rQ   rV  r]   rW  _rY  mechtyper$  s           r@   r  zSPNEGOSSP.GSS_Passive  s\   ?''(;<<G"GO $(#7#7#E#E VQ;6^33D=  & 	(2HH( 	(215HH 	('5 	(215HH''	(%hl&67CC 	( 	( 	(''''	( ;"{c!!!&*#GK '.k&=&=g>QSV&W&W#Vs   B2 2CCFc                 H    |j                             |j        |           d S )N)
IsAcceptor)r$  GSS_Passive_set_Directionr#  )rQ   rV  r  s      r@   r  z#SPNEGOSSP.GSS_Passive_set_Direction  s3    --J 	. 	
 	
 	
 	
 	
r?   c                 @    |j                             |j                  S r   )r$  MaximumSignatureLengthr#  r^  s     r@   r  z SPNEGOSSP.MaximumSignatureLength  s    {11'2EFFFr?   rE  r   )F)r8   r9   r:   __doc__rF  	auth_typer*   r  r0  rL  r+  r1  rZ  r_  ra  rd  rg  ri  rk  r{  r3   r&   rv  rw  r  r  r  rc   rd   s   @r@   r  r    sB        B 	#I I    	   
@< @< @< @< @<#+ @< @< @<H  6 5 M  K	2 	2 	2 	2 	2)- )- )-V
 
 
@L L LN N NN N NQ Q Q'    N+ N+ N+ N+b NRX XX5=k5JX X X X
Q Qg Q Q Q Q% %7 % % % %N
 
 
 
 
 

Gg G G G G G G G Gr?   r  )Wr  r   uuidr   scapy.asn1.asn1r   r   r   scapy.asn1.mibr   scapy.asn1fieldsr   r	   r
   r   r   r   r   r   r   r   scapy.asn1packetr   scapy.fieldsr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   scapy.packetr"   r#   scapy.layers.gssapir$   r%   r&   r'   r(   r)   r*   r+   r,   scapy.layers.kerberosr-   scapy.layers.ntlmr.   r/   r0   r1   typingr2   r3   r4   r6   rB   rE   r^   rL   rf   r   rp   rZ   r[   r   r   r   r   r   r   r   r   r  r   r  r   r  r  r>   r?   r@   <module>r     s                   
                               ) ( ( ( ( (                                 " - , , , , , , ,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                         ' ' ' ' 'k ' ' '
F F F F F{ F F F
* * * * * * * * *#$     ,   "3 3 3 3 3; 3 3 3
	 	 	    k       +   8    +   <    k   , !0_ *9  '3 3 3 	D	/002G     F   >  "" " " " " " " "    f   9 9 9 9 9, 9 9 9|  &      f       0   @    F    !4 5 5 5 ,?' (
jG jG jG jG jG jG jG jG jG jGr?   