§
    Étºf©  ã                   ó    — d Z ddlmZ ddlmZ ddlmZ  G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z	 G d	„ d
ej        ¦  «        Z
dS )z>
Tests for L{twisted.words.protocols.jabber.sasl_mechanisms}.
é    )ÚnetworkString)Úunittest)Úsasl_mechanismsc                   ó   — e Zd ZdZdd„ZdS )Ú
PlainTestszL
    Tests for L{twisted.words.protocols.jabber.sasl_mechanisms.Plain}.
    ÚreturnNc                 ó‚   — t          j        ddd¦  «        }|                      |                     ¦   «         d¦  «         dS )z,
        Test the initial response.
        NÚtestÚsecrets    test secret)r   ÚPlainÚassertEqualÚgetInitialResponse©ÚselfÚms     úk/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/words/test/test_jabbersaslmechanisms.pyÚtest_getInitialResponsez"PlainTests.test_getInitialResponse   sA   € õ Ô! $¨°Ñ9Ô9ˆØ×Ò˜×-Ò-Ñ/Ô/Ð1FÑGÔGÐGÐGÐGó    ©r   N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r   r      s8   € € € € € ðð ðHð Hð Hð Hð Hð Hr   r   c                   ó   — e Zd ZdZdd„ZdS )ÚAnonymousTestszP
    Tests for L{twisted.words.protocols.jabber.sasl_mechanisms.Anonymous}.
    r   Nc                 ó|   — t          j        ¦   «         }|                      |                     ¦   «         d¦  «         dS )z8
        Test the initial response to be empty.
        N)r   Ú	Anonymousr   r   r   s     r   r   z&AnonymousTests.test_getInitialResponse    s:   € õ Ô%Ñ'Ô'ˆØ×Ò˜×-Ò-Ñ/Ô/°Ñ6Ô6Ð6Ð6Ð6r   r   r   r   r   r   r   r      s2   € € € € € ðð ð7ð 7ð 7ð 7ð 7ð 7r   r   c                   óZ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dd„Zdd„ZdS )ÚDigestMD5TestszP
    Tests for L{twisted.words.protocols.jabber.sasl_mechanisms.DigestMD5}.
    r   Nc                 ó@   — t          j        ddd dd¦  «        | _        d S )NÚxmppzexample.orgr
   r   )r   Ú	DigestMD5Ú	mechanism©r   s    r   ÚsetUpzDigestMD5Tests.setUp-   s%   € Ý(Ô2Ø�M 4¨°ñ
ô 
ˆŒˆˆr   c                 ó`   — |                       | j                             ¦   «         d¦  «         dS )z=
        Test that no initial response is generated.
        N)ÚassertIdenticalr%   r   r&   s    r   r   z&DigestMD5Tests.test_getInitialResponse2   s.   € ð 	×Ò˜Tœ^×>Ò>Ñ@Ô@À$ÑGÔGÐGÐGÐGr   c           
      ó¸   — d}| j                              | j                              |¦  «        ¦  «        }|d= |d= |                      ddddgdd	d
dœ|¦  «         dS )zl
        The response to a Digest-MD5 challenge includes the parameters from the
        challenge.
        sJ   realm="localhost",nonce="1234",qop="auth",charset=utf-8,algorithm=md5-sessó   cnonceó   responseó   testó   1234ó   00000001ó   authó   utf-8s	   localhostó   xmpp/example.org©s   usernameó   nonces   ncó   qopó   charsetó   realms
   digest-uriN©r%   Ú_parseÚgetResponser   ©r   Ú	challengeÚ
directivess      r   Útest_getResponsezDigestMD5Tests.test_getResponse8   sŠ   € ð"ð 	ð ”^×*Ò*¨4¬>×+EÒ+EÀiÑ+PÔ+PÑQÔQˆ
Ø�yÐ! :¨kÐ#:Ø×Òà$Ø!Ø"Ø ˜	Ø$Ø&Ø2ðð ð ñ	
ô 	
ð 	
ð 	
ð 	
r   c           
      ó¸   — d}| j                              | j                              |¦  «        ¦  «        }|d= |d= |                      ddddgdd	d
dœ|¦  «         dS )zs
        Bytes outside the ASCII range in the challenge are nevertheless
        included in the response.
        sS   realm="Ã©chec.example.org",nonce="1234",qop="auth",charset=utf-8,algorithm=md5-sessr+   r,   r-   r.   r/   r0   r1   ó   Ã©chec.example.orgr2   r3   Nr8   r;   s      r   Útest_getResponseNonAsciiRealmz,DigestMD5Tests.test_getResponseNonAsciiRealmP   sŠ   € ð;ð 	ð ”^×*Ò*¨4¬>×+EÒ+EÀiÑ+PÔ+PÑQÔQˆ
Ø�yÐ! :¨kÐ#:Ø×Òà$Ø!Ø"Ø ˜	Ø$Ø5Ø2ðð ð ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó¦   — d}| j                              | j                              |¦  «        ¦  «        }|                      |d         d¦  «         dS )zq
        The response to a challenge without a realm uses the host part of the
        JID as the realm.
        ó8   nonce="1234",qop="auth",charset=utf-8,algorithm=md5-sessr7   s   example.orgNr8   r;   s      r   Útest_getResponseNoRealmz&DigestMD5Tests.test_getResponseNoRealmh   sP   € ð
 Pˆ	Ø”^×*Ò*¨4¬>×+EÒ+EÀiÑ+PÔ+PÑQÔQˆ
Ø×Ò˜ HÔ-¨~Ñ>Ô>Ð>Ð>Ð>r   c                 óà   — t          j        ddddd¦  «        | _        d}| j                             | j                             |¦  «        ¦  «        }|                      |d         d¦  «         dS )	zÖ
        If the challenge does not include a realm and the host part of the JID
        includes bytes outside of the ASCII range, the response still includes
        the host part of the JID as the realm.
        r#   u   Ã©chec.example.orgNr
   r   rC   r7   r@   )r   r$   r%   r9   r:   r   r;   s      r   Útest_getResponseNoRealmIDNz)DigestMD5Tests.test_getResponseNoRealmIDNq   ss   € õ )Ô2ØÐ,¨d°F¸Hñ
ô 
ˆŒð Pˆ	Ø”^×*Ò*¨4¬>×+EÒ+EÀiÑ+PÔ+PÑQÔQˆ
Ø×Ò˜ HÔ-Ð/JÑKÔKÐKÐKÐKr   c                 ój   — d}| j                              |¦  «        }|                      d|¦  «         dS )zW
        If the challenge just has a rspauth directive, the response is empty.
        s@   rspauth=cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZA==r   N)r%   r:   r   )r   r<   Úresponses      r   Útest_getResponseRspauthz&DigestMD5Tests.test_getResponseRspauth~   s;   € ð Xˆ	Ø”>×-Ò-¨iÑ8Ô8ˆØ×Ò˜˜hÑ'Ô'Ð'Ð'Ð'r   c           
      ón  — d}d}t          dd›¦  «        }d}d}d}d}d	                     |¦  «        }t          j        d
|d||¦  «        }	|	                     ||||                     |¦  «        |                     |¦  «        |                     |¦  «        |¦  «        }
|                      |
d¦  «         dS )zc
        The response to a Digest-MD5 challenge is computed according to RFC
        2831.
        zutf-8s   OA6MG9tEQGm2hhé   Ú08xs   OA6MHXh6VqTrRku   Ð˜chrisu   Ð˜secretu   Ð˜elwood.innosoft.comu   imap/Ð˜elwood.innosoft.coms   imapNs    7928f233258be88392424d094453c5e3)r   Úencoder   r$   Ú_calculateResponser   )r   ÚcharsetÚnonceÚncÚcnonceÚusernameÚpasswordÚhostÚ	digestURIr%   rH   s              r   Útest_calculateResponsez%DigestMD5Tests.test_calculateResponse†   sË   € ð
 ˆØ!ˆÝ˜a˜:˜:Ñ&Ô&ˆØ"ˆà ˆØ!ˆØ*ˆØ4×;Ò;¸GÑDÔDˆ	å#Ô-¨g°t¸TÀ8ÈXÑVÔVˆ	Ø×/Ò/ØØØØ�OŠO˜GÑ$Ô$Ø�OŠO˜GÑ$Ô$Ø�KŠK˜Ñ Ô Øñ
ô 
ˆð 	×Ò˜Ð#FÑGÔGÐGÐGÐGr   c                 ó~   — d}| j                              |¦  «        }|                      dddddgddgd	œ|¦  «         d
S )zc
        A challenge can be parsed into a L{dict} with L{bytes} or L{list}
        values.
        sT   nonce="1234",qop="auth,auth-conf",charset=utf-8,algorithm=md5-sess,cipher="des,3des"s   md5-sessr.   r1   r0   s	   auth-confs   dess   3des)s	   algorithmr4   r6   r5   s   cipherN)r%   r9   r   r;   s      r   Ú
test_parsezDigestMD5Tests.test_parse¡   sm   € ð4ð 	ð ”^×*Ò*¨9Ñ5Ô5ˆ
Ø×Òà)Ø!Ø$Ø  ,Ð/Ø" GÐ,ðð ð ñ		
ô 		
ð 		
ð 		
ð 		
r   r   )r   r   r   r   r'   r   r>   rA   rD   rF   rI   rW   rY   r   r   r   r!   r!   (   sÞ   € € € € € ðð ð
ð 
ð 
ð 
ð
Hð Hð Hð Hð
ð 
ð 
ð 
ð0
ð 
ð 
ð 
ð0?ð ?ð ?ð ?ðLð Lð Lð Lð(ð (ð (ð (ðHð Hð Hð Hð6
ð 
ð 
ð 
ð 
ð 
r   r!   N)r   Útwisted.python.compatr   Útwisted.trialr   Útwisted.words.protocols.jabberr   ÚTestCaser   r   r!   r   r   r   ú<module>r^      sê   ððð ð
 0Ð /Ð /Ð /Ð /Ð /Ø "Ð "Ð "Ð "Ð "Ð "Ø :Ð :Ð :Ð :Ð :Ð :ð
Hð 
Hð 
Hð 
Hð 
H�Ô"ñ 
Hô 
Hð 
Hð
7ð 
7ð 
7ð 
7ð 
7�XÔ&ñ 
7ô 
7ð 
7ðL
ð L
ð L
ð L
ð L
�XÔ&ñ L
ô L
ð L
ð L
ð L
r   