
    izg              	          % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKJrJrJrJrJrJrJrJrJrJr  S SKJrJrJr  S SKJrJrJrJr  S SKJ r   S SK!J"r"  S SK#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  S SK-J.r.J/r/J0r0J1r1  \Rd                  " \35      r4S	r5Sq6\	Rn                  \	Rp                  \9\9\94      \:S
'   \	Rv                  " S\	Rx                  S\	Rz                  4   S9r>S\?S\.4S jr@ SS\9S\?S\	Rn                  \9   S\94S jjrAS\BS\?S\?S\B4S jrCS\?S\	Rx                  \>/\>4   4S jrD " S S\5      rEg)    N)
IOVContextProxy
ContextReqIOVUnwrapResultIOVWrapResultSecPkgContextSizesUnwrapResultWinRMWrapResult
WrapResultsplit_username)
CredentialPasswordunify_credentials)NegoDataTSCredentialsTSPasswordCreds	TSRequest)to_text)GssChannelBindings)	BadBindingsError	ErrorCodeFeatureMissingErrorInvalidTokenErrorNativeErrorNegotiateOptionsNoContextErrorOperationNotAvailableErrorSpnegoError)CredSSPTLSContextdefault_tls_contextgenerate_tls_certificateget_certificate_public_key   _X509_CERTIFICATEF.)boundusagereturnc                 *   [         R                  S5        [        U S9nU S:X  a  [        (       d
  [	        5       q[        u  p#n[
        R                  " 5       n [        R                  R                  US5      n[        USS9 nUR                  U5        UR                  U5        S S S 5        UR                  R                  U5        XAl        [        R                   " U5        U$ U$ ! , (       d  f       NI= f! [        R                   " U5        f = f)NzCreating TLS context)r'   acceptzca.pemwb)mode)logdebugr    r$   r!   tempfilemkdtempospathjoinopenwritecontextload_cert_chain
public_keyshutilrmtree)r'   ctxcert_pemkey_pemr8   temp_dir	cert_pathfds           I/home/james-whalen/.local/lib/python3.13/site-packages/spnego/_credssp.py_create_tls_contextrB   @   s     II$%
E
*C !  8 :(9%: ##%
	$Xx8Iid+r"! , KK''	2'N MM(#J3J ,+ MM(#s$   *C: #C)&)C: )
C73C: :Dpub_keynoncec                    U(       a;  US:X  a  SOSnSU-  U-   U -   n[         R                  " U5      R                  5       nU$ US:X  a?  [        R                  " SU SS 5      S   n[        R
                  " SUS-   5      U SS	 -   nU$ U nU$ )
aL  Computes the public key authentication value.

Params:
    pub_key: The public key to transform.
    usage: Either `initiate` or `accept` to denote if the key is for the
        client to server or vice versa.
    nonce: A 32 byte nonce used for CredSSP version 5 or newer.

Returns:
    bytes: The public key authentication value.
initiates   Client-To-Servers   Server-To-Clients   CredSSP %s Binding Hash r*   Br      N)hashlibsha256digeststructunpackpack)rC   r'   rD   	direction
hash_inputkey_auth
first_bytes          rA   _get_pub_key_authrS   `   s      +0J+>'DW	4y@EIGS
>>*-446 O 
(	]]3!5a8
;;sJN3gabkA
 O O    data_lengthprotocolcipher_suitec                    US:X  a  SnU$ [         R                  " SU5      (       a  SnU$ UR                  S5      S   nSSSS	S
.R                  US5      nX-   nSU;   a  SnOSU;   d  SU;   a	  SUS-  -
  nOSUS-  -
  nXg-   U -
  nU$ )a  Gets the length of the TLS trailer.

WinRM wrapping needs to split the trailer/header with the data but the
length of the trailer is dependent on the cipher suite that was negotiated.
On Windows you can get this length by calling `QueryContextAttributes`_
with the `SecPkgContext_StreamSizes`_ structure. Unfortunately we need to
work on other platforms so we calculate it manually.

Params:
    data_length: The length of the TLS data used to calculate the padding
        size.
    protocol: The TLS protocol negotiated between the client and server.
    cipher_suite: The TLS cipher suite negotiated between the client and
        server.

Returns:
    int: The length of the trailer.

.. _QueryContextAttributes:
    https://docs.microsoft.com/en-us/windows/win32/api/sspi/nf-sspi-querycontextattributesw

.. _SecPkgContext_StreamSizes:
    https://docs.microsoft.com/en-us/windows/win32/api/sspi/ns-sspi-secpkgcontext_streamsizes
zTLSv1.3   z^.*[-_]GCM[-_][\w\d]*$   -       0   )MD5SHASHA256SHA384r   RC4DES3DES   )rematchsplitget)rU   rV   rW   trailer_lengthhash_algorithmhash_lengthpre_pad_lengthpadding_lengths           rA   _tls_trailer_lengthrq      s    : 9 : 7 
+\	:	:2 ) &++C04 !rRHLL^]^_$2L Nl"f&<.1"45N  >B#67N(9[HrT   r6   c                 0   ^  S[         S[         4U 4S jjnU$ )Nfuncr(   c                    >^  S[         R                  S[         R                  S[        4UU 4S jjn[         R                  " [        U5      $ )Nargskwargsr(   c                     >  T" U 0 UD6$ ! [         R                   a%  n[        [        R                  T< SU< 3S9UeS nAff = f)Nz: )
error_codecontext_msg)sslSSLErrorr   r   failure)ru   rv   er6   rs   s      rA   wrapped3_wrap_ssl_error.<locals>.decorator.<locals>.wrapped   sL    lT,V,,<< l!Y->->X_abLcdjkkls    A ?A)typingAnyr%   cast)rs   r~   r6   s   ` rA   	decorator"_wrap_ssl_error.<locals>.decorator   sB    	l6:: 	l 	l 	l 	l {{1g&&rT   )r%   )r6   r   s   ` rA   _wrap_ssl_errorr      s    ' 'a ' rT   c                     ^  \ rS rSrSrSSSSS\R                  SS\R                  4	S\	R                  \	R                  \\\	R                  \   4      S\	R                  \   S\	R                  \   S	\	R                  \   S
\	R                  \   S\S\S\S\S\	R                   SS4U 4S jjjr\S8S\	R                  \   S\	R                  \   4S jj5       r\S\4S j5       r\S\	R                  \   4S j5       r\S\4S j5       r\S\	R                  \   4S j5       r\S\4S j5       rS9S jr S8SS.S\	R                  \   S
\	R                  \   S\	R                  \   4S jjjrS\	R                  \   S\	R<                  \\S4   4S jrS\	R                  \   S\	R<                  \\S4   4S jr S\	R                  \   S\	R<                  \\\4   4S jr!S\"S \S\	R<                  \\\"4   4S! jr# S8S"\S#\	R                   S\	R                   4S$ jjr$S\%4S% jr&\'" S&5      S:S'\S(\S)\	R                  \(   S\)4S* jj5       r*  S:S+\	RV                  \,   S(\S)\	R                  \(   S\-4S, jjr.S'\S\/4S- jr0\'" S.5      S'\S\14S/ j5       r2S+\	RV                  \,   S\34S0 jr4S1\S'\S\4S2 jr5S8S'\S)\	R                  \(   S\4S3 jjr6S'\S4\S\(4S5 jr7\S\	R                  \	Rp                  \\(4      4S6 j5       r9S7r:U =r;$ );CredSSPProxy   ad  CredSSP proxy class CredSSP authentication.

This proxy class for CredSSP can be used to exchange CredSSP tokens.
It uses the NegotiateProxy provider for the underlying authentication but
exchanges the tokens in the exchange required by CredSSP. The main
advantage of CredSSP is that it allows you to delegate the user's
credentials to the server.

The acceptor logic is mostly done as a proof of concept and for use with
testing. Use at your own risk.

Currently this context proxy supports the following CredSSP protocols:

    2:
        Earliest protocol that ships with Windows XP, Vista, 7, 8, Server
        2008, 2008 R2, and 2012. This version is susceptible to
        CVE-2018-0886
    3:
        Introduced with Windows 8.1 and Server 2012 R2. Adds the errorCode
        field for better error details on a failure. This version is
        susceptible to CVE-2018-0886.
    4:
        Largely the same as 3, introduced in an older Win 10 build.
    5:
        Same as version 2 but with the mitigations for CVE-2018-0886
        applied.
    6:
        Same as version 3 and 4 but with the mitigations for CVE-2018-0886
        applied.

If the context proxy is talking to a peer with a higher protocol number it
is treated the same as what the client supports.

Optional kwargs supports by CredSSPProxy:

    credssp_negotiate_context: Use this contest for the underlying
        authentication negotiation. This allows the caller to restrict the
        auth to Kerberos or set any other setting specific to their
        environment:

    credssp_tls_context: Custom :class:`CredSSPTLSContext` to use for the
        CredSSP exchange. See `spnego.tls` for helper methods to generate
        a custom TLS context.

    credssp_min_protocol: The minimum CredSSP authentication protocol the
        context will allow. This can control whether the server rejects
        peers running on a lower protocol version than what is set to
        enforce a better security baseline. The default is 2 which works
        against all CredSSP peers. To ensure the mitigations for
        CVE-2018-0886 is in place set this value to 5 or higher.
NrF   credsspusernamepasswordhostnameservicechannel_bindingscontext_reqr'   rV   optionsrv   r(   c
           
        > [        XUS:X  a  SOS S9n[        [        U ]  XXEXgX5        U	[        R
                  -  (       a  [        [        R
                  5      eXl        U	[        R                  ) -  U l	        U
R                  SS 5      U l        S U l        SU l        S U l        SU l        U
R                  SS5      U l        S U l        U   S	U
;   a5  U
S	   U l        US
:X  a$  U R$                  R&                  (       d	  [)        SS9eO[+        U5      U l        [,        R.                  " 5       U l        [,        R.                  " 5       U l        U R$                  R4                  R7                  U R0                  U R2                  US
:H  S9U l        US:X  ao  U Hh  n[;        U[<        5      (       d  M  [?        UR@                  5      u  p[C        U=(       d    SU=(       d    SURD                  5      n[G        US9U l          g    g g )NrF   r   )required_protocolcredssp_negotiate_contextFzTLS Handshakecredssp_min_protocol   credssp_tls_contextr*   z3Provided tls context does not have a public key setry   )server_side )credentials)$r   superr   __init__r   session_keyr   _credentialswrapping_winrm_optionsrk   _auth_context_ts_credential	_complete	_step_gen_auth_stage_min_version_selected_version_tls_contextr8   r   rB   rz   	MemoryBIO_in_buff	_out_buffr6   wrap_bio_tls_object
isinstancer   r   r   r   r   r   )selfr   r   r   r   r   r   r'   rV   r   rv   r   creddomainpassword_cred	__class__s                  rA   r   CredSSPProxy.__init__  s    (u
?R)X\
 	lD*7kRZ	
 %111%&6&B&BCC'#3#B#B"BB<BJJGbdh<i>Bae*!',BA!F7; F* &'< =D ):):)E)E0=rss 3E :D,,44==MM4>>8I > 
 J#dH--'5dmm'D$F$3FLb(.bRVR_R_$`M*7M*RD' $ rT   c                     S/$ )Nr    )clsr   s     rA   available_protocols CredSSPProxy.available_protocols<  s
    {rT   c                     g)NFr   )r   s    rA   iov_availableCredSSPProxy.iov_available@  s    rT   c                 T    U R                   (       a  U R                   R                  $ S $ N)r   client_principalr   s    rA   r   CredSSPProxy.client_principalD  s!    6:6H6Ht!!22RdRrT   c                     U R                   $ r   )r   r   s    rA   completeCredSSPProxy.completeH  s    ~~rT   c                 T    U R                   (       a  U R                   R                  $ S $ r   )r   negotiated_protocolr   s    rA   r    CredSSPProxy.negotiated_protocolL  s"    9=9K9Kt!!55UQUUrT   c                     [        SS9e)Nz,CredSSP does not have a session key to sharer   r   r   s    rA   r   CredSSPProxy.session_keyP  s    (5cddrT   c                    [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  (       a  U R                  R                  5       S9	$ S S9	$ )N)	r   r   r   r   r   r'   rV   r   r   )r   r   	_hostname_servicer   r   r'   rV   r   r   new_contextr   s    rA   r   CredSSPProxy.new_contextT  sx    &&^^MM!22((**]]LLJNJ\J\d&8&8&D&D&F

 
	
 cg

 
	
rT   )r   in_tokenc          	         [         R                  S[        [        R                  " U=(       d    S5      5      5        U R
                  c&  [        U SU R                  -  5      " U5      U l        S nS n U R
                  R                  U5      n[         R                  S[        [        R                  " U=(       d    S5      5      5        U$ ! [         a     NJf = f)NzCredSSP step input: %srT   z_step_%szCredSSP step output: %s)
r-   r.   r   base64	b64encoder   getattrr'   sendStopIteration)r   r   r   	out_tokens       rA   stepCredSSPProxy.stepa  s     			*GF4D4DX_QT4U,VW>>!$T:

+BCHMDNH		++H5I 			+WV5E5EiFVSV5W-XY	  		s   3C 
CCc              #     #    U R                  U5       Sh  vN   [        R                  " [        U R                  R                  S5      5      n[        U5      n[        R                  S5        U R                  (       du  0 nU R                  (       a  U R                  US'   U R                  (       a  U R                  US'   [        R                  " U R                  4SU R                  S.UD6U l	        SnU R                  R!                  5       n US	-  n[#        [$        ['        U=(       d    S
5      S9nU R)                  USU-  5       Sh  vN nU R                  R!                  UR*                  S   R,                  5      nU R                  R.                  (       d  U(       a  SU;   a  OM  [1        UR2                  [$        5      U l        [        R                  SU R4                  -  5        U R4                  U R6                  :  a%  SUR2                   SU R6                   3n	[9        U	S9eU(       a  ['        U5      OSn
U R4                  S:  a  [:        R<                  " S5      OSn[?        USUS9n[#        [$        U
UU R                  RA                  U5      RB                  S9nU R)                  US5       Sh  vN nURD                  (       d	  [9        SS9eUR*                  (       a2  U R                  R!                  UR*                  S   R,                  5        U R                  RG                  URD                  5      RB                  n[?        USUS9nUU:w  a	  [I        SS9eU R                  RA                  U RJ                  RM                  5       5      RB                  n[#        [$        US9nSU l'        U R)                  US5       Sh  vN   g GN GN GN N7f)z.The initiator authentication steps of CredSSP.NT%Starting CredSSP authentication phaser   r   	negotiaterV   r   r   rH   rT   nego_tokensAuthentication %ds   NTLMSSP    Negotiated CredSSP version: %dThe peer protocol version was . and did not meet the minimum requirements of r      r^   rF   rD   )versionr   client_noncepub_key_authPublic key exchangez/Acceptor did not response with pubKeyAuth info.r*   BPublic key verification failed, potential man in the middle attack)	auth_infoCredential exchange)(	_step_tlsr   r   bytesr   getpeercertr"   r-   r.   r   r   r   spnegoclientr   r   r   r   _CREDSSP_VERSIONr   _yield_ts_requestr   
nego_tokenr   minr   r   r   r   r1   urandomrS   wrapdatar   unwrapr   r   rN   r   )r   r   server_certificater8   auth_kwargsroundr   auth_requestauth_responsemsgpub_key_nego_tokenrD   	pub_valuepub_key_requestpub_key_responseresponse_keyexpected_keyenc_credentialscredential_requests                      rA   _step_initiateCredSSPProxy._step_initiatev  s[    
 >>(+++#[[0@0@0L0LT0RS/0BC
		9:!!8:K~~*...J'}})-I&!'!!",7"R]"D &&++-	QJE$%58IL\Y\C]^L'+'='=lL_bgLg'hhM**//0I0I!0L0W0WXI !!**y=[_h=h  "%]%:%:<L!M		2T5K5KKL!!D$5$5501F1F0G H##'#4#4"57  $444=Xi04"&"8"81"<

2$%j*EJ	#$*++00;@@	
 '+&<&<_Nc&dd,,#0abb''##$4$@$@$C$N$NO))001A1N1NOTT(XUK<'"/stt,,11$$&

$ 	 ''7?S))*<>STTTI 	,, i6 e& 	UsH   O$OD8O$OE0O$ODO$O"O$O$O$"O$c              #     #    U R                  U5       Sh  vN n[        R                  " U=(       d    S5      n[        UR                  [
        5      U l        [        R                  SU R                  -  5        U R                  U R                  :  a%  SUR                   SU R                   3n[        US9e [        R                  S5        U R                  (       dj  0 nU R                  (       a  U R                  US'   U R                  (       a  U R                  US	'   [        R                  " SS
U R                   S.UD6U l        Sn US-  nSnUR"                  (       a2  U R                  R%                  UR"                  S   R&                  5      nUR(                  (       a  O?[        [
        [+        U=(       d    S5      S9nU R-                  USU-  5       Sh  vN nM  U R                  R5                  UR(                  5      R6                  n
U R8                  R:                  =(       d    Sn[=        USUR>                  S9nX:w  a	  [A        SS9eU(       a  [+        U5      OSnU R                  RC                  [=        USUR>                  S95      R6                  n[        [
        XS9nU R-                  US5       Sh  vN nSU l"        URF                  (       d	  [        SS9e[H        R                  " U R                  R5                  URF                  5      R6                  5      U l%        SU l&        g GN) GN`! [.         as  n[        R1                  SU5        U R                  S;   d  U R                  S:  a3  [        [
        UR2                  S9n	U R-                  U	S5       Sh  vN     SnAgSnAff = f N7f)z-The acceptor authentication steps of CredSSP.NrT   r   r   r   r   r   r   r   r   r   r   TrH   r   r   z5Received CredSSP error when accepting credentials: %s)   r   r#   )rx   zAuthentication failurerF   r   r   r*   )r   r   r   r   z:No credential received on CredSSP TSRequest from initiatorr   )'r   r   rM   r   r   r   r   r-   r.   r   r   r   r   r   r   serverr   r   r   r   r   r   r   r   warning	nt_statusr   r   r   r8   rS   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   nego_out_tokenr   r}   error_token
actual_keyr8   r  r   
server_keyr  s                   rA   _step_acceptCredSSPProxy._step_accept  s3    
 #nnX66 ''C8 "%\%9%9;K!L		2T5K5KKL!!D$5$5501E1E0F G##'#4#4"57  $44	II=>%%<>>>.2nnK
+==-1]]K	*%+]]%nKQUQ^Q^%nbm%n"E
!%++%)%7%7%<%<\=U=UVW=X=c=c%dN,, )*:Q_QfcfHg h*.*@*@PcfkPk*ll , ''..|/H/HINN
&&118S
(Z|G`G`a%"/stt1?Xn-T
'',,j(,:S:ST

$ 	 %%5:g"&"8"89IK`"aa0%%#0lmm+2243E3E3L3L\McMc3d3i3ijC 7H  m 	KKOQRS%%/43I3IQ3N'(8Q[[Q11+?WXXX	( bst   OM B#O<C.M *O+8M #M$M *C O
OA6OM 
OA#N>3N64N>9O>OOc              #   V  #      U(       a  U R                   R                  U5        Sn U R                  R                  5         U R                  R                  5       nU(       d  U R                  S:w  a  O9Uv nU(       d,  U R                  S:X  a  U R                  U5      R                  nOM  U R                  R                  5       u  pVn[        R                  SXe5        U$ ! [        R
                   a    Sn Nf = f! [        R                   a  n[        SU-  S9UeSnAff = f7f)z#The TLS handshake phase of CredSSP.TFr*   zTLS handshake for CredSSP: %sr   Nz2TLS handshake complete, negotiation details: %s %s)r   r5   r   do_handshakerz   SSLWantReadErrorr   readr'   r   r   r{   r   cipherr-   r.   )r   r   	want_readr   r}   r  rV   _s           rA   r   CredSSPProxy._step_tls	  s    	\MM''1!	%$$113 !NN//1	 TZZ8%;!*? !TZZ8%; $H 5 : :I1 : #..557!		FY/ ++ % $I%$ || 	\#0ORS0STZ[[	\sc   D)%D  C$ 1D  5D)66D  ,D)-D  /5D)$C=:D  <C==D   D&D!!D&&D)
ts_requestry   c              #     #    X l         UR                  5       n[        R                  S[	        [
        R                  " U5      5      -  5        U R                  U5      R                  v nU R                  U5      R                  n[        R                  S[	        [
        R                  " U5      5      -  5        [        R                  " U5      nUR                  (       a  [        SUR                  S9n[        XrS9eU$ 7f)z9Exchanges a TSRequest between the initiator and acceptor.zCredSSP TSRequest output: %szCredSSP TSRequest input: %sz,Received NTStatus in TSRequest from acceptor)winerror)
base_errorry   )r   rN   r-   r.   r   r   r   r   r   r   r   rM   rx   r   r   )r   r  ry   out_requestwrapped_response
in_requestresponser   s           rA   r   CredSSPProxy._yield_ts_request-  s      ' oo'		076;K;KK;X3YYZ!%;!7!<!<<[[!1277
		/'&:J:J::V2WWX##J/$%S^f^q^qrJMMs   C?Dnamedefaultc                 >   US:X  a7  U R                   S:X  a'  U R                  (       a  U R                  R                  $ US:X  a  U R                  R                  $ US:X  a  U R
                  $ US:X  a  U R                  $ US:X  a  U R                  b  U R                  $ U$ )Nclient_credentialr*   
sslcontext
ssl_object
auth_stageprotocol_version)r'   r   r   r   r6   r   r   r   )r   r&  r'  s      rA   get_extra_infoCredSSPProxy.get_extra_infoD  s    
 &&4::+AdFYFY&&222\!$$,,,\!###\!###''D,B,B,N))) NrT   c                     U R                   (       a  U R                  (       d	  [        SS9eU R                   R                  5       u  pn[	        SX!5      n[        US9$ )Nz;Cannot get message sizes until context has been establishedr   r   )header)r   r   r   r  rq   r   )r   cipher_negotiatedtls_protocolr  rl   s        rA   query_message_sizes CredSSPProxy.query_message_sizes[  sN    t}} -jkk-1-=-=-D-D-F*,QP!88rT   z$Invalid TLS state when wrapping datar   encryptqopc                 |    U R                   R                  U5        [        U R                  R	                  5       SS9$ )NT)r   	encrypted)r   r5   r   r   r  )r   r   r6  r7  s       rA   r   CredSSPProxy.wrapd  s0    t$t~~224EErT   iovc                     [        SS9eNz#CredSSP does not offer IOV wrappingr   r   )r   r;  r6  r7  s       rA   wrap_iovCredSSPProxy.wrap_iovi  s     )5Z[[rT   c                     U R                  U5      R                  nU R                  R                  5       u  p4n[	        [        U5      XC5      n[        US U X&S  SS9$ )Nr   )r1  r   rp   )r   r   r   r  rq   lenr
   )r   r   enc_datar2  r3  r  rl   s          rA   
wrap_winrmCredSSPProxy.wrap_winrmq  s[    99T?''-1-=-=-D-D-F*,SYXh&?hF_pqrrrT   z&Invalid TLS state when unwrapping datac                     U R                   R                  U5        / n  UR                  U R                  R	                  5       5        M,  ! [
        R                   a     Of = f[        SR                  U5      SSS9$ )NTrT   r   )r   r9  r7  )	r   r5   appendr   r  rz   r  r	   r3   )r   r   chunkss      rA   r   CredSSPProxy.unwrapx  su    D!d..3356  ''  &!1TqIIs   )A A"!A"c                     [        SS9er=  r   )r   r;  s     rA   
unwrap_iovCredSSPProxy.unwrap_iov  s     )5Z[[rT   r1  c                 <    U R                  X-   5      R                  $ r   )r   r   )r   r1  r   s      rA   unwrap_winrmCredSSPProxy.unwrap_winrm  s    {{6=)...rT   c                     [        SS9e)NzCredSSP does not offer signingr   r   )r   r   r7  s      rA   signCredSSPProxy.sign  s    (5UVVrT   micc                     [        SS9e)Nz#CredSSP does not offer verificationr   r   )r   r   rR  s      rA   verifyCredSSPProxy.verify  s    (5Z[[rT   c                     / $ r   r   r   s    rA   _context_attr_mapCredSSPProxy._context_attr_map  s    	rT   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r(   r   )TN)<__name__
__module____qualname____firstlineno____doc__r   r'  r   noner   OptionalUnionstrr   Listr   r   r   classmethodr   boolr   propertyr   r   r   r   r   r   r   	Generatorr  r  r   r   r   r.  r   r4  r   intr   r   Iterabler   r   r>  r
   rC  r	   r   r   rJ  rM  rP  rT  TuplerW  __static_attributes____classcell__)r   s   @rA   r   r      s   2l ]a)-)-(,@D","4"4!$4$9$98//&,,sJJ@W/W"XY8 //#&8 //#&	8
 %8 !//*<=8  8 8 8 "8 **8 
8 8t &//:J*K W]WbWbcfWg   d   S&//#"6 S S $   VV__S%9 V V eU e e
 ,0 AE	//%( !//*<=	
 
	*IU//%(IU 
		%,	-IUVF//%(F 
		%,	-FP"&//%"8 "V=M=MeUZ\aNa=b "H  
		%	1	2	4 #  
	.9%7 9 ;<F F F6??3;O F[e F =F $(	\__S!\ \ __S!	\
 
\su s s =>
J5 
J\ 
J ?
J\__S!\ 
\/5 / /% /W WV__S%9 WU W\5 \u \ \ 6;;v||JO/L#M  rT   r   r   )Fr   rI   loggingr1   rh   r9   rz   rL   r/   r   r   spnego._contextr   r   r   r   r   r   r	   r
   r   r   spnego._credentialr   r   r   spnego._credssp_structuresr   r   r   r   spnego._textr   spnego.channel_bindingsr   spnego.exceptionsr   r   r   r   r   r   r   r   r   
spnego.tlsr   r    r!   r"   	getLoggerrY  r-   r   r$   r_  ri  r   __annotations__TypeVarCallabler   r%   ra  rB   rS   rg  rq   r   r   r   rT   rA   <module>rx     sq      	 	  
       G F  ! 6
 
 
  !  HL 6??6<<ue0C#DE L
NN3fooc6::o>?F %) ??5! 	>=== = 		=@S V__aS!V%< I< IrT   