%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/twisted/cred/test/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/twisted/cred/test/__pycache__/test_digestauth.cpython-312.pyc

�

Ϫ�f�]���dZddlZddlmZddlmZmZddlmZddl	m
Z
mZmZm
Z
mZddlmZddlmZdd	lmZdd
lmZd�ZGd�d
e
�ZGd�de�Zy)z[
Tests for L{twisted.cred._digest} and the associated bits in
L{twisted.cred.credentials}.
�N)�hexlify)�md5�sha1)�verifyObject)�DigestCredentialFactory�IUsernameDigestHash�calcHA1�calcHA2�calcResponse)�LoginFailed)�IPv4Address)�
networkString)�TestCasec�H�tj|�j�S)N)�base64�	b64encode�strip)�ss �C/usr/lib/python3/dist-packages/twisted/cred/test/test_digestauth.pyrrs�����A��$�$�&�&�c�.��eZdZdZ�fd�Zd�Zd�Z�xZS)�FakeDigestCredentialFactoryz\
    A Fake Digest Credential Factory that generates a predictable
    nonce and opaque
    c�2��t�|�|i|��d|_y)N�0)�super�__init__�
privateKey)�self�args�kwargs�	__class__s   �rrz$FakeDigestCredentialFactory.__init__'s���
���$�)�&�)���rc��y)z)
        Generate a static nonce
        s178288758716122392881254770685��rs r�_generateNoncez*FakeDigestCredentialFactory._generateNonce+s��1rc��y)z&
        Return a stable time
        rr#r$s r�_getTimez$FakeDigestCredentialFactory._getTime1s��r)�__name__�
__module__�__qualname__�__doc__rr%r'�
__classcell__)r!s@rrr!s����
�1�rrc��eZdZdZd�Zdefd�Zd�Zd�Zdefd�Z	defd�Z
d	�Zd
�Zd�Z
d�Zdefd
�Zd�Zd�Zdefd�Zd�Zd�Zd)d�Zd�Zd)d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#�Z%d$�Z&d%�Z'd&�Z(d'�Z)y()*�DigestAuthTestsz�
    L{TestCase} mixin class which defines a number of tests for
    L{DigestCredentialFactory}.  Because this mixin defines C{setUp}, it
    must be inherited before L{TestCase}.
    c���d|_d|_d|_d|_d|_d|_d|_tdd	d
�|_d|_	t|j|j�|_y)
z>
        Create a DigestCredentialFactory for testing
        �foobarsbazquuxs
test realm�md5s 29fc54aa1641c6fa0e151419361c8f23�auths/write/�TCPz10.2.3.4iu��GETN)�username�password�realm�	algorithm�cnonce�qop�urir
�
clientAddress�methodr�credentialFactoryr$s r�setUpzDigestAuthTests.setUp?sd��"��
�"��
�"��
����9���������(��
�E�B������!8�������!T��rr1c�>�d}t||j|j|j||j�}dj|j|j|jf�}t
||�j��}|j||�y)z�
        L{calcHA1} accepts the C{'md5'} algorithm and returns an MD5 hash of
        its parameters, excluding the nonce and cnonce.
        s	abc123xyz�:N)	r	r5r7r6r9�joinr�digest�assertEqual)r�
_algorithm�_hash�nonce�hashA1�a1�expecteds       r�test_MD5HashA1zDigestAuthTests.test_MD5HashA1Nsz��
�����
�
�t�z�z�4�=�=�%����
���Y�Y��
�
�t�z�z�4�=�=�A�
B���5��9�+�+�-�.�������*rc��d}td|j|j|j||j�}|jdz|jzdz|jz}tt
|�j��}|dz|zdz|jz}tt
|�j��}|j||�y)z�
        L{calcHA1} accepts the C{'md5-sess'} algorithm and returns an MD5 hash
        of its parameters, including the nonce and cnonce.
        s	xyz321abc�md5-sessrAN)	r	r5r7r6r9rrrCrD)rrGrHrI�ha1rJs      r�test_MD5SessionHashA1z%DigestAuthTests.test_MD5SessionHashA1[s���
��������
�
�D�M�M�5�$�+�+�
���]�]�T�
!�D�J�J�
.��
5��
�
�
E���c�"�g�n�n�&�'��
�4�Z�%�
�$�
&����
4���3�r�7�>�>�+�,�������*rc�0�|jdt�y)z�
        L{calcHA1} accepts the C{'sha'} algorithm and returns a SHA hash of its
        parameters, excluding the nonce and cnonce.
        �shaN)rKrr$s r�test_SHAHashA1zDigestAuthTests.test_SHAHashA1js��
	
���F�D�)rc��d}t|||jdd�}|dz|jz}t||�j��}|j	||�y)z�
        L{calcHA2} accepts the C{'md5'} algorithm and returns an MD5 hash of
        its arguments, excluding the entity hash for QOP other than
        C{'auth-int'}.
        r4r2NrA�r
r;rrCrD)rrErFr=�hashA2�a2rJs       r�test_MD5HashA2Authz"DigestAuthTests.test_MD5HashA2AuthqsX������V�T�X�X�w��E��
�d�]�T�X�X�
%���5��9�+�+�-�.�������*rc���d}d}t|||jd|�}|dz|jzdz|z}t||�j��}|j	||�y)z�
        L{calcHA2} accepts the C{'md5'} algorithm and returns an MD5 hash of
        its arguments, including the entity hash for QOP of C{'auth-int'}.
        r4s	foobarbazsauth-intrANrT)rrErFr=�hentityrUrVrJs        r�test_MD5HashA2AuthIntz%DigestAuthTests.test_MD5HashA2AuthInt}sg��
������V�T�X�X�{�G�L��
�d�]�T�X�X�
%��
,�w�
6���5��9�+�+�-�.�������*rc�&�|jd�y)z�
        L{calcHA2} accepts the C{'md5-sess'} algorithm and QOP of C{'auth'} and
        returns the same value as it does for the C{'md5'} algorithm.
        rMN)rWr$s r�test_MD5SessHashA2Authz&DigestAuthTests.test_MD5SessHashA2Auth�s��
	
����,rc�&�|jd�y)z�
        L{calcHA2} accepts the C{'md5-sess'} algorithm and QOP of C{'auth-int'}
        and returns the same value as it does for the C{'md5'} algorithm.
        rMN)rZr$s r�test_MD5SessHashA2AuthIntz)DigestAuthTests.test_MD5SessHashA2AuthInt�s��
	
�"�"�;�/rc�0�|jdt�y)z�
        L{calcHA2} accepts the C{'sha'} algorithm and returns a SHA hash of
        its arguments, excluding the entity hash for QOP other than
        C{'auth-int'}.
        rQN)rWrr$s r�test_SHAHashA2Authz"DigestAuthTests.test_SHAHashA2Auth�s��	
�����-rc�0�|jdt�y)z�
        L{calcHA2} accepts the C{'sha'} algorithm and returns a SHA hash of
        its arguments, including the entity hash for QOP of C{'auth-int'}.
        rQN)rZrr$s r�test_SHAHashA2AuthIntz%DigestAuthTests.test_SHAHashA2AuthInt�s��
	
�"�"�6�4�0rc	��d}d}d}|dz|zdz|z}t||�j��}t||||ddd�}|j||�y)z�
        L{calcResponse} accepts the C{'md5'} algorithm and returns an MD5 hash
        of its parameters, excluding the nonce count, client nonce, and QoP
        value if the nonce count and client nonce are L{None}
        �abc123�789xyz�lmnopqrAN�rrCrrD)	rrErFrHrUrG�responserJrCs	         r�test_MD5HashResponsez$DigestAuthTests.test_MD5HashResponse�sh���������D�=�5�(�4�/�&�8���5��?�1�1�3�4���f�f�j�%��t�T�R������6�*rc�&�|jd�y)z�
        L{calcResponse} accepts the C{'md5-sess'} algorithm and returns an MD5
        hash of its parameters, excluding the nonce count, client nonce, and
        QoP value if the nonce count and client nonce are L{None}
        rMN)rir$s r�test_MD5SessionHashResponsez+DigestAuthTests.test_MD5SessionHashResponse�s��	
�!�!�+�.rc�0�|jdt�y)z�
        L{calcResponse} accepts the C{'sha'} algorithm and returns a SHA hash
        of its parameters, excluding the nonce count, client nonce, and QoP
        value if the nonce count and client nonce are L{None}
        rQN)rirr$s r�test_SHAHashResponsez$DigestAuthTests.test_SHAHashResponse�s��	
�!�!�&�$�/rc	���d}d}d}d}d}d}|dz|zdz|zdz|zdz|zdz|z}	t||	�j��}
t|||||||�}|j|
|�y)	z�
        L{calcResponse} accepts the C{'md5'} algorithm and returns an MD5 hash
        of its parameters, including the nonce count, client nonce, and QoP
        value if they are specified.
        rdrerfs00000004s	abcxyz123r2rANrg)rrErFrHrUrG�
nonceCount�clientNoncer:rhrJrCs            r�test_MD5HashResponseExtraz)DigestAuthTests.test_MD5HashResponseExtra�s��������� �
�"����
��
��
��
��	
�
�
��

��
��
��	
��

�	��5��?�1�1�3�4����F�J��z�;��
��	
����6�*rc�&�|jd�y)z�
        L{calcResponse} accepts the C{'md5-sess'} algorithm and returns an MD5
        hash of its parameters, including the nonce count, client nonce, and
        QoP value if they are specified.
        rMN)rqr$s r� test_MD5SessionHashResponseExtraz0DigestAuthTests.test_MD5SessionHashResponseExtra�s��	
�&�&�{�3rc�0�|jdt�y)z�
        L{calcResponse} accepts the C{'sha'} algorithm and returns a SHA hash
        of its parameters, including the nonce count, client nonce, and QoP
        value if they are specified.
        rQN)rqrr$s r�test_SHAHashResponseExtraz)DigestAuthTests.test_SHAHashResponseExtra�s��	
�&�&�v�t�4rc
��d|vr|j|d<d|vr|j|d<d|vr|j|d<d|vr|j|d<d|vr|j|d<d|vr|j
|d<|rd}nd}d	j
|j�D��cgc]&\}}|�dj
t|�d
|||f���(c}}�Scc}}w)a�
        Format all given keyword arguments and their values suitably for use as
        the value of an HTTP header.

        @types quotes: C{bool}
        @param quotes: A flag indicating whether to quote the values of each
            field in the response.

        @param **kw: Keywords and C{bytes} values which will be treated as field
            name/value pairs to include in the result.

        @rtype: C{bytes}
        @return: The given fields formatted for use as an HTTP header value.
        r5r7r8r:r9r;�"rs, �=)	r5r7r8r:r9r;rB�itemsr)r�quotes�kw�quote�k�vs      r�formatResponsezDigestAuthTests.formatResponse�s����R��!�]�]�B�z�N��"���*�*�B�w�K��b� �"�n�n�B�{�O���?����B�u�I��2���;�;�B�x�L���?����B�u�I���E��E��z�z�!�h�h�j�
��Q���=����-��*�D�%��E�B�C�
�
�	
��
s�+C
c	�`�|jd�}|jd�j�}|jd�}t||j|j|j
||j�}t|d|j|d�}t||||||j|�}|S)z@
        Calculate the response for the given challenge
        rGr8r:r4N)
�get�lowerr	r5r7r6r9r
r;r)	r�	challenge�ncountrG�algor:rN�ha2rJs	         r�getDigestResponsez!DigestAuthTests.getDigestResponses����
�
�g�&���}�}�[�)�/�/�1���m�m�E�"����$�-�-����T�]�]�E�4�;�;�
���d�F�D�H�H�c�4�8����S�$��v�t�{�{�C�P���rc���|jj|jj�}d}|j	||d|j||�||d��}|jj
||j|jj�}|j|j|j��|j|j|jdz��y)z�
        L{DigestCredentialFactory.decode} accepts a digest challenge response
        and parses it into an L{IUsernameHashedPassword} provider.
        �00000001rG�opaque)rzrGrh�ncr��wrongN�r>�getChallenger<�hostrr��decoder=�
assertTrue�
checkPasswordr6�assertFalse)rrzr�r��clientResponse�credss      r�
test_responsezDigestAuthTests.test_response.s���
�*�*�7�7��8J�8J�8O�8O�P�	�
���,�,���G�$��+�+�I�r�:���X�&�-�
���&�&�-�-��D�K�K��);�);�)@�)@�
��	
����+�+�D�M�M�:�;�����,�,�T�]�]�X�-E�F�Grc�&�|jd�y)a
        L{DigestCredentialFactory.decode} accepts a digest challenge response
        which does not quote the values of its fields and parses it into an
        L{IUsernameHashedPassword} provider in the same way it would a
        response which included quoted field values.
        FN)r�r$s r�test_responseWithoutQuotesz*DigestAuthTests.test_responseWithoutQuotesCs��	
���5�!rc�4�d|_|jd�y)z�
        L{DigestCredentialFactory.decode} accepts a digest challenge response
        which quotes the values of its fields and includes a C{b","} in the URI
        field.
        s/some,path/TN)r;r�r$s r�test_responseWithCommaURIz)DigestAuthTests.test_responseWithCommaURILs��"������4� rc�2�d|_|j�y)zs
        The case of the algorithm value in the response is ignored when
        checking the credentials.
        sMD5N�r8r�r$s r�test_caseInsensitiveAlgorithmz-DigestAuthTests.test_caseInsensitiveAlgorithmUs��
 ������rc�2�d|_|j�y)zV
        The algorithm defaults to MD5 if it is not supplied in the response.
        Nr�r$s r�test_md5DefaultAlgorithmz(DigestAuthTests.test_md5DefaultAlgorithm]s��������rc��|jjd�}d}|j|d|j||�||d��}|jj	||j
d�}|j
|j|j��|j|j|jdz��y)z�
        L{DigestCredentialFactory.decode} accepts a digest challenge response
        even if the client address it is passed is L{None}.
        Nr�rGr��rGrhr�r�r�)
r>r�rr�r�r=r�r�r6r��rr�r�r�r�s     r�test_responseWithoutClientIPz,DigestAuthTests.test_responseWithoutClientIPds���
�*�*�7�7��=�	�
���,�,��G�$��+�+�I�r�:���X�&�	-�
���&�&�-�-�n�d�k�k�4�P������+�+�D�M�M�:�;�����,�,�T�]�]�X�-E�F�Grc�^�|jj|jj�}d}|j	|d|j||�||d��}|jj
||j|jj�}|j|j|j��|j|j|jdz��d}|j	|d|j||�||d��}|jj
||j|jj�}|j|j|j��|j|j|jdz��y)zm
        L{DigestCredentialFactory.decode} handles multiple responses to a
        single challenge.
        r�rGr�r�r�s00000002Nr�r�s     r�test_multiResponsez"DigestAuthTests.test_multiResponsevs|��
�*�*�7�7��8J�8J�8O�8O�P�	�
���,�,��G�$��+�+�I�r�:���X�&�	-�
���&�&�-�-��D�K�K��);�);�)@�)@�
��	
����+�+�D�M�M�:�;�����,�,�T�]�]�X�-E�F�G�
���,�,��G�$��+�+�I�r�:���X�&�	-�
���&�&�-�-��D�K�K��);�);�)@�)@�
��	
����+�+�D�M�M�:�;�����,�,�T�]�]�X�-E�F�Grc���|jj|jj�}d}|j	|d|j||�||d��}|jj
|d|jj�}|j|j|j��|j|j|jdz��y)a&
        L{DigestCredentialFactory.decode} returns an L{IUsernameHashedPassword}
        provider which rejects a correct password for the given user if the
        challenge response request is made using a different HTTP method than
        was used to request the initial challenge.
        r�rGr�r�sPOSTr�N)
r>r�r<r�rr�r�r�r�r6r�s     r�test_failsWithDifferentMethodz-DigestAuthTests.test_failsWithDifferentMethod�s����*�*�7�7��8J�8J�8O�8O�P�	�
���,�,��G�$��+�+�I�r�:���X�&�	-�
���&�&�-�-��G�T�%7�%7�%<�%<�
��	
����,�,�T�]�]�;�<�����,�,�T�]�]�X�-E�F�Grc���|jt|jj|j	d��|j
|jj�}|jt|�d�|jt|jj|j	d��|j
|jj�}|jt|�d�y)z�
        L{DigestCredentialFactory.decode} raises L{LoginFailed} if the response
        has no username field or if the username field is empty.
        N)r5z$Invalid response, no username given.r�
�assertRaisesrr>r�rr=r<r�rD�str�r�es  r�test_noUsernamezDigestAuthTests.test_noUsername�s���
�����"�"�)�)������.��K�K����#�#�
��	
����Q��!G�H�
�����"�"�)�)������-��K�K����#�#�
��	
����Q��!G�Hrc���|jt|jj|j	d��|j
|jj�}|jt|�d�y)zo
        L{DigestCredentialFactory.decode} raises L{LoginFailed} if the response
        has no nonce.
        rd)r�z!Invalid response, no nonce given.Nr�r�s  r�test_noNoncezDigestAuthTests.test_noNonce�sd��

�����"�"�)�)����y��1��K�K����#�#�
��	
����Q��!D�Erc���|jt|jj|j	�|j
|jj�}|jt|�d�y)zp
        L{DigestCredentialFactory.decode} raises L{LoginFailed} if the response
        has no opaque.
        z"Invalid response, no opaque given.Nr�r�s  r�
test_noOpaquezDigestAuthTests.test_noOpaque�s_��

�����"�"�)�)����!��K�K����#�#�
��	
����Q��!E�Frc���|jj|jj�}d}|j	|d|j||�||d��}|jj
||j|jj�}|jtt|��|jdz|jzdz|jz}t|�}|j|jt!|j#����|j%d�|j'|jt!|j#����y)z�
        L{DigestCredentialFactory.decode} returns an L{IUsernameDigestHash}
        provider which can verify a hash of the form 'username:realm:password'.
        r�rGr�r�rAr�N)r>r�r<r�rr�r�r=r�rrr5r7r6r�	checkHashrrC�updater�)rr�r�r�r��	cleartext�hashs       r�test_checkHashzDigestAuthTests.test_checkHash�s$��
�*�*�7�7��8J�8J�8O�8O�P�	�
���,�,��G�$��+�+�I�r�:���X�&�	-�
���&�&�-�-��D�K�K��);�);�)@�)@�
��	
����%8�%�@�A��M�M�D�(�4�:�:�5��<�t�}�}�L�	��9�~������������
�(>�?�@����H�������������)?�@�Arc	���t|j|j�}|j|jj
�}|j
t|jd|d|jj
�}|jt|�d�dtd�z}|j
t|j||d|jj
�}|jt|�d�|j
t|jd|d|jj
�}|jt|�d�dtdj|dt|jj
�df��z}|j
t|j||d|jj
�}|jt|�d	�y
)z�
        L{DigestCredentialFactory.decode} raises L{LoginFailed} when the opaque
        value does not contain all the required parts.
        s	badOpaquerGz&Invalid response, invalid opaque valuesfoo-snonce,clientipr�,r0z,Invalid response, invalid opaque/time valuesN)rr8r7r�r<r�r�r�
_verifyOpaquerDr�rrBr)rr>r��exc�	badOpaques     r�test_invalidOpaquez"DigestAuthTests.test_invalidOpaque�s���
8�����
�
�S��%�2�2�4�3E�3E�3J�3J�K�	������+�+���g�����#�#�
��	
����S��#K�L��i�(9�:�:�	������+�+���g�����#�#�
��	
����S��#K�L������+�+���g�����#�#�
��	
����S��#K�L��i��I�I��7�#�]�4�3E�3E�3J�3J�%K�Y�W�
�
�
�	�
�����+�+���g�����#�#�
��	
����S��#Q�Rrc�(�t|j|j�}|j|jj
�}|j
d|jj
�}|jt|j||d|jj
�}|jt|�d�|jt|j|d|jj
�}|jt|�d�y)z�
        L{DigestCredentialFactory.decode} raises L{LoginFailed} when the given
        nonce from the response does not match the nonce encoded in the opaque.
        s
1234567890rGz2Invalid response, incompatible opaque/nonce valuesrN)rr8r7r�r<r��_generateOpaquer�rr�rDr�)rr>r��badNonceOpaquer�s     r�test_incompatibleNoncez&DigestAuthTests.test_incompatibleNonce1s���
8�����
�
�S��%�2�2�4�3E�3E�3J�3J�K�	�*�:�:��4�-�-�2�2�
�������+�+���g�����#�#�
��	
����S��#W�X������+�+������#�#�
��	
����S��#W�Xrc�|�t|j|j�}|j|jj
�}d}|j
|jj
|�|j|d|�}|jt|j||d|jj
�y)z�
        L{DigestCredentialFactory.decode} raises L{LoginFailed} when the
        request comes from a client IP other than what is encoded in the
        opaque.
        z10.0.0.1rGN)rr8r7r�r<r��assertNotEqualr�r�rr�)rr>r��
badAddressr�s     r�test_incompatibleClientIPz)DigestAuthTests.test_incompatibleClientIPOs���8�����
�
�S��%�2�2�4�3E�3E�3J�3J�K�	��
����D�.�.�3�3�Z�@�*�:�:��g��
�
��	
�����+�+���g�����#�#�	
rc�"�t|j|j�}|j|jj
�}dj
|dt|jj
�df�}tt||jz�j��}t|�}dj
||jd�f�}|jt|j ||d|jj
�y)z�
        L{DigestCredentialFactory.decode} raises L{LoginFailed} when the given
        opaque is older than C{DigestCredentialFactory.CHALLENGE_LIFETIME_SECS}
        r�rGs
-137876876�-�
N)rr8r7r�r<r�rBrrrrrCrrr�rr�)rr>r��keyrC�ekey�oldNonceOpaques       r�
test_oldNoncezDigestAuthTests.test_oldNoncehs���
8�����
�
�S��%�2�2�4�3E�3E�3J�3J�K�	��i�i�
�w�
��t�/A�/A�/F�/F�!G��W�
����S�#4�#?�#?�?�@�G�G�I�J����~�����F�D�J�J�u�,=�#>�?�������+�+���g�����#�#�	
rc���t|j|j�}|j|jj
�}dj
|dt|jj
�df�}tt|dz�j��}dj
|t|�f�}|jt|j||d|jj
�y)z~
        L{DigestCredentialFactory.decode} raises L{LoginFailed} when the opaque
        checksum fails verification.
        r�rGrsthis is not the right pkeyr�N)rr8r7r�r<r�rBrrrrCrr�rr�)rr>r�r�rC�badChecksums      r�test_mismatchedOpaqueChecksumz-DigestAuthTests.test_mismatchedOpaqueChecksum�s���
8�����
�
�S��%�2�2�4�3E�3E�3J�3J�K�	��i�i�
�w�
��t�/A�/A�/F�/F�!G��N�
����S�#@�@�A�H�H�J�K���i�i���3�� 8�9�������+�+���g�����#�#�	
rc�d�d}|D])\}}}}|jttd|||dd|��	�+y)z�
        L{calcHA1} raises L{TypeError} when any of the pszUsername, pszRealm,
        or pszPassword arguments are specified with the preHA1 keyword
        argument.
        ))suser�realm�password�preHA1)Nr�Nr�)NNr�r�r1snoncescnonce)�preHA1N)r��	TypeErrorr	)r�	arguments�pszUsername�pszRealm�pszPasswordr�s      r�test_incompatibleCalcHA1Optionsz/DigestAuthTests.test_incompatibleCalcHA1Options�sR��
�	�;D�	�6�K��;��������������
�

�	rc�`�|jjdd�}|jd|�y)z�
        L{DigestCredentialFactory._generateOpaque} returns a value without
        newlines, regardless of the length of the nonce.
        snlong nonce long nonce long nonce long nonce long nonce long nonce long nonce long nonce long nonce long nonce Nr�)r>r��assertNotIn)rr�s  r�test_noNewlineOpaquez$DigestAuthTests.test_noNewlineOpaque�s-��
�'�'�7�7�8K�T�R�������'rN)T)*r(r)r*r+r?rrKrOrRrWrZr\r^r`rbrirkrmrqrsrurr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r#rrr.r.8s����
U�)/�c�+�
+�*�-3�#�
+�06�S�
+�-�0�.�1�/5�C�+� /�0�4:��+�B4�5�&
�P
�H�*"�!���H�$!H�FH�,I�2F�G�B�41S�fY�<
�2
�0
�.�2(rr.)r+r�binasciir�hashlibrr�zope.interface.verifyr�twisted.cred.credentialsrrr	r
r�twisted.cred.errorr�twisted.internet.addressr
�twisted.python.compatr�twisted.trial.unittestrrrr.r#rr�<module>r�sP������.���+�0�/�+�'��"9��.~	(�h�~	(r

Zerion Mini Shell 1.0