
    Ii                     J   S 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JrJrJrJrJrJrJrJrJrJrJrJrJrJrJr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*  SSK+J,r,J-r-  SSK.J/r/J0r0J1r1J2r2  SSK3J4r4  SSK5J6r6J7r7   " S	 S
5      r8 " S S5      r9 " S S\85      r:g)z
`.AuthHandler`
    N)#cMSG_SERVICE_REQUESTcMSG_DISCONNECT DISCONNECT_SERVICE_NOT_AVAILABLE)DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLEcMSG_USERAUTH_REQUESTcMSG_SERVICE_ACCEPTDEBUGAUTH_SUCCESSFULINFOcMSG_USERAUTH_SUCCESScMSG_USERAUTH_FAILUREAUTH_PARTIALLY_SUCCESSFULcMSG_USERAUTH_INFO_REQUESTWARNINGAUTH_FAILEDcMSG_USERAUTH_PK_OKcMSG_USERAUTH_INFO_RESPONSEMSG_SERVICE_REQUESTMSG_SERVICE_ACCEPTMSG_USERAUTH_REQUESTMSG_USERAUTH_SUCCESSMSG_USERAUTH_FAILUREMSG_USERAUTH_BANNERMSG_USERAUTH_INFO_REQUESTMSG_USERAUTH_INFO_RESPONSEcMSG_USERAUTH_GSSAPI_RESPONSEcMSG_USERAUTH_GSSAPI_TOKENcMSG_USERAUTH_GSSAPI_MICMSG_USERAUTH_GSSAPI_RESPONSEMSG_USERAUTH_GSSAPI_TOKENMSG_USERAUTH_GSSAPI_ERRORMSG_USERAUTH_GSSAPI_ERRTOKMSG_USERAUTH_GSSAPI_MIC	MSG_NAMEScMSG_USERAUTH_BANNER)Message)bu)SSHExceptionAuthenticationExceptionBadAuthenticationTypePartialAuthentication)InteractiveQuery)GSSAuthGSS_EXCEPTIONSc                      \ rS rSrSrS rS rS rS rS r	S r
S	 rS'S
 jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#\$S" 5       r%\$S# 5       r&\$S$ 5       r'S%r(g&)(AuthHandlerM   z;
Internal class to handle the mechanics of authentication.
c                     [         R                  " U5      U l        S U l        SU l        S U l        SU l        S U l        S U l        S U l	        S U l
        S U l        S U l        SU l        S U l        SU l        g )NF r   T)weakrefproxy	transportusernameauthenticated
auth_eventauth_methodbannerpasswordprivate_keyinteractive_handler
submethodsauth_usernameauth_fail_countgss_hostgss_deleg_creds)selfr7   s     ;/venv/lib/python3.13/site-packages/paramiko/auth_handler.py__init__AuthHandler.__init__R   st     y1"#' ! #    c                 4    U R                   R                  " U6 $ N)r7   _log)rE   argss     rF   rL   AuthHandler._logd   s    ~~""D))rI   c                     U R                   $ rK   )r9   rE   s    rF   is_authenticatedAuthHandler.is_authenticatedg   s    !!!rI   c                 h    U R                   R                  (       a  U R                  $ U R                  $ rK   )r7   server_moderA   r8   rP   s    rF   get_usernameAuthHandler.get_usernamej   s%    >>%%%%%== rI   c                 .   U R                   R                  R                  5          X l        SU l        Xl        U R                  5         U R                   R                  R                  5         g ! U R                   R                  R                  5         f = fNnoner7   lockacquirer:   r;   r8   _request_authreleaserE   r8   events      rF   	auth_noneAuthHandler.auth_nonep   sh    ##%	*#O%D$M NN'')DNN'')   #A. .&Bc                 :   U R                   R                  R                  5          X0l        SU l        Xl        X l        U R                  5         U R                   R                  R                  5         g ! U R                   R                  R                  5         f = f)N	publickey)	r7   r[   r\   r:   r;   r8   r>   r]   r^   )rE   r8   keyr`   s       rF   auth_publickeyAuthHandler.auth_publickeyz   sn    ##%	*#O*D$M" NN'')DNN'')   )A4 4&Bc                 :   U R                   R                  R                  5          X0l        SU l        Xl        X l        U R                  5         U R                   R                  R                  5         g ! U R                   R                  R                  5         f = f)Nr=   )	r7   r[   r\   r:   r;   r8   r=   r]   r^   )rE   r8   r=   r`   s       rF   auth_passwordAuthHandler.auth_password   sm    ##%	*#O)D$M$M NN'')DNN'')ri   c                 F   U R                   R                  R                  5          X0l        SU l        Xl        X l        X@l        U R                  5         U R                   R                  R                  5         g! U R                   R                  R                  5         f = f);
response_list = handler(title, instructions, prompt_list)
keyboard-interactiveN)
r7   r[   r\   r:   r;   r8   r?   r@   r]   r^   )rE   r8   handlerr`   r@   s        rF   auth_interactiveAuthHandler.auth_interactive   su     	##%	*#O5D$M'.$(O NN'')DNN'')   /A: :&B c                 F   U R                   R                  R                  5          X@l        SU l        Xl        X l        X0l        U R                  5         U R                   R                  R                  5         g ! U R                   R                  R                  5         f = f)Ngssapi-with-mic)
r7   r[   r\   r:   r;   r8   rC   rD   r]   r^   )rE   r8   rC   rD   r`   s        rF   auth_gssapi_with_mic AuthHandler.auth_gssapi_with_mic   ss    ##%	*#O0D$M$M#2  NN'')DNN'')rs   c                 .   U R                   R                  R                  5          X l        SU l        Xl        U R                  5         U R                   R                  R                  5         g ! U R                   R                  R                  5         f = f)Ngssapi-keyexrZ   r_   s      rF   auth_gssapi_keyexAuthHandler.auth_gssapi_keyex   sh    ##%	*#O-D$M NN'')DNN'')rc   c                 T    U R                   b  U R                   R                  5         g g rK   )r:   setrP   s    rF   abortAuthHandler.abort   s!    ??&OO! 'rI   c                     [        5       nUR                  [        5        UR                  S5        U R                  R                  U5        g Nssh-userauth)r&   add_byter   
add_stringr7   _send_messagerE   ms     rF   r]   AuthHandler._request_auth   s4    I	

'(	^$$$Q'rI   c                    [        5       nUR                  [        5        UR                  [        5        UR                  S5        UR                  S5        U R                  R                  U5        U R                  R                  5         g )NzService not availableen)	r&   r   r   add_intr   r   r7   r   closer   s     rF   !_disconnect_service_not_available-AuthHandler._disconnect_service_not_available   s]    I	

?#			23	,-	T$$Q'rI   c                    [        5       nUR                  [        5        UR                  [        5        UR                  S5        UR                  S5        U R                  R                  U5        U R                  R                  5         g )NzNo more auth methods availabler   )	r&   r   r   r   r   r   r7   r   r   r   s     rF   _disconnect_no_more_auth$AuthHandler._disconnect_no_more_auth   s]    I	

?#			;<	56	T$$Q'rI   c                     UR                   (       a,  UR                   R                  UR                   R                  4$ UR                  5       U4$ )zu
Given any key, return its type/algorithm & bits-to-sign.

Intended for input to or verification of, key signatures.
)public_blobkey_typekey_blobget_name)rE   rf   s     rF   _get_key_type_and_bits"AuthHandler._get_key_type_and_bits   s;     ????++S__-E-EEE<<>3&&rI   c                    [        5       nUR                  U R                  R                  5        UR	                  [
        5        UR                  U5        UR                  U5        UR                  S5        UR                  S5        U R                  U5      u  pgUR                  U5        UR                  U5        UR                  5       $ )Nre   T)	r&   r   r7   
session_idr   r   add_booleanr   asbytes)rE   rf   servicer8   	algorithmr   _bitss           rF   _get_session_blobAuthHandler._get_session_blob   s    I	T^^../	

()	X	W	[!	d--c2	Y	Tyy{rI   c                    S nU R                   R                  b,  [        R                  " 5       U R                   R                  -   n UR                  S5        U R                   R	                  5       (       dI  U R                   R                  5       nUb  [        UR                  [        5      (       a  [        S5      nUeUR                  5       (       a  O)Ub$  U[        R                  " 5       ::  a  [        S5      eM  U R                  5       (       dU  U R                   R                  5       nUc  [        S5      n[        UR                  [        5      (       a  UR                  $ Ue/ $ )Ng?z5Authentication failed: transport shut down or saw EOFzAuthentication timeout.zAuthentication failed.)r7   auth_timeouttimewait	is_activeget_exception
issubclass	__class__EOFErrorr*   is_setrQ   r,   allowed_types)rE   r`   max_tses       rF   wait_for_responseAuthHandler.wait_for_response   s   >>&&2YY[4>>#>#>>FJJsO>>++--NN002I*Q[[("C"C/OA ||~~!f		&;-.GHH  $$&&,,.Ay+,DE !++'<==&G	rI   c                 0   UR                  5       nU R                  R                  (       a  US:X  a  [        5       nUR	                  [
        5        UR                  U5        U R                  R                  U5        U R                  R                  R                  5       u  p4U(       a\  [        5       nUR	                  [        5        UR                  U5        UR                  U5        U R                  R                  U5        g U R                  5         g r   )get_textr7   rT   r&   r   r   r   r   server_object
get_bannerr%   r   )rE   r   r   r<   languages        rF   _parse_service_request"AuthHandler._parse_service_request
  s    **,>>%%7n+D	AJJ*+LL!NN((+#~~;;FFHFI

/0V$X&,,Q/..0rI   c                     U R                   R                  nUR                  SS5      U;  a(  SnU R                  [        UR                  U5      5        g U R                   R                  U   " [        U5      5      $ )N-cert-v01@openssh.comr4   z<Auth rejected: pubkey algorithm '{}' unsupported or disabled)r7   preferred_pubkeysreplacerL   r   format	_key_infor&   )rE   r   keybloboptionserrs        rF   _generate_key_from_request&AuthHandler._generate_key_from_request  sj    ..224b9HN  IIdCJJy12~~''	2773CDDrI   c                     US   nSnU R                  [        UR                  U5      5        U R                  [        S5        U$ )Nr   zYServer did not send a server-sig-algs list; defaulting to our first preferred algo ({!r})zNOTE: you may use the 'disabled_algorithms' SSHClient/Transport init kwarg to disable that or other algorithms if your server does not support them!)rL   r	   r   )rE   r   my_algospubkey_algomsgs        rF   !_choose_fallback_pubkey_algorithm-AuthHandler._choose_fallback_pubkey_algorithm(  sD    qki		%K01		 c	
 rI   c                    SU;  a  U$ U R                  [        SR                  U5      5        UR                  S5      (       a  [        R
                  " SU R                  R                  5      (       aO  SnX R                  l        U R                  [        S5        U R                  [        SR                  U5      5        U$ U R                  R                   Vs/ s H  nSU;   d  M  UPM     nnU R                  [        SR                  U5      5        U(       d  [        S	5      e[        U R                  R                  R                  S
[        S5      5      5      nS nU(       a  UR                  S5      nU R                  [        SR                  U5      5        [!        [#        UR$                  U5      5      nU(       a+  US   nU R                  [        SR                  U5      5        OCU R                  [        S5        Sn['        UR                  U5      5      eU R)                  X5      nUR                  S5      (       a  US-  nX R                  l        U$ s  snf )Nrsaz0Finalizing pubkey algorithm for key of type {!r}r   z-OpenSSH_(?:[1-6]|7\.[0-7])zssh-rsa-cert-v01@openssh.comz)OpenSSH<7.8 + RSA cert = forcing ssh-rsa!z!Agreed upon {!r} pubkey algorithmzOur pubkey algorithm list: {}zFAn RSA key was specified, but no RSA pubkey algorithms are configured!zserver-sig-algsr4   ,zServer-side algorithm list: {}r   z)No common pubkey algorithms exist! Dying.z=Unable to agree on a pubkey algorithm for signing a {!r} key!)rL   r	   r   endswithresearchr7   remote_version_agreed_pubkey_algorithmr   r)   r(   server_extensionsgetr'   splitlistfilter__contains__r*   r   )	rE   r   r   xr   server_algo_strserver_algos	agreementr   s	            rF   _finalize_pubkey_algorithm&AuthHandler._finalize_pubkey_algorithm3  s    O		>EE	
 455"))*DNN,I,I;
 ;
 9K6ANN3IIeHIII:AA+N   $~~??N?!5A:A?N		%8??IJX  NN,,001BAbEJ
 *005LII7>>|L VL$=$=xHII'l		7>>{K
 		%!LM V-cjj.BCC @@K 45522K2=/U Os   
I )I c                    UR                  5       nUS:X  Ga  U R                  [        S5        [        5       nUR	                  [
        5        UR                  U R                  5        UR                  S5        UR                  U R                  5        U R                  S:X  a9  UR                  S5        [        U R                  5      nUR                  U5        GOU R                  S:X  a  UR                  S5        U R                  U R                  5      u  pEU R                  U5      nUR                  U5        UR                  U5        U R                  U R                  SU R                  U5      nU R                  R!                  Xv5      nUR                  U5        GO+U R                  S:X  a.  UR                  S	5        UR                  U R"                  5        GOU R                  S
:X  Ga  [%        U R                  U R&                  5      n	UR)                  U	R+                  5       5        U R,                  R/                  U5        U R,                  R0                  R3                  5       u  pU
[4        :X  a7  U R7                  U5        U R,                  R0                  R3                  5       u  pU
[8        :X  Ga  UR;                  5       n[        5       nUR	                  [<        5         UR                  U	R?                  U R@                  XR                  5      5        U R,                  R/                  U5         U R,                  R0                  R3                  5       u  pU
[F        :X  a  UR;                  5       n U	R?                  U R@                  UU R                  U5      nUc  OM[        5       nUR	                  [<        5        UR                  U5        U R,                  RI                  U5        M  [        5       nUR	                  [P        5        UR                  U	RS                  U R,                  RT                  5      5        GOU
[V        :X  a  [K        S5      eU
[X        :X  a\  UR[                  5       nUR[                  5       nUR;                  5       nUR;                  5         [K        SRM                  UUU5      5      eU
[\        :X  a  U R_                  U5        g [K        SRM                  [N        U
   5      5      eU R                  S:X  a  U R,                  R`                  (       ah  U R,                  Rb                  nURe                  U R                  5        URS                  U R,                  RT                  5      nUR                  U5        O5U R                  S:X  a  O$[K        SRM                  U R                  5      5      eU R,                  R/                  U5        g U R                  [        SRM                  U5      5        g ! [B         a  nU RE                  U5      s S nA$ S nAff = f! [B         a  nU RE                  U5      s S nA$ S nAff = f)Nr   zuserauth is OKssh-connectionr=   Fre   Tro   r4   ru   zReceived Package: {}zServer returned an error tokenzCGSS-API Error:
Major Status: {}
Minor Status: {}
Error Message: {}
ry   rY   zUnknown auth method "{}"z!Service request "{}" accepted (?))3r   rL   r	   r&   r   r   r   r8   r;   r   r'   r=   r   r>   r   r   sign_ssh_datar@   r.   rD   	add_bytesssh_gss_oidsr7   r   
packetizerread_messager   _parse_userauth_bannerr   
get_stringr   ssh_init_sec_contextrC   r/   _handle_local_gss_failurer    send_messager)   r   r$   r   ssh_get_micr   r"   r!   get_intr   _parse_userauth_failuregss_kex_usedkexgss_ctxtset_username)rE   r   r   r=   r   r   r   blobsigsshgssptypemechr   	srv_token
next_token
maj_status
min_statuserr_msgkexgss	mic_tokens                       rF   _parse_service_accept!AuthHandler._parse_service_accept{  s   **,n$IIe-.	AJJ,-LL'LL)*LL))*:-e$T]]+X&!![0d#!%!<!<T=M=M!N ;;HE	Y'T"--$$$MM	 &&44TES!!!%;;R T__-!!%66 !1!143G3GHF//12,,Q/>>44AAC////2#~~88EEGHE88 <<>D	AJJ9:A"77 $t]] NN003#'>>#<#<#I#I#K $==()II-3-H-H$(MM$($(MM$-	."
  *1 %$+I !

+E F !Z 8 $ ; ;A >- 6  	AJJ78LL!3!3DNN4M4M!NO88
 ''GHH77!"J!"JllnGLLN& F&
G  22003&.55i6FG    N2NN//33##DMM2"..t~~/H/HI	Y'!!V+".55d6F6FG  NN((+II:AA'J[ * A#==a@@A $2 I'+'E'Ea'H HIs<   /5X (X9 
X6X1+X61X69
YYYYc                    [        5       nU[        :X  aB  U R                  [        SR	                  U5      5        UR                  [        5        SU l        OU R                  [        SR	                  U5      5        UR                  [        5        UR                  U R                  R                  R                  U5      5        U[        :X  a  UR                  S5        O&UR                  S5        U =R                  S-  sl        U R                  R!                  U5        U R                  S:  a  U R#                  5         U[        :X  a  U R                  R%                  5         g g )NzAuth granted ({}).TzAuth rejected ({}).F   
   )r&   r
   rL   r   r   r   r   r9   r   r   r7   r   get_allowed_authsr   r   rB   r   r   _auth_trigger)rE   r8   methodresultr   s        rF   _send_auth_resultAuthHandler._send_auth_result   s   I_$IId077?@JJ,-!%DIId188@AJJ,-LL,,>>xH 22d#e$$$)$$$Q'2%))+_$NN((* %rI   c                    [        5       nUR                  [        5        UR                  UR                  5        UR                  UR
                  5        UR                  [        5       5        UR                  [        UR                  5      5        UR                   H+  nUR                  US   5        UR                  US   5        M-     U R                  R                  U5        g )Nr   r   )r&   r   r   r   nameinstructionsbytesr   lenpromptsr   r7   r   )rE   qr   ps       rF   _interactive_queryAuthHandler._interactive_query  s    I	

-.	QVV	Q^^$	UW			#aii.!ALL1MM!A$  	$$Q'rI   c           	         U R                   R                  (       d]  [        5       nUR                  [        5        UR                  S5        UR                  S5        U R                   R                  U5        g U R                  (       a  g UR                  5       nUR                  5       nUR                  5       nU R                  [        SR                  XCU5      5        US:w  a  U R                  5         g U R                  b7  U R                  U:w  a'  U R                  [        S5        U R!                  5         g X l        U R                   R"                  R%                  5       nUS:X  a'  U R                   R"                  R'                  U5      nGOiUS:X  a  UR)                  5       nUR+                  5       n UR-                  S5      nU(       aA  U R                  [        S5        UR+                  5       n	 U	R-                  SS	5      n	[0        nGOU R                   R"                  R3                  X(5      nGOUS
:X  GaI  UR)                  5       n
UR                  5       nUR+                  5       n U R5                  X5      nUc  U R!                  5         g U R                   R"                  RC                  X-5      nU[0        :w  a  U
(       d]  [        5       nUR                  [D        5        UR                  U5        UR                  U5        U R                   R                  U5        g [        UR+                  5       5      nU RG                  XX+5      nURI                  UU5      (       d  U R                  [8        S5        [0        nGOrUS:X  a_  URK                  5       nU R                   R"                  RM                  UU5      n[O        U[P        5      (       a  U RS                  U5        g GOUS:X  Ga5  U(       Ga-  [U        U5      nURW                  5       nUS:  a&  U R                  [8        S5        U R!                  5         URK                  5       nURY                  U5      nU(       d&  U R                  [8        S5        U R!                  5         UR[                  S5      n[        5       nUR                  [\        5        UR_                  U5        [a        U U5      U R                   l1        [d        [f        [h        4U R                   l5        U R                   R                  U5        g US:X  a  U(       a  URK                  5       nU R                   Rl                  nUc  [0        nU Ro                  X$U5         URq                  UU R                   Rr                  U R                  5        [t        nU R                   R"                  Rw                  X&5        O%U R                   R"                  R'                  U5      nU Ro                  X$U5        g ! [.         a     GNQf = f! [.         a     GN"f = f! [6         a;  nU R                  [8        SR                  [;        U5      5      5        S n S nAGNS nAf[<         aI  nSnU R                  [8        UR                  UR>                  R@                  U5      5        S n S nAGN?S nAff = f! [<         a    [0        nU Ro                  X$U5        e f = f)NrY   Fz.Auth request (type={}) service={}, username={}r   zKAuth rejected because the client attempted to change username in mid-flightr=   zUTF-8z+Auth request to change passwords (rejected)r   re   zAuth rejected: public key: {}z9Auth rejected: unsupported or mangled public key ({}: {})z Auth rejected: invalid signaturero   ru   r   z8Disconnect: Received more than one GSS-API OID mechanismz5Disconnect: Received an invalid GSS-API OID mechanismserverry   )<r7   rT   r&   r   r   r   r   r   r9   r   rL   r	   r   r   rA   r   r   r   enable_auth_gssapicheck_auth_noneget_boolean
get_binarydecodeUnicodeErrorr   check_auth_passwordr   r)   r   str	Exceptionr   __name__check_auth_publickeyr   r   verify_ssh_sigr   check_auth_interactive
isinstancer-   r  r.   r   ssh_check_mechr   r   r   GssapiWithMicAuthHandlerauth_handlerr    r   r   _expected_packetr   r  ssh_check_micr   r
   check_auth_gssapi_keyex)rE   r   r8   r   r  gss_authr  	changereqr=   newpasswordsig_attachedr   r   rf   r   r   r   r   r@   r   mechsdesired_mechmech_oksupported_mechr   s                            rF   _parse_userauth_request#AuthHandler._parse_userauth_request%  s   ~~))	AJJ,-LL MM% NN((+::<**,		<CC	
 &&224*(*II] ))+%>>//BBDV^^11AA(KFz!I||~H#??73
  		%!NOlln"-"4"4Wi"HK %55II {"==?L 

IllnG55iI {--/^^11FFF $#  	AJJ23LL+LL)NN003alln---( ))$44IId$FG(F--J^^11HH*F &"233''/ 4 ((XV_F IIKE qy		N --/<<>L++L9G		K --/#00:N 	AJJ45KK'*Bf+DNN' *$#/DNN+
 NN((+~%(I^^//F~$&&x@$$t~~88$:L:L %FNN((@@ ^^11AA(KFx8G     $     		$ ? F Fs1v NO Q		$

1;;+?+? CDr  $&&x@sT   :X 9X  2X1 :1[
 
XX 
X.-X.1
[;0Y11[>>[[
$[.c                     U R                  [        SR                  U R                  5      5        SU l        U R
                  R                  5         U R                  b  U R                  R                  5         g g )NzAuthentication ({}) successful!T)	rL   r   r   r;   r9   r7   r  r:   r}   r   s     rF   _parse_userauth_success#AuthHandler._parse_userauth_success  s^    		3::4;K;KL	
 "$$&??&OO! 'rI   c                    UR                  5       nUR                  5       nU(       aS  U R                  [        S5        U R                  [        S[        U5      -   5        [        U5      U R                  l        OU R                  U;  ae  SR                  U R                  5      SR                  U5      4 H  nU R                  [        U5        M     [        SU5      U R                  l        O/U R                  [        SR                  U R                  5      5        SU l        S U l        U R                  b  U R                  R                  5         g g )NzAuthentication continues...z	Methods: z'Authentication type ({}) not permitted.zAllowed methods: {}zBad authentication typeAuthentication ({}) failed.F)get_listr  rL   r   r	   r  r,   r7   saved_exceptionr;   r   r+   r9   r8   r:   r}   )rE   r   authlistpartialr   s        rF   r   #AuthHandler._parse_userauth_failure  s   ::< --/IId9:IIe[3x=89-B8-LDNN*X-9@@$$ &,,X6	 		%% .C)8.DNN* II3::4;K;KL #??&OO! 'rI   c                 z    UR                  5       nX l        U R                  [        SR	                  U5      5        g )NzAuth banner: {})r   r<   rL   r   r   )rE   r   r<   s      rF   r   "AuthHandler._parse_userauth_banner  s,    		$)0089rI   c                 @   U R                   S:w  a  [        S5      eUR                  5       nUR                  5       nUR                  5         UR	                  5       n/ n[        U5       H2  nUR                  UR                  5       UR                  5       45        M4     U R                  X#U5      n[        5       nUR                  [        5        UR                  [        U5      5        U H  nUR                  U5        M     U R                  R!                  U5        g )Nro   z Illegal info request from server)r;   r)   r   r  r   rangeappendr  r?   r&   r   r   r   r  r   r7   r   )	rE   r   titler	  r  prompt_listiresponse_listrs	            rF   _parse_userauth_info_request(AuthHandler._parse_userauth_info_request  s    55ABB

zz|	))+wA

ammo>?  00
 I	

./			#m$%ALLO $$Q'rI   c                    U R                   R                  (       d  [        S5      eUR                  5       n/ n[	        U5       H"  nUR                  UR                  5       5        M$     U R                   R                  R                  U5      n[        U[        5      (       a  U R                  U5        g U R                  U R                  SU5        g )Nz!Illegal info response from serverro   )r7   rT   r)   r   r>  r?  r   r   check_auth_interactive_responser   r-   r  r  rA   )rE   r   n	responsesrB  r  s         rF   _parse_userauth_info_response)AuthHandler._parse_userauth_info_response  s    ~~))BCCIIK	qAQZZ\* --MM
 f.//##F+ 6	
rI   c                 6   XR                   l        U R                  [        SR	                  U5      5        U R                  [
        SR	                  U R                  5      5        SU l        S U l        U R                  b  U R                  R                  5         g )NzGSSAPI failure: {}r5  F)r7   r7  rL   r	   r   r   r;   r9   r8   r:   r}   )rE   r   s     rF   r   %AuthHandler._handle_local_gss_failure*  sr    )*&		%-44Q78		$5<<T=M=MNO"??&OO!rI   c                 f    [         U R                  [        U R                  [        U R
                  0$ rK   )r   r   r   r/  r   rK  rP   s    rF   _server_handler_table!AuthHandler._server_handler_table<  s/      !<!< $">">&(J(J
 	
rI   c           
          [         U R                  [        U R                  [        U R
                  [        U R                  [        U R                  0$ rK   )
r   r   r   r2  r   r   r   r   r   rE  rP   s    rF   _client_handler_table!AuthHandler._client_handler_tableH  sE      : : $">"> $">">!<!<%t'H'H
 	
rI   c                 h    U R                   R                  (       a  U R                  $ U R                  $ rK   )r7   rT   rP  rS  rP   s    rF   _handler_tableAuthHandler._handler_tableT  s'    >>%%------rI   )r:   rB   r;   rA   r9   r<   rD   rC   r?   r=   r>   r@   r7   r8   Nr4   ))r  
__module____qualname____firstlineno____doc__rG   rL   rQ   rU   ra   rg   rk   rq   rv   rz   r~   r]   r   r   r   r   r   r   r   r   r   r   r  r  r/  r2  r   r   rE  rK  r   propertyrP  rS  rV  __static_attributes__ rI   rF   r1   r1   M   s    $$*"!*	*	**
**"(
'<1&	E	FPCJ+0(o9b""<:(*
$$ 
 
 
 
 . .rI   r1   c                       \ rS rSrSrSrS rS r\S 5       r	\S 5       r
\S 5       r\S	 5       rS
 rS rS rS rS r\\\\\\\\0r\S 5       rSrg)r"  i\  zA specialized Auth handler for gssapi-with-mic

During the GSSAPI token exchange we need a modified dispatch table,
because the packet type numbers are not unique.
ru   c                     Xl         X l        g rK   	_delegater   )rE   delegater   s      rF   rG   !GssapiWithMicAuthHandler.__init__e  s    !rI   c                 V    U R                  5         U R                  R                  5       $ rK   )_restore_delegate_auth_handlerrc  r~   rP   s    rF   r~   GssapiWithMicAuthHandler.aborti  s!    ++-~~##%%rI   c                 .    U R                   R                  $ rK   )rc  r7   rP   s    rF   r7   "GssapiWithMicAuthHandler.transportm  s    ~~'''rI   c                 .    U R                   R                  $ rK   )rc  r  rP   s    rF   r  *GssapiWithMicAuthHandler._send_auth_resultq  s    ~~///rI   c                 .    U R                   R                  $ rK   )rc  rA   rP   s    rF   rA   &GssapiWithMicAuthHandler.auth_usernameu  s    ~~+++rI   c                 .    U R                   R                  $ rK   )rc  rC   rP   s    rF   rC   !GssapiWithMicAuthHandler.gss_hosty  s    ~~&&&rI   c                 :    U R                   U R                  l        g rK   )rc  r7   r#  rP   s    rF   rg  7GssapiWithMicAuthHandler._restore_delegate_auth_handler}  s    &*nn#rI   c                 (   UR                  5       nU R                  n UR                  U R                  X R                  5      nUbl  [        5       nUR                  [        5        UR                  U5        [         ["        [$        4U R                  l        U R                  R)                  U5        g g ! [
         aS  nXPR                  l        [        nU R                  5         U R                  U R                  U R                  U5        e S nAff = frK   )r   r   ssh_accept_sec_contextrC   rA   r  r7   r7  r   rg  r  r  r&   r   r   r   r    r#   r   r$  r   )rE   r   client_tokenr   tokenr   r  s          rF   _parse_userauth_gssapi_token5GssapiWithMicAuthHandler._parse_userauth_gssapi_token  s    ||~ 		11|-?-?E 	AJJ12LL)'$/DNN+
 NN((+   	-.NN* F//1""4#5#5t{{FK	s   &B4 4
D>ADDc                    UR                  5       nU R                  nU R                  nU R                  5          UR	                  X R
                  R                  U5        [        nU R
                  R                  R                  XF5        U R                  X@R                  U5        g ! [         a8  nXPR
                  l        [        nU R                  X@R                  U5        e S nAff = frK   )r   r   rA   rg  r%  r7   r   r  r7  r   r  r  r
   r   check_auth_gssapi_with_mic)rE   r   r   r   r8   r   r  s          rF   _parse_userauth_gssapi_mic3GssapiWithMicAuthHandler._parse_userauth_gssapi_mic  s    LLN	%%++-	  >>44h !$$??	
 	xf=  	-.NN* F""8[[&A		s   &B( (
C*23C%%C*c                 X    U R                  5         U R                  R                  U5      $ rK   )rg  rc  r   r   s     rF   r   /GssapiWithMicAuthHandler._parse_service_request  s#    ++-~~44Q77rI   c                 X    U R                  5         U R                  R                  U5      $ rK   )rg  rc  r/  r   s     rF   r/  0GssapiWithMicAuthHandler._parse_userauth_request  s#    ++-~~55a88rI   c                     U R                   $ rK   )(_GssapiWithMicAuthHandler__handler_tablerP   s    rF   rV  'GssapiWithMicAuthHandler._handler_table  s     ###rI   rb  N)r  rY  rZ  r[  r\  r  rG   r~   r]  r7   r  rA   rC   rg  rw  r{  r   r/  r   r   r    r#   r  rV  r^  r_  rI   rF   r"  r"  \  s     F& ( ( 0 0 , , ' '5,4>089
 	35!#?!;	O $ $rI   r"  c                   b   ^  \ rS rSrSr\U 4S j5       rSS jrS rS r	S r
SS jrS	 rS
rU =r$ )AuthOnlyHandleri  zI
AuthHandler, and just auth, no service requests!

.. versionadded:: 3.2
c                 F   > [         TU ]  R                  5       nU[        	 U$ rK   )superrS  copyr   )rE   my_tabler   s     rF   rS  %AuthOnlyHandler._client_handler_table  s$    70557'(rI   c                    X l         Xl        [        5       nUR                  [        5        UR                  U5        UR                  S5        UR                  U5        U" U5        U R                  R                     U R                  R                  U5        SSS5        [        R                  " 5       U l        U R                  U R                  5      $ ! , (       d  f       NC= f)as  
Submit a userauth request message & wait for response.

Performs the transport message send call, sets self.auth_event, and
will lock-n-block as necessary to both send, and wait for response to,
the USERAUTH_REQUEST.

Most callers will want to supply a callback to ``finish_message``,
which accepts a Message ``m`` and may call mutator methods on it to add
more fields.
r   N)r;   r8   r&   r   r   r   r7   r[   r   	threadingEventr:   r   )rE   r8   r  finish_messager   s        rF   send_auth_request!AuthOnlyHandler.send_auth_request  s     " I	

()	X	%&	Vq ^^  NN((+ ! $//+%%doo66 ! s   =C
C$c                 &    U R                  US5      $ rX   r  )rE   r8   s     rF   ra   AuthOnlyHandler.auth_none  s    %%h77rI   c                    ^^^^ U R                  T5      u  nmU R                  U5      mU R                  TSUT5      mUUUU4S jnU R                  USU5      $ )Nr   c                    > U R                  S5        U R                  T5        U R                  T5        U R                  TR                  TT5      5        g )NT)r   r   r   )r   r   r   r   rf   s    rF   finish.AuthOnlyHandler.auth_publickey.<locals>.finish  sB    
 MM$LL#LLLL**4;<rI   re   )r   r   r   r  )rE   r8   rf   r   r  r   r   r   s     `  @@@rF   rg   AuthOnlyHandler.auth_publickey  sd    44S9$33H=	%%	
	= 	= %%hVDDrI   c                 6   ^ U4S jnU R                  USU5      $ )Nc                 \   > U R                  S5        U R                  [        T5      5        g )NF)r   r   r'   )r   r=   s    rF   r  -AuthOnlyHandler.auth_password.<locals>.finish  s!     MM% LL8%rI   r=   r  )rE   r8   r=   r  s     ` rF   rk   AuthOnlyHandler.auth_password  s    	& %%h
FCCrI   c                 P   ^ SU l         X l        U4S jnU R                  USU5      $ )rn   keyboard_interactivec                 J   > U R                  S5        U R                  T5        g )Nr4   )r   )r   r@   s    rF   r  0AuthOnlyHandler.auth_interactive.<locals>.finish/  s     LLLL$rI   ro   )r;   r?   r  )rE   r8   rp   r@   r  s      ` rF   rq    AuthOnlyHandler.auth_interactive%  s0     2#* 	% %%h0FOOrI   c                     SnU R                  [        U5        UR                  SS5      nX;   d  XB;   a  X;   a  UOUnSU< S3nUnOUS   nU< SU< 3nU R                  [        U5        U$ )NzdServer did not send a server-sig-algs list; defaulting to something in our preferred algorithms listr   r4   zCurrent key type, z&, is in our preferred list; using thatr   z3 not in our list - trying first list item instead, )rL   r	   r   )rE   r   r   r   noncert_key_typeactualalgos          rF   r   1AuthOnlyHandler._choose_fallback_pubkey_algorithm8  s    t		%#++,CRH#3#?!)!5X;KF&vj0VWCDA;DL STXS[\C		%rI   )r:   r;   r?   r8   rK   rX  )r  rY  rZ  r[  r\  r]  rS  r  ra   rg   rk   rq   r   r^  __classcell__)r   s   @rF   r  r    sC      
'7R8E,DP& rI   r  );r\  r5   r  r   r   paramiko.commonr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   paramiko.messager&   paramiko.utilr'   r(   paramiko.ssh_exceptionr)   r*   r+   r,   paramiko.serverr-   paramiko.ssh_gssr.   r/   r1   r"  r  r_  rI   rF   <module>r     s   &    	$ $ $ $ $ $ $ $ $ $J %   - 4L. L.^i$ i$X|k |rI   