ó
    Ö›‘hò7  ã                   ób  • S r SSKJrJr  SSK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  SSKJr   SS	KJr  \r\" SSSS5      r " S S\5      r " S S5      r\" \5       " S S\R4                  5      5       r\R8                  " \\\5         " S S\	R:                  5      r\" \\5       " S S5      5       r\" \R@                  5       " S S5      5       r! " S S\RD                  5      r# " S S\RD                  5      r$ " S S\RD                  5      r% " S  S!5      r& " S" S#5      r' " S$ S%\'5      r( " S& S'\'5      r) " S( S)\'\&\RD                  5      r* " S* S+\(\&\RD                  5      r+ " S, S-\)\&\RD                  5      r, " S. S/\RD                  5      r-g
! \ a    S
r GNmf = f)0z6
Tests for L{twisted.cred}, now with 30% more starch.
é    )ÚhexlifyÚ	unhexlify)Ú	InterfaceÚimplementer)ÚcheckersÚcredentialsÚerrorÚportal)Údefer)Ú
components)ÚVersion)Úunittest)ÚcryptNÚTwistedé   é   c                   ó   • \ rS rSrSrSrg)Ú	ITestableé   z*
An interface for a theoretical protocol.
© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú_C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/cred/test/test_cred.pyr   r      s   † ñò 	r   r   c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú
TestAvataré'   z
A test avatar.
c                 ó,   • Xl         SU l        SU l        g )NF)ÚnameÚloggedInÚ	loggedOut)Úselfr$   s     r   Ú__init__ÚTestAvatar.__init__,   s   € ØŒ	ØˆŒØˆ�r   c                 ó8   • U R                   (       a   eSU l         g ©NT)r%   ©r'   s    r   ÚloginÚTestAvatar.login1   s   € Ø—=—=Ð Ð Øˆ�r   c                 ó   • SU l         g r+   )r&   r,   s    r   ÚlogoutÚTestAvatar.logout5   s	   € Øˆ�r   )r%   r&   r$   N)	r   r   r   r   r   r(   r-   r0   r   r   r   r   r!   r!   '   s   † ñòò
õr   r!   c                   ó   • \ rS rSrSrSrg)ÚTestableé9   z%
A theoretical protocol for testing.
r   Nr   r   r   r   r3   r3   9   s   † ñò 	r   r3   c                   ó   • \ rS rSrSrg)ÚIDerivedCredentialséE   r   N©r   r   r   r   r   r   r   r   r6   r6   E   s   † Úr   r6   c                   ó    • \ rS rSrS rS rSrg)ÚDerivedCredentialséI   c                 ó   • Xl         X l        g ©N)ÚusernameÚpassword)r'   r>   r?   s      r   r(   ÚDerivedCredentials.__init__K   s   € Ø ŒØ �r   c                 ó   • XR                   :H  $ r=   )r?   ©r'   r?   s     r   ÚcheckPasswordÚ DerivedCredentials.checkPasswordO   s   € ØŸ=™=Ñ(Ð(r   )r?   r>   N)r   r   r   r   r(   rC   r   r   r   r   r:   r:   I   s   † ò!õ)r   r:   c                   ó$   • \ rS rSrSrS rS rSrg)Ú	TestRealméS   z
A basic test realm.
c                 ó   • 0 U l         g r=   ©Úavatarsr,   s    r   r(   ÚTestRealm.__init__Y   s	   € Øˆ�r   c                 óÈ   • XR                   ;   a  U R                   U   nO[        U5      nX@R                   U'   UR                  5         US   US   " U5      UR                  4$ )Nr   )rJ   r!   r-   r0   )r'   ÚavatarIdÚmindÚ
interfacesÚavatars        r   ÚrequestAvatarÚTestRealm.requestAvatar\   sW   € Ø—|‘|Ó#Ø—\‘\ (Ñ+‰Fä Ó)ˆFØ%+�L‰L˜Ñ"Ø�‰ŒØ˜1‘˜z¨!š}¨VÓ4°f·m±mÐDÐDr   rI   N)r   r   r   r   r   r(   rQ   r   r   r   r   rF   rF   S   s   † ñòõEr   rF   c                   ó<   • \ rS rSrSrS rS rS rS rS r	S r
S	rg
)Ú	CredTestséf   zR
Tests for the meat of L{twisted.cred} -- realms, portals, avatars, and
checkers.
c                 ó"  • [        5       U l        [        R                  " U R                  5      U l        [        R
                  " 5       U l        U R                  R                  SS5        U R                  R                  U R                  5        g )Nó   bobó   hello)	rF   Ú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                 óÀ   • [         R                  [         R                  /nU R                  R	                  5       nU R                  [        U5      [        U5      5        g)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                 ó  • U R                  U R                  R                  [        R                  " SS5      U [
        5      5      nUu  p#nU R                  U[
        5        U R                  UR                  U5      U SU 35        U R                  UR                  R                  5        U R                  UR                  R                  (       + 5        U" 5         U R                  UR                  R                  5        g)zp
Calling C{login} on a portal with correct credentials and an interface
that the portal's realm supports works.
rW   rX   ú does not implement N)ÚsuccessResultOfr
   r-   r   ÚUsernamePasswordr   re   Ú
assertTrueÚ
providedByÚoriginalr%   r&   ©r'   r-   ÚifaceÚimplr0   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                 óð  • U R                  U R                  R                  [        SS5      U [        5      5      nUu  p#nU R                  U[        5        U R                  UR                  U5      U SU 35        U R                  UR                  R                  5        U R                  UR                  R                  (       + 5        U" 5         U R                  UR                  R                  5        g)zf
Logging in with correct derived credentials and an interface
that the portal's realm supports works.
rW   rX   rl   N)rm   r
   r-   r:   r   re   ro   rp   rq   r%   r&   rr   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                 ó  • U R                  U R                  R                  [        R                  " SS5      U [
        5      5      nU R                  U5        U R                  [        R                  UR                  5        g)z}
Calling C{login} with incorrect credentials (in this case a wrong
password) causes L{error.UnauthorizedLogin} to be raised.
rW   s   h3lloN©ÚfailureResultOfr
   r-   r   rn   r   ro   re   r	   ÚUnauthorizedLoginÚtype©r'   r-   s     r   Útest_failedLoginPasswordÚ"CredTests.test_failedLoginPassword§   ób   € ð
 ×$Ñ$Ø�K‰K×ÑÜ×,Ò,¨V°XÓ>ÀÄióó
ˆð
 	�‰˜ÔØ×Ñœ×0Ñ0°%·*±*Õ=r   c                 ó  • U R                  U R                  R                  [        R                  " SS5      U [
        5      5      nU R                  U5        U R                  [        R                  UR                  5        g)zz
Calling C{login} with incorrect credentials (in this case no known
user) causes L{error.UnauthorizedLogin} to be raised.
s   jayrX   Nr{   r   s     r   Útest_failedLoginNameÚCredTests.test_failedLoginName´   r‚   r   )r\   r
   rY   N)r   r   r   r   r   r_   ri   ru   rx   r€   r„   r   r   r   r   rT   rT   f   s%   † ñò
2ò8ò1ò,1ò(>õ>r   rT   c                   ó@   • \ rS rSr/ SQrS rS rS rS rS r	S r
S	rg
)ÚOnDiskDatabaseTestséÂ   ©)ó   user1s   pass1)ó   user2s   pass2)ó   user3s   pass3c                 óì   • U R                  5       U l        [        U R                  S5       nU R                   H  u  p#UR	                  US-   U-   S-   5        M!     S S S 5        g ! , (       d  f       g = f)NÚwbó   :ó   
)ÚmktempÚdbfileÚopenÚusersÚwrite)r'   ÚfÚuÚps       r   r_   ÚOnDiskDatabaseTests.setUpÉ   sT   € Ø—k‘k“mˆŒÜ�$—+‘+˜tÔ$¨ØŸ
œ
‘�Ø—‘˜˜D™ 1™ uÑ,Ö-ñ #÷ %×$Ö$ús   ¬0A%Á%
A3c                 ó¤   • [         R                  " S5      U l        U R                  [        R
                  U R                  R                  S5        g)zO
A missing db file will cause a permanent rejection of authorization
attempts.
ztest_thisbetternoteverexist.dbÚuserN)r   ÚFilePasswordDBÚdbÚassertRaisesr	   r}   ÚgetUserr,   s    r   Útest_getUserNonexistentDatabaseÚ3OnDiskDatabaseTests.test_getUserNonexistentDatabaseÏ   s7   € ô
 ×)Ò)Ð*JÓKˆŒà×Ñœ%×1Ñ1°4·7±7·?±?ÀFÕKr   c                 óB  • [         R                  " U R                  5      U l        U R                   Hj  u  pU R                  [        U R                  R                  UR                  5       5        U R                  U R                  R                  U5      X45        Ml     g r=   )
r   rœ   r’   r�   r”   rž   ÚKeyErrorrŸ   Úupperre   ©r'   r—   r˜   s      r   ÚtestUserLookupÚ"OnDiskDatabaseTests.testUserLookupØ   sg   € Ü×)Ò)¨$¯+©+Ó6ˆŒØ—J”J‰DˆAØ×Ñœh¨¯©¯©¸¿¹»ÔCØ×Ñ˜TŸW™WŸ_™_¨QÓ/°!°Ö8ò r   c                 óê   • [         R                  " U R                  SS9U l        U R                   H?  u  pU R                  U R                  R                  UR                  5       5      X45        MA     g )NF)ÚcaseSensitive)r   rœ   r’   r�   r”   re   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           	      óð  • [         R                  " U R                  5      U l        U R                   VVs/ s H  u  p[
        R                  " X5      PM     nnn[        R                  " U Vs/ s H.  n[        R                  " U R                  R                  U5      PM0     sn5      nUR                  U R                  U R                   VVs/ s H  u  pUPM	     snn5        U$ s  snnf s  snf s  snnf r=   )r   rœ   r’   r�   r”   r   rn   r   ÚgatherResultsÚmaybeDeferredÚrequestAvatarIdÚaddCallbackre   )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'Á.5C-ÃC2c           	      ó  • [         R                  " U R                  5      U l        U R	                  SS[
        5      nU R                   VVs/ s H  u  p#U" X#5      PM     nnn[        R                  " U Vs/ s H.  n[        R                  " U R                  R                  U5      PM0     sn5      nUR                  U R                  U R                   VVs/ s H  u  p#UPM	     snn5        U$ s  snnf s  snf s  snnf )Nútwisted.cred.credentialsÚUsernameHashedPassword)r   rœ   r’   r�   ÚgetDeprecatedModuleAttributeÚ_uhpVersionr”   r   r­   r®   r¯   r°   re   )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   ÁC0Á75C6ÃC;)r�   r’   N)r   r   r   r   r”   r_   r    r¦   rª   r´   r»   r   r   r   r   r‡   r‡   Â   s)   † ò€Eò.òLò9òAò
õ
r   r‡   c                   ój   • \ rS rSr/ SQrS rS\S\S\S\4S jrS	 rS
 r	S r
S rS r\c  SrSrgSrg)Ú!HashedPasswordOnDiskDatabaseTestséù   r‰   c                 óÎ  • U R                  5       n[        R                  " XR                  S9U l        [        US5       nU R                   H2  u  p4UR                  US-   U R                  X4US S 5      -   S-   5        M4     S S S 5        [        5       n[        R                  " U5      U l        U R                  R                  U R                  5        g ! , (       d  f       NY= f)N)ÚhashrŽ   r�   r   r�   )r‘   r   rœ   rÁ   r�   r“   r”   r•   rF   r
   rZ   Úportr^   )r'   r’   r–   r—   r˜   Úrs         r   r_   Ú'HashedPasswordOnDiskDatabaseTests.setUp   s§   € Ø—‘“ˆÜ×)Ò)¨&·y±yÑAˆŒÜ�&˜$Ô 1ØŸ
œ
‘�Ø—‘˜˜D™ 4§9¡9¨Q°1°R°a°5Ó#9Ñ9¸EÑAÖBñ #÷  ô ‹KˆÜ—M’M !Ó$ˆŒ	Ø�	‰	×!Ñ! $§'¡'Õ*÷  Õús   Á ACÃ
C$r—   r˜   ÚsÚreturnc                 óx   • [        UR                  S5      UR                  S5      5      nUR                  S5      $ )NÚ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           	      ó„  • U R                    VVs/ s H  u  p[        R                  " X5      PM     nnn[        R                  " U Vs/ s H  o@R
                  R                  U5      PM     sn5      nUR                  U R                  U R                    VVs/ s H  u  pUPM	     snn5        U$ s  snnf s  snf s  snnf r=   )	r”   r   rn   r   r­   r�   r¯   r°   re   ©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   �"B1Á	$B7ÂB<c           
      ó´  • U R                    VVs/ s H  u  p[        R                  " X5      PM     nnn[        R                  " U Vs/ s H#  o@R
                  R                  US [        5      PM%     sn5      nUR                  S 5        UR                  U R                  U R                    VVs/ s H  u  pUPM	     snn5        U$ s  snnf s  snf s  snnf )Nc                 ój   • U  VVVs/ s H  u  po2R                   R                  PM     snnn$ s  snnnf r=   )rq   r$   )ÚxÚiÚaÚls       r   Ú<lambda>ÚMHashedPasswordOnDiskDatabaseTests.testGoodCredentials_login.<locals>.<lambda>  s    € ÁÕ BÂ±W°Q¸1§¡§¤ÁÔ BùÔ Bs   ‡".)
r”   r   rn   r   r­   rÂ   r-   r   r°   re   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Â1Cc           
      ób  • U R                    VVs/ s H  u  p[        R                  " US5      PM     nnn[        R                  " U Vs/ s H#  o@R
                  R                  US [        5      PM%     snSS9nUR                  U R                  [        R                  5        U$ s  snnf s  snf )Ns   wrong passwordT©ÚconsumeErrors)r”   r   rn   r   ÚDeferredListrÂ   r-   r   r°   Ú_assertFailuresr	   r}   )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                 ó˜  • U R                  SS[        5      nU R                   VVs/ s H   u  p#U" X R                  S X2S S 5      5      PM"     nnn[        R
                  " U Vs/ s H#  oPR                  R                  US [        5      PM%     snSS9nUR                  U R                  [        R                  5        U$ s  snnf s  snf )Nr·   r¸   r   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¸A¸Ó&?Ö@ÉZð 	ñ 
ô ×ÒÙ:EÓFº+°Q�Y‰Y�_‰_˜Q ¤iÖ0¹+ÑFØñ
ˆð 	
�‰�d×*Ñ*¬E×,FÑ,FÔGØˆùó
ùò Gs   §'CÁ%*Cc                 óx   • U H4  u  p4U R                  U[        R                  5        UR                  " U6   M6     g r=   )re   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_   ÚbytesrÁ   rÐ   rÚ   râ   rç   rà   r   Úskipr   r   r   r   r¾   r¾   ù   sY   † ò€Eò	+ð/�eð / ð /¨%ð /°Eô /òòòòòð �}Ø+‹ò r   r¾   c                   ó`   • \ rS rSrSr\R                  S 5       r\R                  S 5       rSr	g)Ú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              #   ó´   #   • U R                  5        H@  nU R                  5        H)  u  p#UR                  U5      v •nU R                  XC5        M+     MB     g7f)z\
The given credentials are accepted by all the checkers, and give
the expected C{avatarID}s
N)ÚgetCheckersÚgetGoodCredentialsr¯   re   )r'   ÚchkÚcredrM   rÃ   s        r   Útest_positiveÚCheckersMixin.test_positiveN  sP   é € ð ×#Ñ#Ö%ˆCØ"&×"9Ñ"9Ö";‘�Ø×-Ñ-¨dÓ3Ñ3�Ø× Ñ  Ö-ó #<ò &ùs   ‚AAc              #   óÎ   #   • U R                  5        HM  nU R                  5        H6  nUR                  U5      nU R                  U[        R
                  5      v •  M8     MO     g7f)z9
The given credentials are rejected by all the checkers.
N)rö   ÚgetBadCredentialsr¯   ÚassertFailurer	   r}   )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   r   rô   rô   @  s=   † ñð ×Ññ.ó ð.ð ×ÑñEó óEr   rô   c                   óf   • \ rS rSr\R
                  rSr\S\	S\	4S j5       r
/ SQrS rS rS	 rS
rg)ÚHashlessFilePasswordDBMixinid  NrÔ   rÆ   c                 ó   • U $ r=   r   ©rÔ   s    r   ÚnetworkHashÚ'HashlessFilePasswordDBMixin.networkHashh  s   € àˆr   ))rŠ   ó	   password1)r‹   s	   password2)rŒ   ó	   password3c              #   ó~   #   • U R                    H)  u  pU R                  XR                  U5      5      U4v •  M+     g 7fr=   )Ú_validCredentialsÚ	credClassr  r¥   s      r   r÷   Ú.HashlessFilePasswordDBMixin.getGoodCredentialsr  s6   é € Ø×*Ô*‰DˆAØ—.‘. ×$4Ñ$4°QÓ$7Ó8¸!Ð;Ô;ò +ùs   ‚;=c              #   óf   #   • S H'  u  pU R                  XR                  U5      5      v •  M)     g 7f)N))rŠ   r	  )r‹   r  )s   bloofs   blarf)r  r  r¥   s      r   rý   Ú-HashlessFilePasswordDBMixin.getBadCredentialsv  s/   é € ó
‰DˆAð
 —.‘. ×$4Ñ$4°QÓ$7Ó8Ô8ò
ùs   ‚/1c              #   óÀ  ^ #   • T R                   =(       d    S nT R                   =(       a    U 4S jnS GHo  nT R                  5       n[        US5       nT R                   H%  u  pgUR	                  US-   U" U5      -   S-   5        M'     S S S 5        [
        R                  " XCUS9v •  T R                  5       n[        US5       nT R                   H%  u  pgUR	                  U" U5      S-   U-   S-   5        M'     S S S 5        [
        R                  " US	S
SX2S9v •  T R                  5       n[        US5       nT R                   H6  u  pgUR	                  SUR                  5       -   S-   U" U5      -   S-   5        M8     S S S 5        [
        R                  " USSSSX2S9v •  GMr     g ! , (       d  f       GN&= f! , (       d  f       NÆ= f! , (       d  f       NR= f7f)Nc                 ó   • U $ r=   r   r  s    r   rØ   Ú9HashlessFilePasswordDBMixin.getCheckers.<locals>.<lambda>  s   € ©qr   c                 ó&   >• TR                  U5      $ r=   )ÚdiskHash)r>   r?   Ústoredr'   s      €r   rØ   r  �  s   ø€ ¨t¯}©}¸XÔ/Fr   )TFrŽ   r�   r�   )ÚcacherÁ   s    dingle dongle ó    é   r   s   zip,zap,s   ,zup,ó   ,r   é   F)r  r‘   r“   r  r•   r   rœ   Útitle)r'   r  Ú	hashCheckr  ÚfnÚfObjr—   r˜   s   `       r   rö   Ú'HashlessFilePasswordDBMixin.getCheckers~  s�  øé € Ø—=‘=×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ñõ ò' !ç–ú÷  •ú÷  •üsO   ƒAGÁ6F*Â;GÃ6F<Ã<>GÄ:AGÆ)GÆ*
F9	Æ4GÆ<
G
	ÇGÇ
G	ÇGr   )r   r   r   r   r   rn   r  r  Ústaticmethodrñ   r  r  r÷   rý   rö   r   r   r   r   r  r  d  sI   † Ø×,Ñ,€IØ€Hàð�uð  ó ó ðòÐò<ò9õr   r  c                   ó$   • \ rS rSr\S 5       rSrg)Ú LocallyHashedFilePasswordDBMixiniœ  c                 ó   • [        U 5      $ r=   ©r   r  s    r   r  Ú)LocallyHashedFilePasswordDBMixin.diskHash�  ó   € ä�q‹zÐr   r   N)r   r   r   r   r   r  r   r   r   r   r"  r"  œ  s   † Øñó ór   r"  c                   óZ   • \ rS rSr\S\S\4S j5       r " S S\R                  5      r	Sr
g)	Ú NetworkHashedFilePasswordDBMixini¢  rÔ   rÆ   c                 ó   • [        U 5      $ r=   r$  r  s    r   r  Ú,NetworkHashedFilePasswordDBMixin.networkHash£  r&  r   c                   ó   • \ rS rSrS rSrg)Ú*NetworkHashedFilePasswordDBMixin.credClassi§  c                 ó2   • [        U R                  5      U:H  $ r=   )r   r?   rB   s     r   rC   Ú8NetworkHashedFilePasswordDBMixin.credClass.checkPassword¨  s   € Ü˜TŸ]™]Ó+¨xÑ7Ð7r   r   N)r   r   r   r   rC   r   r   r   r   r  r,  §  s   † õ	8r   r  r   N)r   r   r   r   r   rñ   r  r   rn   r  r   r   r   r   r(  r(  ¢  s4   † Øð�uð  ó ó ðô8�K×0Ñ0÷ 8r   r(  c                   ó   • \ rS rSrSrg)Ú"HashlessFilePasswordDBCheckerTestsi¬  r   Nr8   r   r   r   r0  r0  ¬  ó   † ò 	r   r0  c                   ó   • \ rS rSrSrg)Ú'LocallyHashedFilePasswordDBCheckerTestsi²  r   Nr8   r   r   r   r3  r3  ²  r1  r   r3  c                   ó   • \ rS rSrSrg)Ú'NetworkHashedFilePasswordDBCheckerTestsi¸  r   Nr8   r   r   r   r5  r5  ¸  r1  r   r5  c                   ó   • \ rS rSrSrS rSrg)ÚUsernameHashedPasswordTestsi¾  zc
UsernameHashedPassword is a deprecated class that is functionally
equivalent to UsernamePassword.
c                 ó4   • U R                  SS[        S5        g)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   r9  r   r   r   r   r7  r7  ¾  s   † ñõ
	
r   r7  ).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!   ÚAdapterr3   ÚregisterAdapterrb   r6   r:   ÚIRealmrF   ÚTestCaserT   r‡   r¾   rô   r  r"  r(  r0  r3  r5  r7  r   r   r   Ú<module>rH     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" Æ"F.Æ-F.