§
    Ètºfò7  ã                   óŠ  — d Z ddlmZmZ ddlmZmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlmZ 	 dd	lmZ eZn# e$ r d
ZY nw xY w edddd¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z ee¦  «         G d„ dej        ¦  «        ¦   «         Z ej        eee¦  «          G d„ de	j        ¦  «        Z eee¦  «         G d„ d¦  «        ¦   «         Z eej         ¦  «         G d„ d¦  «        ¦   «         Z! G d„ dej"        ¦  «        Z# G d„ dej"        ¦  «        Z$ G d„ dej"        ¦  «        Z% G d „ d!¦  «        Z& G d"„ d#¦  «        Z' G d$„ d%e'¦  «        Z( G d&„ d'e'¦  «        Z) G d(„ d)e'e&ej"        ¦  «        Z* G d*„ d+e(e&ej"        ¦  «        Z+ G d,„ d-e)e&ej"        ¦  «        Z, G d.„ d/ej"        ¦  «        Z-d
S )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                   ó   — e Zd ZdZdS )Ú	ITestablez2
    An interface for a theoretical protocol.
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úZ/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/cred/test/test_cred.pyr   r      s   € € € € € ðð ð 	€Dr   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú
TestAvatarz
    A test avatar.
    c                 ó0   — || _         d| _        d| _        d S )NF)ÚnameÚloggedInÚ	loggedOut)Úselfr    s     r   Ú__init__zTestAvatar.__init__,   s   € ØˆŒ	ØˆŒØˆŒˆˆr   c                 ó&   — | j         rJ ‚d| _         d S ©NT)r!   ©r#   s    r   ÚloginzTestAvatar.login1   s   € Ø”=Ð Ð Ð ØˆŒˆˆr   c                 ó   — d| _         d S r&   )r"   r'   s    r   ÚlogoutzTestAvatar.logout5   s   € ØˆŒˆˆr   N)r   r   r   r   r$   r(   r*   r   r   r   r   r   '   sK   € € € € € ðð ðð ð ð
ð ð ðð ð ð ð r   r   c                   ó   — e Zd ZdZdS )ÚTestablez-
    A theoretical protocol for testing.
    Nr   r   r   r   r,   r,   9   s   € € € € € ðð ð 	€Dr   r,   c                   ó   — e Zd ZdS )ÚIDerivedCredentialsN©r   r   r   r   r   r   r.   r.   E   s   € € € € € Ø€Dr   r.   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚDerivedCredentialsc                 ó"   — || _         || _        d S ©N)ÚusernameÚpassword)r#   r4   r5   s      r   r$   zDerivedCredentials.__init__K   s   € Ø ˆŒØ ˆŒˆˆr   c                 ó   — || j         k    S r3   )r5   ©r#   r5   s     r   ÚcheckPasswordz DerivedCredentials.checkPasswordO   s   € Ø˜4œ=Ò(Ð(r   N)r   r   r   r$   r8   r   r   r   r1   r1   I   s2   € € € € € ð!ð !ð !ð)ð )ð )ð )ð )r   r1   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú	TestRealmz
    A basic test realm.
    c                 ó   — i | _         d S r3   )Úavatarsr'   s    r   r$   zTestRealm.__init__Y   s   € ØˆŒˆˆr   c                 óÈ   — || j         v r| j         |         }nt          |¦  «        }|| j         |<   |                     ¦   «          |d          |d         |¦  «        |j        fS )Nr   )r<   r   r(   r*   )r#   ÚavatarIdÚmindÚ
interfacesÚavatars        r   ÚrequestAvatarzTestRealm.requestAvatar\   sd   € Ø�t”|Ð#Ð#Ø”\ (Ô+ˆFˆFå Ñ)Ô)ˆFØ%+ˆDŒL˜Ñ"Ø�Š‰ŒˆØ˜1”˜}˜z¨!œ}¨VÑ4Ô4°f´mÐDÐDr   N)r   r   r   r   r$   rB   r   r   r   r:   r:   S   sA   € € € € € ðð ðð ð ðEð Eð Eð Eð Er   r:   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	Ú	CredTestsz^
    Tests for the meat of L{twisted.cred} -- realms, portals, avatars, and
    checkers.
    c                 ó  — t          ¦   «         | _        t          j        | j        ¦  «        | _        t	          j        ¦   «         | _        | j                             dd¦  «         | j                             | j        ¦  «         d S )Nó   bobó   hello)	r:   Úrealmr
   ÚPortalr   Ú'InMemoryUsernamePasswordDatabaseDontUseÚcheckerÚaddUserÚregisterCheckerr'   s    r   ÚsetUpzCredTests.setUpl   sf   € Ý‘[”[ˆŒ
Ý”m D¤JÑ/Ô/ˆŒÝÔGÑIÔIˆŒØŒ×Ò˜V XÑ.Ô.Ð.ØŒ×#Ò# D¤LÑ1Ô1Ð1Ð1Ð1r   c                 óÈ   — t           j        t           j        g}| j                             ¦   «         }|                      t          |¦  «        t          |¦  «        ¦  «         dS )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_listCheckerszCredTests.test_listCheckerss   sQ   € õ  Ô1µ;Ô3VÐWˆØŒk×3Ò3Ñ5Ô5ˆØ×Ò� ™œ¥f¨XÑ&6Ô&6Ñ7Ô7Ð7Ð7Ð7r   c                 ó  — |                       | j                             t          j        dd¦  «        | t
          ¦  «        ¦  «        }|\  }}}|                      |t
          ¦  «         |                      |                     |¦  «        |› d|› �¦  «         |                      |j	        j
        ¦  «         |                      |j	        j         ¦  «          |¦   «          |                      |j	        j        ¦  «         dS )zˆ
        Calling C{login} on a portal with correct credentials and an interface
        that the portal's realm supports works.
        rF   rG   ú does not implement N)ÚsuccessResultOfr
   r(   r   ÚUsernamePasswordr   rS   Ú
assertTrueÚ
providedByÚoriginalr!   r"   ©r#   r(   ÚifaceÚimplr*   s        r   Útest_basicLoginzCredTests.test_basicLogin}   só   € ð
 ×$Ò$ØŒK×ÒÝÔ,¨V°XÑ>Ô>ÀÅiñô ñ
ô 
ˆð
 $Ñˆˆt�Vð 	×Ò˜¥	Ñ*Ô*Ð*Ø�Š˜×(Ò(¨Ñ.Ô.°4Ð0TÐ0TÈUÐ0TÐ0TÑUÔUÐUð 	�Š˜œÔ.Ñ/Ô/Ð/Ø�Š˜DœMÔ3Ð3Ñ4Ô4Ð4Øˆ‰ŒˆØ�Š˜œÔ/Ñ0Ô0Ð0Ð0Ð0r   c                 óø  — |                       | j                             t          dd¦  «        | t          ¦  «        ¦  «        }|\  }}}|                      |t          ¦  «         |                      |                     |¦  «        |› d|› �¦  «         |                      |j        j	        ¦  «         |                      |j        j
         ¦  «          |¦   «          |                      |j        j
        ¦  «         dS )z~
        Logging in with correct derived credentials and an interface
        that the portal's realm supports works.
        rF   rG   rY   N)rZ   r
   r(   r1   r   rS   r\   r]   r^   r!   r"   r_   s        r   Útest_derivedInterfacezCredTests.test_derivedInterface“   sì   € ð
 ×$Ò$ØŒK×ÒÕ0°¸ÑBÔBÀDÍ)ÑTÔTñ
ô 
ˆð $Ñˆˆt�Vð 	×Ò˜¥	Ñ*Ô*Ð*Ø�Š˜×(Ò(¨Ñ.Ô.°4Ð0TÐ0TÈUÐ0TÐ0TÑUÔUÐUð 	�Š˜œÔ.Ñ/Ô/Ð/Ø�Š˜DœMÔ3Ð3Ñ4Ô4Ð4Øˆ‰ŒˆØ�Š˜œÔ/Ñ0Ô0Ð0Ð0Ð0r   c                 ó  — |                       | j                             t          j        dd¦  «        | t
          ¦  «        ¦  «        }|                      |¦  «         |                      t          j	        |j
        ¦  «         dS )z•
        Calling C{login} with incorrect credentials (in this case a wrong
        password) causes L{error.UnauthorizedLogin} to be raised.
        rF   s   h3lloN©ÚfailureResultOfr
   r(   r   r[   r   r\   rS   r	   ÚUnauthorizedLoginÚtype©r#   r(   s     r   Útest_failedLoginPasswordz"CredTests.test_failedLoginPassword§   ów   € ð
 ×$Ò$ØŒK×ÒÝÔ,¨V°XÑ>Ô>ÀÅiñô ñ
ô 
ˆð
 	�Š˜ÑÔÐØ×Ò�Ô0°%´*Ñ=Ô=Ð=Ð=Ð=r   c                 ó  — |                       | j                             t          j        dd¦  «        | t
          ¦  «        ¦  «        }|                      |¦  «         |                      t          j	        |j
        ¦  «         dS )z’
        Calling C{login} with incorrect credentials (in this case no known
        user) causes L{error.UnauthorizedLogin} to be raised.
        s   jayrG   Nrf   rj   s     r   Útest_failedLoginNamezCredTests.test_failedLoginName´   rl   r   N)
r   r   r   r   rN   rW   rb   rd   rk   rn   r   r   r   rD   rD   f   sx   € € € € € ðð ð
2ð 2ð 2ð8ð 8ð 8ð1ð 1ð 1ð,1ð 1ð 1ð(>ð >ð >ð>ð >ð >ð >ð >r   rD   c                   ó:   — e Zd Zg d¢Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚOnDiskDatabaseTests©)ó   user1s   pass1)ó   user2s   pass2)ó   user3s   pass3c                 óì   — |                       ¦   «         | _        t          | j        d¦  «        5 }| j        D ]#\  }}|                     |dz   |z   dz   ¦  «         Œ$	 d d d ¦  «         d S # 1 swxY w Y   d S )NÚwbó   :ó   
)ÚmktempÚdbfileÚopenÚusersÚwrite)r#   ÚfÚuÚps       r   rN   zOnDiskDatabaseTests.setUpÉ   sÀ   € Ø—k’k‘m”mˆŒÝ�$”+˜tÑ$Ô$ð 	.¨Øœ
ð .ð .‘��1Ø—’˜˜D™ 1™ uÑ,Ñ-Ô-Ð-Ð-ð.ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð 	.ð 	.s   ¯,A)Á)A-Á0A-c                 óŽ   — t          j        d¦  «        | _        |                      t          j        | j        j        d¦  «         dS )zg
        A missing db file will cause a permanent rejection of authorization
        attempts.
        ztest_thisbetternoteverexist.dbÚuserN)r   ÚFilePasswordDBÚdbÚassertRaisesr	   rh   ÚgetUserr'   s    r   Útest_getUserNonexistentDatabasez3OnDiskDatabaseTests.test_getUserNonexistentDatabaseÏ   s<   € õ
 Ô)Ð*JÑKÔKˆŒà×Ò�%Ô1°4´7´?ÀFÑKÔKÐKÐKÐKr   c                 ó,  — t          j        | j        ¦  «        | _        | j        D ]m\  }}|                      t          | j        j        |                     ¦   «         ¦  «         |  	                    | j                             |¦  «        ||f¦  «         Œnd S r3   )
r   rƒ   rz   r„   r|   r…   ÚKeyErrorr†   ÚupperrS   ©r#   r   r€   s      r   ÚtestUserLookupz"OnDiskDatabaseTests.testUserLookupØ   s„   € ÝÔ)¨$¬+Ñ6Ô6ˆŒØ”Jð 	9ð 	9‰DˆAˆqØ×Ò�h¨¬¬¸¿º¹¼ÑCÔCÐCØ×Ò˜TœWŸ_š_¨QÑ/Ô/°!°Q°Ñ8Ô8Ð8Ð8ð	9ð 	9r   c                 óä   — t          j        | j        d¬¦  «        | _        | j        D ]G\  }}|                      | j                             |                     ¦   «         ¦  «        ||f¦  «         ŒHd S )NF)ÚcaseSensitive)r   rƒ   rz   r„   r|   rS   r†   rŠ   r‹   s      r   ÚtestCaseInSensitivityz)OnDiskDatabaseTests.testCaseInSensitivityÞ   sq   € ÝÔ)¨$¬+ÀUÐKÑKÔKˆŒØ”Jð 	Að 	A‰DˆAˆqØ×Ò˜TœWŸ_š_¨Q¯WªW©Y¬YÑ7Ô7¸!¸Q¸Ñ@Ô@Ð@Ð@ð	Að 	Ar   c                 óú   ‡ — t          j        ‰ j        ¦  «        ‰ _        d„ ‰ j        D ¦   «         }t          j        ˆ fd„|D ¦   «         ¦  «        }|                     ‰ j        d„ ‰ j        D ¦   «         ¦  «         |S )Nc                 ó>   — g | ]\  }}t          j        ||¦  «        ‘ŒS r   ©r   r[   ©Ú.0r   r€   s      r   ú
<listcomp>z;OnDiskDatabaseTests.testRequestAvatarId.<locals>.<listcomp>å   s)   € ÐKÐKÐK¹¸¸1•Ô-¨a°Ñ3Ô3ÐKÐKÐKr   c                 óN   •— g | ]!}t          j        ‰j        j        |¦  «        ‘Œ"S r   ©r   ÚmaybeDeferredr„   ÚrequestAvatarId©r”   Úcr#   s     €r   r•   z;OnDiskDatabaseTests.testRequestAvatarId.<locals>.<listcomp>ç   ó+   ø€ ÐLÐLÐLÀ�UÔ  ¤Ô!8¸!Ñ<Ô<ÐLÐLÐLr   c                 ó   — g | ]\  }}|‘ŒS r   r   r“   s      r   r•   z;OnDiskDatabaseTests.testRequestAvatarId.<locals>.<listcomp>é   ó   € Ð(BÐ(BÐ(B©t¨q°!¨Ð(BÐ(BÐ(Br   )	r   rƒ   rz   r„   r|   r   ÚgatherResultsÚaddCallbackrS   )r#   ÚcredsÚds   `  r   ÚtestRequestAvatarIdz'OnDiskDatabaseTests.testRequestAvatarIdã   s„   ø€ ÝÔ)¨$¬+Ñ6Ô6ˆŒØKÐKÀÄ
ÐKÑKÔKˆÝÔØLÐLÐLÐLÀeÐLÑLÔLñ
ô 
ˆð 	
�Š�dÔ&Ð(BÐ(B°t´zÐ(BÑ(BÔ(BÑCÔCÐCØˆr   c                 ó8  ‡ ‡— t          j        ‰ j        ¦  «        ‰ _        ‰                      ddt
          ¦  «        Šˆfd„‰ j        D ¦   «         }t          j        ˆ fd„|D ¦   «         ¦  «        }| 	                    ‰ j
        d„ ‰ j        D ¦   «         ¦  «         |S )Nútwisted.cred.credentialsÚUsernameHashedPasswordc                 ó.   •— g | ]\  }} ‰||¦  «        ‘ŒS r   r   )r”   r   r€   r¦   s      €r   r•   zBOnDiskDatabaseTests.testRequestAvatarId_hashed.<locals>.<listcomp>ñ   s+   ø€ ÐEÐEÐE±$°!°QÐ'Ð'¨¨1Ñ-Ô-ÐEÐEÐEr   c                 óN   •— g | ]!}t          j        ‰j        j        |¦  «        ‘Œ"S r   r—   rš   s     €r   r•   zBOnDiskDatabaseTests.testRequestAvatarId_hashed.<locals>.<listcomp>ó   rœ   r   c                 ó   — g | ]\  }}|‘ŒS r   r   r“   s      r   r•   zBOnDiskDatabaseTests.testRequestAvatarId_hashed.<locals>.<listcomp>õ   rž   r   )r   rƒ   rz   r„   ÚgetDeprecatedModuleAttributeÚ_uhpVersionr|   r   rŸ   r    rS   )r#   r¡   r¢   r¦   s   `  @r   ÚtestRequestAvatarId_hashedz.OnDiskDatabaseTests.testRequestAvatarId_hashedì   s¬   øø€ ÝÔ)¨$¬+Ñ6Ô6ˆŒØ!%×!BÒ!BØ&Ð(@Å+ñ"
ô "
Ðð FÐEÐEÐE¸$¼*ÐEÑEÔEˆÝÔØLÐLÐLÐLÀeÐLÑLÔLñ
ô 
ˆð 	
�Š�dÔ&Ð(BÐ(B°t´zÐ(BÑ(BÔ(BÑCÔCÐCØˆr   N)
r   r   r   r|   rN   r‡   rŒ   r�   r£   r¬   r   r   r   rp   rp   Â   s…   € € € € € ðð ð €Eð.ð .ð .ðLð Lð Lð9ð 9ð 9ðAð Að Að
ð ð ð
ð 
ð 
ð 
ð 
r   rp   c                   ó^   — e Zd Zg d¢Zd„ Zdedededefd„Zd„ Zd	„ Zd
„ Z	d„ Z
d„ Ze€dZdS dS )Ú!HashedPasswordOnDiskDatabaseTestsrq   c                 óÜ  — |                       ¦   «         }t          j        || j        ¬¦  «        | _        t          |d¦  «        5 }| j        D ]@\  }}|                     |dz   |                      |||d d…         ¦  «        z   dz   ¦  «         ŒA	 d d d ¦  «         n# 1 swxY w Y   t          ¦   «         }t          j
        |¦  «        | _        | j                             | j        ¦  «         d S )N©Úhashrv   rw   r   rx   )ry   r   rƒ   r±   r„   r{   r|   r}   r:   r
   rI   ÚportrM   )r#   rz   r~   r   r€   Úrs         r   rN   z'HashedPasswordOnDiskDatabaseTests.setUp   s,  € Ø—’‘”ˆÝÔ)¨&°t´yÐAÑAÔAˆŒÝ�&˜$ÑÔð 	C 1Øœ
ð Cð C‘��1Ø—’˜˜D™ 4§9¢9¨Q°°1°R°a°R´5Ñ#9Ô#9Ñ9¸EÑAÑBÔBÐBÐBðCð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cõ ‰KŒKˆÝ”M !Ñ$Ô$ˆŒ	ØŒ	×!Ò! $¤'Ñ*Ô*Ð*Ð*Ð*s   ÁA	BÂBÂ"Br   r€   ÚsÚreturnc                 ó˜   — t          |                     d¦  «        |                     d¦  «        ¦  «        }|                     d¦  «        S )NÚascii)r   ÚdecodeÚencode)r#   r   r€   r´   Úhashed_passwords        r   r±   z&HashedPasswordOnDiskDatabaseTests.hash  s=   € Ý §¢¨Ñ 1Ô 1°1·8²8¸GÑ3DÔ3DÑEÔEˆØ×%Ò% gÑ.Ô.Ð.r   c                 ó¾   ‡ — d„ ‰ j         D ¦   «         }t          j        ˆ fd„|D ¦   «         ¦  «        }|                     ‰ j        d„ ‰ j         D ¦   «         ¦  «         |S )Nc                 ó>   — g | ]\  }}t          j        ||¦  «        ‘ŒS r   r’   r“   s      r   r•   zIHashedPasswordOnDiskDatabaseTests.testGoodCredentials.<locals>.<listcomp>  ó)   € ÐOÐOÐO¹D¸A¸q•[Ô1°!°QÑ7Ô7ÐOÐOÐOr   c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS r   )r„   r™   rš   s     €r   r•   zIHashedPasswordOnDiskDatabaseTests.testGoodCredentials.<locals>.<listcomp>  s)   ø€ Ð OÐ OÐ OÀ ¤×!8Ò!8¸Ñ!;Ô!;Ð OÐ OÐ Or   c                 ó   — g | ]\  }}|‘ŒS r   r   r“   s      r   r•   zIHashedPasswordOnDiskDatabaseTests.testGoodCredentials.<locals>.<listcomp>  rž   r   ©r|   r   rŸ   r    rS   ©r#   Ú	goodCredsr¢   s   `  r   ÚtestGoodCredentialsz5HashedPasswordOnDiskDatabaseTests.testGoodCredentials  sj   ø€ ØOÐOÀDÄJÐOÑOÔOˆ	ÝÔÐ OÐ OÐ OÐ OÀYÐ OÑ OÔ OÑPÔPˆØ	�Š�dÔ&Ð(BÐ(B°t´zÐ(BÑ(BÔ(BÑCÔCÐCØˆr   c                 óê   ‡ — d„ ‰ j         D ¦   «         }t          j        ˆ fd„|D ¦   «         ¦  «        }|                     d„ ¦  «         |                     ‰ j        d„ ‰ j         D ¦   «         ¦  «         |S )Nc                 ó>   — g | ]\  }}t          j        ||¦  «        ‘ŒS r   r’   r“   s      r   r•   zOHashedPasswordOnDiskDatabaseTests.testGoodCredentials_login.<locals>.<listcomp>  r½   r   c                 óR   •— g | ]#}‰j                              |d t          ¦  «        ‘Œ$S r3   ©r²   r(   r   rš   s     €r   r•   zOHashedPasswordOnDiskDatabaseTests.testGoodCredentials_login.<locals>.<listcomp>  s+   ø€ ÐDÐDÐD°QˆTŒY�_Š_˜Q ¥iÑ0Ô0ÐDÐDÐDr   c                 ó   — d„ | D ¦   «         S )Nc                 ó.   — g | ]\  }}}|j         j        ‘ŒS r   )r^   r    )r”   ÚiÚaÚls       r   r•   zaHashedPasswordOnDiskDatabaseTests.testGoodCredentials_login.<locals>.<lambda>.<locals>.<listcomp>  s"   € Ð BÐ BÐ B±W°Q¸¸1 ¤¤Ð BÐ BÐ Br   r   ©Úxs    r   ú<lambda>zMHashedPasswordOnDiskDatabaseTests.testGoodCredentials_login.<locals>.<lambda>  s   € Ð BÐ BÀÐ BÑ BÔ B€ r   c                 ó   — g | ]\  }}|‘ŒS r   r   r“   s      r   r•   zOHashedPasswordOnDiskDatabaseTests.testGoodCredentials_login.<locals>.<listcomp>  rž   r   rÀ   rÁ   s   `  r   ÚtestGoodCredentials_loginz;HashedPasswordOnDiskDatabaseTests.testGoodCredentials_login  s†   ø€ ØOÐOÀDÄJÐOÑOÔOˆ	ÝÔØDÐDÐDÐD¸)ÐDÑDÔDñ
ô 
ˆð 	
�ŠÐBÐBÑCÔCÐCØ	�Š�dÔ&Ð(BÐ(B°t´zÐ(BÑ(BÔ(BÑCÔCÐCØˆr   c                 ó¸   ‡ — d„ ‰ j         D ¦   «         }t          j        ˆ fd„|D ¦   «         d¬¦  «        }|                     ‰ j        t
          j        ¦  «         |S )Nc                 ó>   — g | ]\  }}t          j        |d ¦  «        ‘ŒS )s   wrong passwordr’   r“   s      r   r•   zHHashedPasswordOnDiskDatabaseTests.testBadCredentials.<locals>.<listcomp>  s7   € ð 
ð 
ð 
ÙCGÀ1Àa�KÔ(¨Ð,=Ñ>Ô>ð
ð 
ð 
r   c                 óR   •— g | ]#}‰j                              |d t          ¦  «        ‘Œ$S r3   rÇ   rš   s     €r   r•   zHHashedPasswordOnDiskDatabaseTests.testBadCredentials.<locals>.<listcomp>#  s+   ø€ ÐCÐCÐC°QˆTŒY�_Š_˜Q ¥iÑ0Ô0ÐCÐCÐCr   T©ÚconsumeErrors)r|   r   ÚDeferredListr    Ú_assertFailuresr	   rh   )r#   ÚbadCredsr¢   s   `  r   ÚtestBadCredentialsz4HashedPasswordOnDiskDatabaseTests.testBadCredentials  sw   ø€ ð
ð 
ØKOÌ:ð
ñ 
ô 
ˆõ ÔØCÐCÐCÐC¸(ÐCÑCÔCÐSWð
ñ 
ô 
ˆð 	
�Š�dÔ*­EÔ,CÑDÔDÐDØˆr   c                 óø   ‡ ‡— ‰                       ddt          ¦  «        Šˆˆ fd„‰ j        D ¦   «         }t          j        ˆ fd„|D ¦   «         d¬¦  «        }|                     ‰ j        t          j        ¦  «         |S )Nr¥   r¦   c                 óh   •— g | ].\  }} ‰|‰                      d ||d d…         ¦  «        ¦  «        ‘Œ/S )Nr   r°   )r”   r   r€   r¦   r#   s      €€r   r•   zKHashedPasswordOnDiskDatabaseTests.testHashedCredentials.<locals>.<listcomp>,  sP   ø€ ð 
ð 
ð 
ÙEIÀQÈÐ"Ð" 1 d§i¢i°°a¸¸2¸A¸2¼Ñ&?Ô&?Ñ@Ô@ð
ð 
ð 
r   c                 óR   •— g | ]#}‰j                              |d t          ¦  «        ‘Œ$S r3   rÇ   rš   s     €r   r•   zKHashedPasswordOnDiskDatabaseTests.testHashedCredentials.<locals>.<listcomp>0  s+   ø€ ÐFÐFÐF°QˆTŒY�_Š_˜Q ¥iÑ0Ô0ÐFÐFÐFr   TrÕ   )	rª   r«   r|   r   r×   r    rØ   r	   ÚUnhandledCredentials)r#   ÚhashedCredsr¢   r¦   s   `  @r   ÚtestHashedCredentialsz7HashedPasswordOnDiskDatabaseTests.testHashedCredentials(  s¥   øø€ Ø!%×!BÒ!BØ&Ð(@Å+ñ"
ô "
Ðð
ð 
ð 
ð 
ð 
ØMQÌZð
ñ 
ô 
ˆõ ÔØFÐFÐFÐF¸+ÐFÑFÔFØð
ñ 
ô 
ˆð 	
�Š�dÔ*­EÔ,FÑGÔGÐGØˆr   c                 ój   — |D ]/\  }}|                       |t          j        ¦  «          |j        |Ž  Œ0d S r3   )rS   r   ÚFAILUREÚtrap)r#   ÚfailuresÚexpectedFailuresÚflagÚfailures        r   rØ   z1HashedPasswordOnDiskDatabaseTests._assertFailures6  sE   € Ø%ð 	,ð 	,‰MˆD�'Ø×Ò˜T¥5¤=Ñ1Ô1Ð1ØˆGŒLÐ*Ð+Ð+Ð+Øˆtr   Nzcrypt module not available)r   r   r   r|   rN   Úbytesr±   rÃ   rÑ   rÚ   rà   rØ   r   Úskipr   r   r   r®   r®   ù   s¼   € € € € € ðð ð €Eð	+ð 	+ð 	+ð/�eð / ð /¨%ð /°Eð /ð /ð /ð /ðð ð ðð ð ðð ð ðð ð ðð ð ð €}Ø+ˆˆˆð €}r   r®   c                   óR   — e Zd ZdZej        d„ ¦   «         Zej        d„ ¦   «         ZdS )ÚCheckersMixinaË  
    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              #   óÆ   K  — |                       ¦   «         D ]I}|                      ¦   «         D ]2\  }}|                     |¦  «        V —}|                      ||¦  «         Œ3ŒJdS )zt
        The given credentials are accepted by all the checkers, and give
        the expected C{avatarID}s
        N)ÚgetCheckersÚgetGoodCredentialsr™   rS   )r#   ÚchkÚcredr>   r³   s        r   Útest_positivezCheckersMixin.test_positiveN  sƒ   è è € ð ×#Ò#Ñ%Ô%ð 	.ð 	.ˆCØ"&×"9Ò"9Ñ";Ô";ð .ð .‘��hØ×-Ò-¨dÑ3Ô3Ð3Ð3�Ø× Ò   HÑ-Ô-Ð-Ð-ð.ð	.ð 	.r   c              #   óÔ   K  — |                       ¦   «         D ]P}|                      ¦   «         D ]9}|                     |¦  «        }|                      |t          j        ¦  «        V — Œ:ŒQdS )zI
        The given credentials are rejected by all the checkers.
        N)rí   ÚgetBadCredentialsr™   ÚassertFailurer	   rh   )r#   rï   rð   r¢   s       r   Útest_negativezCheckersMixin.test_negativeY  s‰   è è € ð
 ×#Ò#Ñ%Ô%ð 	Eð 	EˆCØ×.Ò.Ñ0Ô0ð Eð E�Ø×'Ò'¨Ñ-Ô-�Ø×(Ò(¨­EÔ,CÑDÔDÐDÐDÐDÐDðEð	Eð 	Er   N)r   r   r   r   r   ÚinlineCallbacksrñ   rõ   r   r   r   rë   rë   @  sa   € € € € € ðð ð Ôð.ð .ñ Ôð.ð ÔðEð Eñ ÔðEð Eð Er   rë   c                   óZ   — e Zd Zej        ZdZededefd„¦   «         Z	g d¢Z
d„ Zd„ Zd„ ZdS )	ÚHashlessFilePasswordDBMixinNrÎ   rµ   c                 ó   — | S r3   r   rÍ   s    r   ÚnetworkHashz'HashlessFilePasswordDBMixin.networkHashh  s   € àˆr   ))rr   ó	   password1)rs   s	   password2)rt   ó	   password3c              #   ó~   K  — | j         D ]2\  }}|                      ||                      |¦  «        ¦  «        |fV — Œ3d S r3   )Ú_validCredentialsÚ	credClassrú   r‹   s      r   rî   z.HashlessFilePasswordDBMixin.getGoodCredentialsr  sV   è è € ØÔ*ð 	<ð 	<‰DˆAˆqØ—.’.  D×$4Ò$4°QÑ$7Ô$7Ñ8Ô8¸!Ð;Ð;Ð;Ð;Ð;ð	<ð 	<r   c              #   óp   K  — dD ]0\  }}|                       ||                      |¦  «        ¦  «        V — Œ1d S )N))rr   rü   )rs   rû   )s   bloofs   blarf)rÿ   rú   r‹   s      r   ró   z-HashlessFilePasswordDBMixin.getBadCredentialsv  sR   è è € ð
ð 	9ð 	9‰DˆAˆqð
 —.’.  D×$4Ò$4°QÑ$7Ô$7Ñ8Ô8Ð8Ð8Ð8Ð8ð	9ð 	9r   c           
   #   óº  ‡ K  — ‰ j         pd„ }‰ j         oˆ fd„}dD �]½}‰                      ¦   «         }t          |d¦  «        5 }‰ j        D ],\  }}|                     |dz    ||¦  «        z   dz   ¦  «         Œ-	 d d d ¦  «         n# 1 swxY w Y   t          j        |||¬¦  «        V — ‰                      ¦   «         }t          |d¦  «        5 }‰ j        D ],\  }}|                      ||¦  «        dz   |z   dz   ¦  «         Œ-	 d d d ¦  «         n# 1 swxY w Y   t          j        |d	d
d||¬¦  «        V — ‰                      ¦   «         }t          |d¦  «        5 }‰ j        D ]A\  }}|                     d|                     ¦   «         z   dz    ||¦  «        z   dz   ¦  «         ŒB	 d d d ¦  «         n# 1 swxY w Y   t          j        |dddd||¬¦  «        V — �Œ¿d S )Nc                 ó   — | S r3   r   rÍ   s    r   rÏ   z9HashlessFilePasswordDBMixin.getCheckers.<locals>.<lambda>  s   € ¨q€ r   c                 ó.   •— ‰                      |¦  «        S r3   )ÚdiskHash)r4   r5   Ústoredr#   s      €r   rÏ   z9HashlessFilePasswordDBMixin.getCheckers.<locals>.<lambda>�  s   ø€ ¨t¯}ª}¸XÑ/FÔ/F€ r   )TFrv   rw   rx   )Úcacher±   s    dingle dongle ó    é   r   s   zip,zap,s   ,zup,ó   ,r   é   F)r  ry   r{   rþ   r}   r   rƒ   Útitle)r#   r  Ú	hashCheckr  ÚfnÚfObjr   r€   s   `       r   rí   z'HashlessFilePasswordDBMixin.getCheckers~  s  øè è € Ø”=Ð1 [ [ˆØ”Mð 
ØFÐFÐFÐFð 	ð !ð 	ñ 	ˆEØ—’‘”ˆBÝ�b˜$‘”ð ? 4Ø Ô2ð ?ð ?‘D�A�qØ—J’J˜q 4™x¨(¨(°1©+¬+Ñ5¸Ñ=Ñ>Ô>Ð>Ð>ð?ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?õ Ô)¨"°EÀ	ÐJÑJÔJÐJÐJÐJà—’‘”ˆBÝ�b˜$‘”ð M 4Ø Ô2ð Mð M‘D�A�qØ—J’J˜x˜x¨™{œ{Ð-?Ñ?À!ÑCÀeÑKÑLÔLÐLÐLðMðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Mõ Ô)¨"¨d°A°qÀÈIÐVÑVÔVÐVÐVÐVà—’‘”ˆBÝ�b˜$‘”ð  4Ø Ô2ð ð ‘D�A�qØ—J’JØ# a§g¢g¡i¤iÑ/°(Ñ:¸X¸XÀa¹[¼[ÑHÈ5ÑPñô ð ð ððð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ
 Ô)Ø�D˜!˜Q ¨U¸ðñ ô ð ð ð ñ ð'	ð 	s7   Á5BÂB		ÂB		Ã5DÄD	ÄD	ÅA
F1Æ1F5	Æ8F5	)r   r   r   r   r[   rÿ   r  Ústaticmethodrè   rú   rþ   rî   ró   rí   r   r   r   rø   rø   d  sŒ   € € € € € ØÔ,€IØ€Hàð�uð  ð ð ð ñ „\ððð ð Ðð<ð <ð <ð9ð 9ð 9ðð ð ð ð r   rø   c                   ó$   — e Zd Zed„ ¦   «         ZdS )Ú LocallyHashedFilePasswordDBMixinc                 ó    — t          | ¦  «        S r3   ©r   rÍ   s    r   r  z)LocallyHashedFilePasswordDBMixin.diskHash�  ó   € å�q‰zŒzÐr   N)r   r   r   r  r  r   r   r   r  r  œ  s-   € € € € € Øðð ñ „\ðð ð r   r  c                   óT   — e Zd Zededefd„¦   «         Z G d„ dej        ¦  «        ZdS )Ú NetworkHashedFilePasswordDBMixinrÎ   rµ   c                 ó    — t          | ¦  «        S r3   r  rÍ   s    r   rú   z,NetworkHashedFilePasswordDBMixin.networkHash£  r  r   c                   ó   — e Zd Zd„ ZdS )ú*NetworkHashedFilePasswordDBMixin.credClassc                 ó2   — t          | j        ¦  «        |k    S r3   )r   r5   r7   s     r   r8   z8NetworkHashedFilePasswordDBMixin.credClass.checkPassword¨  s   € Ý˜Tœ]Ñ+Ô+¨xÒ7Ð7r   N)r   r   r   r8   r   r   r   rÿ   r  §  s#   € € € € € ð	8ð 	8ð 	8ð 	8ð 	8r   rÿ   N)	r   r   r   r  rè   rú   r   r[   rÿ   r   r   r   r  r  ¢  sm   € € € € € Øð�uð  ð ð ð ñ „\ðð8ð 8ð 8ð 8ð 8�KÔ0ñ 8ô 8ð 8ð 8ð 8r   r  c                   ó   — e Zd ZdS )Ú"HashlessFilePasswordDBCheckerTestsNr/   r   r   r   r  r  ¬  ó   € € € € € ð 	€Dr   r  c                   ó   — e Zd ZdS )Ú'LocallyHashedFilePasswordDBCheckerTestsNr/   r   r   r   r  r  ²  r  r   r  c                   ó   — e Zd ZdS )Ú'NetworkHashedFilePasswordDBCheckerTestsNr/   r   r   r   r!  r!  ¸  r  r   r!  c                   ó   — e Zd ZdZd„ ZdS )ÚUsernameHashedPasswordTestszo
    UsernameHashedPassword is a deprecated class that is functionally
    equivalent to UsernamePassword.
    c                 ó@   — |                       ddt          d¦  «         dS )zB
        Tests that UsernameHashedPassword is deprecated.
        r¥   r¦   z6Use twisted.cred.credentials.UsernamePassword instead.N)rª   r«   r'   s    r   Útest_deprecationz,UsernameHashedPasswordTests.test_deprecationÄ  s2   € ð 	×)Ò)Ø&Ø$ÝØDñ		
ô 	
ð 	
ð 	
ð 	
r   N)r   r   r   r   r%  r   r   r   r#  r#  ¾  s-   € € € € € ðð ð
	
ð 	
ð 	
ð 	
ð 	
r   r#  ).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   ÚAdapterr,   ÚregisterAdapterrP   r.   r1   ÚIRealmr:   ÚTestCaserD   rp   r®   rë   rø   r  r  r  r  r!  r#  r   r   r   ú<module>r3     sˆ  ððð ð
 (Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø "Ð "Ð "Ð "Ð "Ð "Ø %Ð %Ð %Ð %Ð %Ð %Ø +Ð +Ð +Ð +Ð +Ð +Ø "Ð "Ð "Ð "Ð "Ð "ðØ%Ð%Ð%Ð%Ð%Ð%ð €E€Eøð ð ð ð Ø€E€E€Eðøøøð ˆg�i  Q¨Ñ*Ô*€ð	ð 	ð 	ð 	ð 	�	ñ 	ô 	ð 	ðð ð ð ð ñ ô ð ð$ €ˆYÑÔð	ð 	ð 	ð 	ð 	ˆzÔ!ñ 	ô 	ñ Ôð	ð €
Ô ˜8 Z°Ñ ;Ô ;Ð ;ð	ð 	ð 	ð 	ð 	˜+Ô7ñ 	ô 	ð 	ð €Ð  )Ñ,Ô,ð)ð )ð )ð )ð )ñ )ô )ñ -Ô,ð)ð €ˆVŒ]ÑÔðEð Eð Eð Eð Eñ Eô Eñ ÔðEð$Y>ð Y>ð Y>ð Y>ð Y>�Ô!ñ Y>ô Y>ð Y>ðx4ð 4ð 4ð 4ð 4˜(Ô+ñ 4ô 4ð 4ðnD,ð D,ð D,ð D,ð D,¨Ô(9ñ D,ô D,ð D,ðN!Eð !Eð !Eð !Eð !Eñ !Eô !Eð !EðH5ð 5ð 5ð 5ð 5ñ 5ô 5ð 5ðpð ð ð ð Ð'Bñ ô ð ð8ð 8ð 8ð 8ð 8Ð'Bñ 8ô 8ð 8ð	ð 	ð 	ð 	ð 	Ø °Ô0Añ	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ø$ m°XÔ5Fñ	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ø$ m°XÔ5Fñ	ô 	ð 	ð
ð 
ð 
ð 
ð 
 (Ô"3ñ 
ô 
ð 
ð 
ð 
s   ¸A ÁAÁ
A