+
    üÐjò7  ã                   óf  € R t ^ RIHtHt ^ RIHtHt ^ RIHtH	t	H
t
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt  ^ RIHt ]t]! R
^^^ 4      t ! R R]4      t ! R R4      t]! ]4       ! R R]P4                  4      4       t]P8                  ! ]]]4        ! R R]	P:                  4      t]! ]]4       ! R R4      4       t]! ]P@                  4       ! R R4      4       t! ! R R]PD                  4      t# ! R R]PD                  4      t$ ! R R]PD                  4      t% ! R R4      t& ! R R 4      t' ! R! R"]'4      t( ! R# R$]'4      t) ! R% R&]']&]PD                  4      t* ! R' R(](]&]PD                  4      t+ ! R) R*])]&]PD                  4      t, ! R+ R,]PD                  4      t-R	#   ] d    R	t ELoi ; i)-z6
Tests for L{twisted.cred}, now with 30% more starch.
)ÚhexlifyÚ	unhexlify)Ú	InterfaceÚimplementer)ÚcheckersÚcredentialsÚerrorÚportal)Údefer)Ú
components)ÚVersion)Úunittest)ÚcryptNÚTwistedc                   ó   € ] tR t^tRtRtR# )Ú	ITestablez*
An interface for a theoretical protocol.
© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú=/usr/lib/python3/dist-packages/twisted/cred/test/test_cred.pyr   r      s   † ñó 	r   r   c                   ó6   a € ] tR t^'t o RtR tR tR tRtV t	R# )Ú
TestAvatarz
A test avatar.
c                ó.   € Wn         R V n        R V n        R# )FN)ÚnameÚloggedInÚ	loggedOut)Úselfr   s   &&r   Ú__init__ÚTestAvatar.__init__,   s   € ØŒ	ØˆŒØˆŽr   c                ó<   € V P                   '       d   Q hR V n         R# ©TN)r    ©r"   s   &r   ÚloginÚTestAvatar.login1   s   € Ø—=—=�=Ð Ð ØˆŽr   c                ó   € R V n         R# r&   )r!   r'   s   &r   ÚlogoutÚTestAvatar.logout5   s	   € ØˆŽr   )r    r!   r   N)
r   r   r   r   r   r#   r(   r+   r   Ú__classdictcell__©Ú__classdict__s   @r   r   r   '   s   ø‡ € ñòò
÷ð r   r   c                   ó   € ] tR t^9tRtRtR# )ÚTestablez%
A theoretical protocol for testing.
r   Nr   r   r   r   r1   r1   9   s   † ñó 	r   r1   c                   ó   € ] tR t^EtRtR# )ÚIDerivedCredentialsr   N©r   r   r   r   r   r   r   r   r3   r3   E   s   † Ûr   r3   c                   ó,   a € ] tR t^It o R tR tRtV tR# )ÚDerivedCredentialsc                ó   € Wn         W n        R # ©N)ÚusernameÚpassword)r"   r9   r:   s   &&&r   r#   ÚDerivedCredentials.__init__K   s   € Ø ŒØ Žr   c                ó   € WP                   8H  # r8   )r:   ©r"   r:   s   &&r   ÚcheckPasswordÚ DerivedCredentials.checkPasswordO   s   € ØŸ=™=Ñ(Ð(r   )r:   r9   N)r   r   r   r   r#   r>   r   r-   r.   s   @r   r6   r6   I   s   ø‡ € ò!÷)ð )r   r6   c                   ó0   a € ] tR t^St o RtR tR tRtV tR# )Ú	TestRealmz
A basic test realm.
c                ó   € / V n         R # r8   ©Úavatarsr'   s   &r   r#   ÚTestRealm.__init__Y   s	   € ØˆŽr   c                óâ   € WP                   9   d   V P                   V,          pM\        V4      pW@P                   V&   VP                  4        V^ ,          V^ ,          ! V4      VP                  3# )é    )rD   r   r(   r+   )r"   ÚavatarIdÚmindÚ
interfacesÚavatars   &&&* r   ÚrequestAvatarÚTestRealm.requestAvatar\   sW   € Ø—|‘|Ô#Ø—\‘\ (Õ+‰Fä Ó)ˆFØ%+�L‰L˜Ñ"Ø�‰ŒØ˜1•˜z¨!ž}¨VÓ4°f·m±mÐDÐDr   rC   N)	r   r   r   r   r   r#   rL   r   r-   r.   s   @r   rA   rA   S   s   ø‡ € ñò÷Eð Er   rA   c                   óH   a € ] tR t^ft o RtR tR tR tR tR t	R t
RtV tR	# )
Ú	CredTestszR
Tests for the meat of L{twisted.cred} -- realms, portals, avatars, and
checkers.
c                ó$  € \        4       V n        \        P                  ! V P                  4      V n        \        P
                  ! 4       V n        V P                  P                  R R4       V P                  P                  V P                  4       R# )ó   bobó   helloN)	rA   Úrealmr	   ÚPortalr   Ú'InMemoryUsernamePasswordDatabaseDontUseÚcheckerÚaddUserÚregisterCheckerr'   s   &r   ÚsetUpÚCredTests.setUpl   sY   € Ü“[ˆŒ
Ü—m’m D§J¡JÓ/ˆŒÜ×GÒGÓIˆŒØ�‰×Ñ˜V XÔ.Ø�‰×#Ñ# D§L¡LÖ1r   c                óÂ   € \         P                  \         P                  .pV P                  P	                  4       pV P                  \        V4      \        V4      4       R# )z 
The checkers in a portal can check only certain types of credentials.
Since this portal has
L{checkers.InMemoryUsernamePasswordDatabaseDontUse} registered, it
N)r   ÚIUsernamePasswordÚIUsernameHashedPasswordr	   ÚlistCredentialsInterfacesÚassertEqualÚsorted)r"   ÚexpectedÚgots   &  r   Útest_listCheckersÚCredTests.test_listCheckerss   sE   € ô  ×1Ñ1´;×3VÑ3VÐWˆØ�k‰k×3Ñ3Ó5ˆØ×Ñœ ›¤f¨XÓ&6Ö7r   c                ó  € V P                  V P                  P                  \        P                  ! RR4      V \
        4      4      pVw  r#pV P                  V\
        4       V P                  VP                  V4      V RV 24       V P                  VP                  P                  4       V P                  VP                  P                  '       * 4       V! 4        V P                  VP                  P                  4       R# )zp
Calling C{login} on a portal with correct credentials and an interface
that the portal's realm supports works.
rQ   rR   ú does not implement N)ÚsuccessResultOfr	   r(   r   ÚUsernamePasswordr   r_   Ú
assertTrueÚ
providedByÚoriginalr    r!   ©r"   r(   ÚifaceÚimplr+   s   &    r   Útest_basicLoginÚCredTests.test_basicLogin}   sÉ   € ð
 ×$Ñ$Ø�K‰K×ÑÜ×,Ò,¨V°XÓ>ÀÄióó
ˆð
 $Ñˆ�Vð 	×Ñ˜¤	Ô*Ø�‰˜×(Ñ(¨Ó.°4°&Ð8LÈUÈGÐ0TÔUð 	�‰˜Ÿ™×.Ñ.Ô/Ø�‰˜DŸM™M×3Ñ3Ô3Ô4ÙŒØ�‰˜Ÿ™×/Ñ/Ö0r   c                óò  € V P                  V P                  P                  \        RR4      V \        4      4      pVw  r#pV P                  V\        4       V P                  VP                  V4      V RV 24       V P                  VP                  P                  4       V P                  VP                  P                  '       * 4       V! 4        V P                  VP                  P                  4       R# )zf
Logging in with correct derived credentials and an interface
that the portal's realm supports works.
rQ   rR   rf   N)rg   r	   r(   r6   r   r_   ri   rj   rk   r    r!   rl   s   &    r   Útest_derivedInterfaceÚCredTests.test_derivedInterface“   sÁ   € ð
 ×$Ñ$Ø�K‰K×ÑÔ0°¸ÓBÀDÌ)ÓTó
ˆð $Ñˆ�Vð 	×Ñ˜¤	Ô*Ø�‰˜×(Ñ(¨Ó.°4°&Ð8LÈUÈGÐ0TÔUð 	�‰˜Ÿ™×.Ñ.Ô/Ø�‰˜DŸM™M×3Ñ3Ô3Ô4ÙŒØ�‰˜Ÿ™×/Ñ/Ö0r   c                ó  € V P                  V P                  P                  \        P                  ! RR4      V \
        4      4      pV P                  V4       V P                  \        P                  VP                  4       R# )z}
Calling C{login} with incorrect credentials (in this case a wrong
password) causes L{error.UnauthorizedLogin} to be raised.
rQ   s   h3lloN©ÚfailureResultOfr	   r(   r   rh   r   ri   r_   r   ÚUnauthorizedLoginÚtype©r"   r(   s   & r   Útest_failedLoginPasswordÚ"CredTests.test_failedLoginPassword§   ób   € ð
 ×$Ñ$Ø�K‰K×ÑÜ×,Ò,¨V°XÓ>ÀÄióó
ˆð
 	�‰˜ÔØ×Ñœ×0Ñ0°%·*±*Ö=r   c                ó  € V P                  V P                  P                  \        P                  ! RR4      V \
        4      4      pV P                  V4       V P                  \        P                  VP                  4       R# )zz
Calling C{login} with incorrect credentials (in this case no known
user) causes L{error.UnauthorizedLogin} to be raised.
s   jayrR   Nru   ry   s   & r   Útest_failedLoginNameÚCredTests.test_failedLoginName´   r|   r   )rV   r	   rS   N)r   r   r   r   r   rY   rc   ro   rr   rz   r~   r   r-   r.   s   @r   rO   rO   f   s-   ø‡ € ñò
2ò8ò1ò,1ò(>÷>ð >r   rO   c                   óL   a € ] tR t^Ât o . R	OtR tR tR tR tR t	R t
RtV tR# )
ÚOnDiskDatabaseTestsc                ó  € V P                  4       V n        \        V P                  R 4      ;_uu_ 4       pV P                   F+  w  r#VP	                  VR,           V,           R,           4       K-  	  RRR4       R#   + '       g   i     R# ; i)Úwbó   :ó   
N)ÚmktempÚdbfileÚopenÚusersÚwrite)r"   ÚfÚuÚps   &   r   rY   ÚOnDiskDatabaseTests.setUpÉ   sZ   € Ø—k‘k“mˆŒÜ�$—+‘+˜t×$Ô$¨ØŸ
œ
‘�Ø—‘˜˜D� 1� uÕ,Ö-ñ #÷ %×$×$Ò$ús   ´<A:Á:B	c                ó¦   € \         P                  ! R4      V n        V P                  \        P
                  V P                  P                  R4       R# )zO
A missing db file will cause a permanent rejection of authorization
attempts.
ztest_thisbetternoteverexist.dbÚuserN)r   ÚFilePasswordDBÚdbÚassertRaisesr   rw   ÚgetUserr'   s   &r   Útest_getUserNonexistentDatabaseÚ3OnDiskDatabaseTests.test_getUserNonexistentDatabaseÏ   s7   € ô
 ×)Ò)Ð*JÓKˆŒà×Ñœ%×1Ñ1°4·7±7·?±?ÀFÖKr   c                óD  € \         P                  ! V P                  4      V n        V P                   Fj  w  rV P                  \        V P                  P                  VP                  4       4       V P                  V P                  P                  V4      W34       Kl  	  R # r8   )
r   r‘   r‡   r’   r‰   r“   ÚKeyErrorr”   Úupperr_   ©r"   rŒ   r�   s   &  r   ÚtestUserLookupÚ"OnDiskDatabaseTests.testUserLookupØ   sg   € Ü×)Ò)¨$¯+©+Ó6ˆŒØ—J”J‰DˆAØ×Ñœh¨¯©¯©¸¿¹»ÔCØ×Ñ˜TŸW™WŸ_™_¨QÓ/°!°Ö8ó r   c                óò   € \         P                  ! V P                  R R7      V n        V P                   F?  w  rV P                  V P                  P                  VP                  4       4      W34       KA  	  R# )F)ÚcaseSensitiveN)r   r‘   r‡   r’   r‰   r_   r”   r™   rš   s   &  r   ÚtestCaseInSensitivityÚ)OnDiskDatabaseTests.testCaseInSensitivityÞ   sO   € Ü×)Ò)¨$¯+©+ÀUÔKˆŒØ—J”J‰DˆAØ×Ñ˜TŸW™WŸ_™_¨Q¯W©W«YÓ7¸!¸Ö@ó r   c           	     óê  € \         P                  ! V P                  4      V n        V P                   UUu. uF  w  r\
        P                  ! W4      NK  	  ppp\        P                  ! V Uu. uF.  p\        P                  ! V P                  P                  V4      NK0  	  up4      pTP                  V P                  V P                   UUu. uF  w  rVNK	  	  upp4       V# u uppi u upi u uppi r8   )r   r‘   r‡   r’   r‰   r   rh   r
   ÚgatherResultsÚmaybeDeferredÚrequestAvatarIdÚaddCallbackr_   )r"   rŒ   r�   ÚcredsÚcÚds   &     r   ÚtestRequestAvatarIdÚ'OnDiskDatabaseTests.testRequestAvatarIdã   s²   € Ü×)Ò)¨$¯+©+Ó6ˆŒØ@DÇ
Â
ÔKÁ
¹¸”×-Ò-¨aÖ3Á
ˆÑKÜ×ÒÙFKÓLÁeÀŒU× Ò  §¡×!8Ñ!8¸!Ö<ÁeÑLó
ˆð 	
�‰�d×&Ñ&°t·z²zÔ(B±z©t¨q«±zÒ(BÔCØˆùó LùâLùã(Bs   µ!C$Á-4C*ÃC/c           	     óü  € \         P                  ! V P                  4      V n        V P	                  R R\
        4      pV P                   UUu. uF  w  r#V! W#4      NK  	  ppp\        P                  ! V Uu. uF.  p\        P                  ! V P                  P                  V4      NK0  	  up4      pTP                  V P                  V P                   UUu. uF  w  r#VNK	  	  upp4       V# u uppi u upi u uppi )útwisted.cred.credentialsÚUsernameHashedPassword)r   r‘   r‡   r’   ÚgetDeprecatedModuleAttributeÚ_uhpVersionr‰   r
   r¢   r£   r¤   r¥   r_   )r"   r­   rŒ   r�   r¦   r§   r¨   s   &      r   ÚtestRequestAvatarId_hashedÚ.OnDiskDatabaseTests.testRequestAvatarId_hashedì   sÈ   € Ü×)Ò)¨$¯+©+Ó6ˆŒØ!%×!BÑ!BØ&Ð(@Ä+ó"
Ðð ;?¿*º*ÔE¹*±$°!Ñ'¨Ö-¹*ˆÑEÜ×ÒÙFKÓLÁeÀŒU× Ò  §¡×!8Ñ!8¸!Ö<ÁeÑLó
ˆð 	
�‰�d×&Ñ&°t·z²zÔ(B±z©t¨q«±zÒ(BÔCØˆùó FùâLùã(Bs   ÁC-Á64C3ÃC8)r’   r‡   N©)ó   user1s   pass1)ó   user2s   pass2)ó   user3s   pass3)r   r   r   r   r‰   rY   r•   r›   rŸ   r©   r°   r   r-   r.   s   @r   r�   r�   Â   s1   ø‡ € ò€Eò.òLò9òAò
÷
ð 
r   r�   c                   óv   a € ] tR t^ùt o . ROtR tV 3R lR ltR tR tR t	R t
R t]f	   R
tRtV tR	# RtV tR	# )Ú!HashedPasswordOnDiskDatabaseTestsc                ó
  € V P                  4       p\        P                  ! WP                  R 7      V n        \        VR4      ;_uu_ 4       pV P                   FB  w  r4VP                  VR,           V P                  W4VR,          4      ,           R,           4       KD  	  RRR4       \        4       p\        P                  ! V4      V n        V P                  P                  V P                  4       R#   + '       g   i     L\; i))Úhashrƒ   r„   ºNé   Nr…   N)r†   r   r‘   r¹   r’   rˆ   r‰   rŠ   rA   r	   rT   ÚportrX   )r"   r‡   r‹   rŒ   r�   Úrs   &     r   rY   Ú'HashedPasswordOnDiskDatabaseTests.setUp   s¨   € Ø—‘“ˆÜ×)Ò)¨&·y±yÔAˆŒÜ�&˜$×Ô 1ØŸ
œ
‘�Ø—‘˜˜D� 4§9¡9¨Q°1°Rµ5Ó#9Õ9¸EÕAÖBñ #÷  ô ‹KˆÜ—M’M !Ó$ˆŒ	Ø�	‰	×!Ñ! $§'¡'Ö*÷  ×ús   ÁAC2Ã2D	c                ó2   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ /# )r»   rŒ   r�   ÚsÚreturn©Úbytes)Úformatr/   s   "€r   Ú__annotate__Ú.HashedPasswordOnDiskDatabaseTests.__annotate__  s)   ø€ ÷ /ñ /‘eð /¡ð /©%ð /±Eñ /r   c                óx   € \        VP                  R 4      VP                  R 4      4      pVP                  R 4      # )Úascii)r   ÚdecodeÚencode)r"   rŒ   r�   rÀ   Úhashed_passwords   &&&& r   r¹   Ú&HashedPasswordOnDiskDatabaseTests.hash  s1   € Ü §¡¨Ó 1°1·8±8¸GÓ3DÓEˆØ×%Ñ% gÓ.Ð.r   c           	     ó~  € V P                    UUu. uF  w  r\        P                  ! W4      NK  	  ppp\        P                  ! V Uu. uF  q@P
                  P                  V4      NK  	  up4      pTP                  V P                  V P                    UUu. uF  w  rVNK	  	  upp4       V# u uppi u upi u uppi r8   )	r‰   r   rh   r
   r¢   r’   r¤   r¥   r_   ©r"   rŒ   r�   Ú	goodCredsr§   r¨   s   &     r   ÚtestGoodCredentialsÚ5HashedPasswordOnDiskDatabaseTests.testGoodCredentials  s�   € ØDHÇJÂJÔOÁJ¹D¸A”[×1Ò1°!Ö7ÁJˆ	ÑOÜ×ÒÁYÓ OÁYÀ§¡×!8Ñ!8¸Ö!;ÁYÑ OÓPˆØ	�‰�d×&Ñ&°t·z²zÔ(B±z©t¨q«±zÒ(BÔCØˆùó PùÚ OùÛ(Bs   �!B.Á#B4ÂB9c           
     ó®  € V P                    UUu. uF  w  r\        P                  ! W4      NK  	  ppp\        P                  ! V Uu. uF#  q@P
                  P                  VR \        4      NK%  	  up4      pVP                  R 4       TP                  V P                  V P                    UUu. uF  w  rVNK	  	  upp4       V# u uppi u upi u uppi )Nc                 óh   € V  UUUu. uF  w  rq2P                   P                  NK  	  uppp# u upppi r8   )rk   r   )ÚxÚiÚaÚls   &   r   Ú<lambda>ÚMHashedPasswordOnDiskDatabaseTests.testGoodCredentials_login.<locals>.<lambda>  s    € ÁÕ BÁ±W°Q¸1§¡§¤ÁÔ BùÔ Bs   ‡!-)
r‰   r   rh   r
   r¢   r¼   r(   r   r¥   r_   rÎ   s   &     r   ÚtestGoodCredentials_loginÚ;HashedPasswordOnDiskDatabaseTests.testGoodCredentials_login  s¤   € ØDHÇJÂJÔOÁJ¹D¸A”[×1Ò1°!Ö7ÁJˆ	ÑOÜ×ÒÙ:CÓD¹)°Q�Y‰Y�_‰_˜Q ¤iÖ0¹)ÑDó
ˆð 	
�‰ÑBÔCØ	�‰�d×&Ñ&°t·z²zÔ(B±z©t¨q«±zÒ(BÔCØˆùó PùâDùó )Cs   �!CÁ)CÂ/Cc           
     ód  € V P                    UUu. uF  w  r\        P                  ! VR 4      NK  	  ppp\        P                  ! V Uu. uF#  q@P
                  P                  VR\        4      NK%  	  upRR7      pVP                  V P                  \        P                  4       V# u uppi u upi )s   wrong passwordNT©ÚconsumeErrors)r‰   r   rh   r
   ÚDeferredListr¼   r(   r   r¥   Ú_assertFailuresr   rw   )r"   rŒ   r�   ÚbadCredsr§   r¨   s   &     r   ÚtestBadCredentialsÚ4HashedPasswordOnDiskDatabaseTests.testBadCredentials  s”   € àKOÏ:Ê:ô
ÙKUÁ4À1ŒK×(Ò(¨Ð,=Ö>É:ð 	ñ 
ô ×ÒÙ:BÓC¹(°Q�Y‰Y�_‰_˜Q ¤iÖ0¹(ÑCÐSWô
ˆð 	
�‰�d×*Ñ*¬E×,CÑ,CÔDØˆùó
ùò Ds   �"B'Á	)B-c                ó¢  € V P                  R R\        4      pV P                   UUu. uF$  w  r#V! W P                  RW2R,          4      4      NK&  	  ppp\        P
                  ! V Uu. uF#  qPP                  P                  VR\        4      NK%  	  upRR7      pVP                  V P                  \        P                  4       V# u uppi u upi )r¬   r­   Nrº   TrÝ   )r®   r¯   r‰   r¹   r
   rß   r¼   r(   r   r¥   rà   r   ÚUnhandledCredentials)r"   r­   rŒ   r�   ÚhashedCredsr§   r¨   s   &      r   ÚtestHashedCredentialsÚ7HashedPasswordOnDiskDatabaseTests.testHashedCredentials(  s¸   € Ø!%×!BÑ!BØ&Ð(@Ä+ó"
Ðð NRÏZÊZô
ÙMWÁTÀQÑ" 1§i¡i°°a¸2½Ó&?Ö@ÉZð 	ñ 
ô ×ÒÙ:EÓF¹+°Q�Y‰Y�_‰_˜Q ¤iÖ0¹+ÑFØô
ˆð 	
�‰�d×*Ñ*¬E×,FÑ,FÔGØˆùó
ùò Gs   §*CÁ()Cc                ó|   € V F5  w  r4V P                  V\        P                  4       VP                  ! V!   K7  	  R # r8   )r_   r
   ÚFAILUREÚtrap)r"   ÚfailuresÚexpectedFailuresÚflagÚfailures   &&*  r   rà   Ú1HashedPasswordOnDiskDatabaseTests._assertFailures6  s4   € Û%‰MˆDØ×Ñ˜T¤5§=¡=Ô1Ø�LŠLÐ*Ô+ñ &ñ r   Nzcrypt module not available)r’   r¼   r²   )r   r   r   r   r‰   rY   r¹   rÐ   rÚ   râ   rç   rà   r   Úskipr   r-   r.   s   @r   r·   r·   ù   sE   ø‡ € ò€Eò	+÷/ð /òòòòòð ‚}Ø+Žõ r   r·   c                   ól   a € ] tR tRt o Rt]P                  R 4       t]P                  R 4       tRt	V t
R# )ÚCheckersMixini@  a£  
L{unittest.TestCase} mixin for testing that some checkers accept
and deny specified credentials.

Subclasses must provide
  - C{getCheckers} which returns a sequence of
    L{checkers.ICredentialChecker}
  - C{getGoodCredentials} which returns a list of 2-tuples of
    credential to check and avaterId to expect.
  - C{getBadCredentials} which returns a list of credentials
    which are expected to be unauthorized.
c              #  ó¶   "  € V P                  4        F@  pV P                  4        F)  w  r#VP                  V4      x €pV P                  WC4       K+  	  KB  	  R# 5i)z\
The given credentials are accepted by all the checkers, and give
the expected C{avatarID}s
N)ÚgetCheckersÚgetGoodCredentialsr¤   r_   )r"   ÚchkÚcredrH   r½   s   &    r   Útest_positiveÚCheckersMixin.test_positiveN  sP   é € ð ×#Ñ#Ö%ˆCØ"&×"9Ñ"9Ö";‘�Ø×-Ñ-¨dÓ3Ñ3�Ø× Ñ  Ö-ó #<ó &ùs   ‚AAc              #  óÐ   "  € V P                  4        FM  pV P                  4        F6  pVP                  V4      pV P                  V\        P
                  4      x € K8  	  KO  	  R# 5i)z9
The given credentials are rejected by all the checkers.
N)rõ   ÚgetBadCredentialsr¤   ÚassertFailurer   rw   )r"   r÷   rø   r¨   s   &   r   Útest_negativeÚCheckersMixin.test_negativeY  sV   é € ð
 ×#Ñ#Ö%ˆCØ×.Ñ.Ö0�Ø×'Ñ'¨Ó-�Ø×(Ñ(¨¬E×,CÑ,CÓDÔDó 1ó &ùs   ‚A$A&r   N)r   r   r   r   r   r
   ÚinlineCallbacksrù   rþ   r   r-   r.   s   @r   ró   ró   @  s@   ø‡ € ñð ×Ññ.ó ð.ð ×ÑñEó öEr   ró   c                   ór   a € ] tR tRt o ]P
                  tRt]V 3R lR l4       t	. R	Ot
R tR tR tRtV tR# )
ÚHashlessFilePasswordDBMixinid  Nc                ó&   <€ V ^8„  d   QhRS[ RS[ /# ©r»   rÔ   rÁ   rÂ   )rÄ   r/   s   "€r   rÅ   Ú(HashlessFilePasswordDBMixin.__annotate__i  s   ø€ ÷ ñ ‘uð ¡ñ r   c                ó   € V # r8   r   ©rÔ   s   &r   ÚnetworkHashÚ'HashlessFilePasswordDBMixin.networkHashh  s   € àˆr   c              #  ó€   "  € V P                    F)  w  rV P                  WP                  V4      4      V3x € K+  	  R # 5ir8   )Ú_validCredentialsÚ	credClassr  rš   s   &  r   rö   Ú.HashlessFilePasswordDBMixin.getGoodCredentialsr  s6   é € Ø×*Ô*‰DˆAØ—.‘. ×$4Ñ$4°QÓ$7Ó8¸!Ð;Ô;ó +ùs   ‚<>c              #  óh   "  € R F'  w  rV P                  WP                  V4      4      x € K)  	  R# 5i)r³   N))r³   ó	   password3)r´   ó	   password1)s   bloofs   blarf)r  r  rš   s   &  r   rü   Ú-HashlessFilePasswordDBMixin.getBadCredentialsv  s/   é € ó
‰DˆAð
 —.‘. ×$4Ñ$4°QÓ$7Ó8Ô8ó
ùs   ‚02c              #  ód  a "  € S P                   ;'       g    R  pS P                   ;'       d    V 3R lpR EF¸  pS P                  4       p\        VR4      ;_uu_ 4       pS P                   F1  w  rgVP	                  VR,           V! V4      ,           R,           4       K3  	  RRR4       \
        P                  ! WCVR7      x € S P                  4       p\        VR4      ;_uu_ 4       pS P                   F1  w  rgVP	                  V! V4      R,           V,           R,           4       K3  	  RRR4       \
        P                  ! VR	^^ W2R7      x € S P                  4       p\        VR4      ;_uu_ 4       pS P                   FF  w  rgVP	                  R
VP                  4       ,           R,           V! V4      ,           R,           4       KH  	  RRR4       \
        P                  ! VR^^RW2R7      x € EK»  	  R#   + '       g   i     EL^; i  + '       g   i     Lé; i  + '       g   i     L\; i5i)c                 ó   € V # r8   r   r  s   &r   rØ   Ú9HashlessFilePasswordDBMixin.getCheckers.<locals>.<lambda>  s   € ©qr   c                 ó&   <€ SP                  V4      # r8   )ÚdiskHash)r9   r:   Ústoredr"   s   &&&€r   rØ   r  �  s   ø€ ¨t¯}©}¸XÔ/Fr   Frƒ   r„   r…   N)Úcacher¹   s    dingle dongle ó    s   zip,zap,s   ,zup,ó   ,)TF)r  r†   rˆ   r  rŠ   r   r‘   Útitle)r"   r  Ú	hashCheckr  ÚfnÚfObjrŒ   r�   s   f       r   rõ   Ú'HashlessFilePasswordDBMixin.getCheckers~  s�  øé € Ø—=‘=×1Ð1¡[ˆØ—M‘M÷ 
ð 
ÜFð 	ô !ˆEØ—‘“ˆBÜ�b˜$—” 4Ø ×2Ô2‘D�AØ—J‘J˜q 4�x©(°1«+Õ5¸Õ=Ö>ñ 3÷  ô ×)Ò)¨"À	ÔJÒJà—‘“ˆBÜ�b˜$—” 4Ø ×2Ô2‘D�AØ—J‘J™x¨›{Ð-?Õ?À!ÕCÀeÕKÖLñ 3÷  ô ×)Ò)¨"¨d°A°qÀÔVÒVà—‘“ˆBÜ�b˜$—” 4Ø ×2Ô2‘D�AØ—J‘JØ# a§g¡g£iÕ/°(Õ:¹XÀa»[ÕHÈ5ÕPöñ 3÷  ô
 ×)Ò)Ø�D˜!˜Q ¨Uôõ ó' !ç—�ú÷  —ú÷  —üsW   ƒ*H0®1H0ÁAG6Â!AH0Ã'AH
Ä)A	H0Å2AHÇ	-H0Ç6HÈ	H0È
HÈH0ÈH-È(H0r   ))r³   r  )r´   s	   password2)rµ   r  )r   r   r   r   r   rh   r  r  Ústaticmethodr  r  rö   rü   rõ   r   r-   r.   s   @r   r  r  d  sC   ø‡ € Ø×,Ñ,€IØ€Hà÷ó ðòÐò<ò9÷ð r   r  c                   ó0   a € ] tR tRt o ]R 4       tRtV tR# )Ú LocallyHashedFilePasswordDBMixiniœ  c                ó   € \        V 4      # r8   ©r   r  s   &r   r  Ú)LocallyHashedFilePasswordDBMixin.diskHash�  ó   € ä�q‹zÐr   r   N)r   r   r   r   r   r  r   r-   r.   s   @r   r"  r"  œ  s   ø‡ € Øñó ör   r"  c                   óf   a € ] tR tRt o ]V 3R lR l4       t ! R R]P                  4      tRt	V t
R# )Ú NetworkHashedFilePasswordDBMixini¢  c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r  rÂ   )rÄ   r/   s   "€r   rÅ   Ú-NetworkHashedFilePasswordDBMixin.__annotate__¤  s   ø€ ÷ ñ ‘uð ¡ñ r   c                ó   € \        V 4      # r8   r$  r  s   &r   r  Ú,NetworkHashedFilePasswordDBMixin.networkHash£  r&  r   c                   ó&   a € ] tR tRt o R tRtV tR# )Ú*NetworkHashedFilePasswordDBMixin.credClassi§  c                ó2   € \        V P                  4      V8H  # r8   )r   r:   r=   s   &&r   r>   Ú8NetworkHashedFilePasswordDBMixin.credClass.checkPassword¨  s   € Ü˜TŸ]™]Ó+¨xÑ7Ð7r   r   N)r   r   r   r   r>   r   r-   r.   s   @r   r  r.  §  s   ø‡ € ÷	8ð 	8r   r  r   N)r   r   r   r   r   r  r   rh   r  r   r-   r.   s   @r   r(  r(  ¢  s.   ø‡ € Ø÷ó ðô8�K×0Ñ0÷ 8ò 8r   r(  c                   ó   € ] tR tRtRtR# )Ú"HashlessFilePasswordDBCheckerTestsi¬  r   Nr4   r   r   r   r2  r2  ¬  ó   † ó 	r   r2  c                   ó   € ] tR tRtRtR# )Ú'LocallyHashedFilePasswordDBCheckerTestsi²  r   Nr4   r   r   r   r5  r5  ²  r3  r   r5  c                   ó   € ] tR tRtRtR# )Ú'NetworkHashedFilePasswordDBCheckerTestsi¸  r   Nr4   r   r   r   r7  r7  ¸  r3  r   r7  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚUsernameHashedPasswordTestsi¾  zc
UsernameHashedPassword is a deprecated class that is functionally
equivalent to UsernamePassword.
c                ó6   € V P                  RR\        R4       R# )z2
Tests that UsernameHashedPassword is deprecated.
r¬   r­   z6Use twisted.cred.credentials.UsernamePassword instead.N)r®   r¯   r'   s   &r   Útest_deprecationÚ,UsernameHashedPasswordTests.test_deprecationÄ  s   € ð 	×)Ñ)Ø&Ø$ÜØDö		
r   r   N)r   r   r   r   r   r;  r   r-   r.   s   @r   r9  r9  ¾  s   ø‡ € ñ÷
	
ð 	
r   r9  ).r   Úbinasciir   r   Úzope.interfacer   r   Útwisted.credr   r   r   r	   Útwisted.internetr
   Útwisted.pythonr   Útwisted.python.versionsr   Útwisted.trialr   r   Ú_cryptÚImportErrorr¯   r   r   ÚAdapterr1   ÚregisterAdapterr\   r3   r6   ÚIRealmrA   ÚTestCaserO   r�   r·   ró   r  r"  r(  r2  r5  r7  r9  r   r   r   Ú<module>rJ     sÊ  ðñ÷
 (ç 1ç =Ó =Ý "Ý %Ý +Ý "ðÝ%ð €Eñ �i  Q¨Ó*€ô	�	ô 	÷ñ ñ$ ˆYÓô	ˆz×!Ñ!ó 	ó ð	ð × Ò ˜8 Z°Ô ;ô	˜+×7Ñ7ô 	ñ Ð  )Ó,÷)ð )ó -ð)ñ ˆV�]‰]Ó÷Eð Eó ðEô$Y>�×!Ñ!ô Y>ôx4˜(×+Ñ+ô 4ônD,¨×(9Ñ(9ô D,÷N!Eñ !E÷H5ñ 5ôpÐ'Bô ô8Ð'Bô 8ô	Ø °×0AÑ0Aô	ô	Ø$ m°X×5FÑ5Fô	ô	Ø$ m°X×5FÑ5Fô	ô
 (×"3Ñ"3ö 
øðS ô ØƒEðús   ¸F# Æ#	F0Æ/F0