ó
    ×›‘hÍ#  ã                   ó  • S SK Jr  S SKJr  S SKJr  S SKJrJrJ	r	J
r
  S SKJr  Sr\" \	R                  5       " S S5      5       r " S	 S
\R                   5      r " S S\R$                  5      r " S S\R$                  5      rg)é    )Úimplementer)Údefer)Úunittest)ÚjidÚsaslÚsasl_mechanismsÚ	xmlstream)Údomishú urn:ietf:params:xml:ns:xmpp-saslc                   ó6   • \ rS rSrSrSrSrSrS rS r	S r
S	rg)
ÚDummySASLMechanismé   a€  
Dummy SASL mechanism.

This just returns the initialResponse passed on creation, stores any
challenges and replies with the value of C{response}.

@ivar challenge: Last received challenge.
@type challenge: C{unicode}.
@ivar initialResponse: Initial response to be returned when requested
                       via C{getInitialResponse} or L{None}.
@type initialResponse: C{unicode}
NÚDUMMYó    c                 ó   • Xl         g ©N©ÚinitialResponse)Úselfr   s     ÚfC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/words/test/test_jabbersasl.pyÚ__init__ÚDummySASLMechanism.__init__"   s   € Ø.Õr   c                 ó   • U R                   $ r   r   ©r   s    r   ÚgetInitialResponseÚ%DummySASLMechanism.getInitialResponse%   s   € Ø×#Ñ#Ð#r   c                 ó&   • Xl         U R                  $ r   )Ú	challengeÚresponse)r   r   s     r   ÚgetResponseÚDummySASLMechanism.getResponse(   s   € Ø"ŒØ�}‰}Ðr   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Únamer   r   r   r    Ú__static_attributes__© r   r   r   r      s'   † ñð €IØ€DØ€Hò/ò$õr   r   c                   ó"   • \ rS rSrSrSrS rSrg)ÚDummySASLInitiatingInitializeré-   aG  
Dummy SASL Initializer for initiating entities.

This hardwires the SASL mechanism to L{DummySASLMechanism}, that is
instantiated with the value of C{initialResponse}.

@ivar initialResponse: The initial response to be returned by the
                       dummy SASL mechanism or L{None}.
@type initialResponse: C{unicode}.
Nc                 ó8   • [        U R                  5      U l        g r   )r   r   Ú	mechanismr   s    r   ÚsetMechanismÚ+DummySASLInitiatingInitializer.setMechanism;   s   € Ü+¨D×,@Ñ,@ÓAˆ�r   )r.   )r"   r#   r$   r%   r&   r   r/   r(   r)   r   r   r+   r+   -   s   † ñ	ð €OõBr   r+   c                   óZ   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)ÚSASLInitiatingInitializerTestsé?   z-
Tests for L{sasl.SASLInitiatingInitializer}
c                 óx  • / U l         [        R                  " 5       U l        [        R                  " U R                  5      U l        U R                   R
                  U R                  l        U R                  R                  5         U R                  R                  S5        [        U R                  5      U l
        g )Ns�   <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='12345' version='1.0'>)Úoutputr	   ÚAuthenticatorÚauthenticatorÚ	XmlStreamÚappendÚsendÚconnectionMadeÚdataReceivedr+   Úinitr   s    r   ÚsetUpÚ$SASLInitiatingInitializerTests.setUpD   s�   € ØˆŒä&×4Ò4Ó6ˆÔÜ"×,Ò,¨T×-?Ñ-?Ó@ˆŒØ"Ÿk™k×0Ñ0ˆ�‰ÔØ�‰×%Ñ%Ô'Ø�‰×#Ñ#ð<ô	
ô
 3°4·>±>ÓBˆ�	r   c                 ó¶  ^ • [         R                  " S5      nUR                  S5        [        R                  " 5       T R
                  l        T R
                  R                  U5        T R                  T R
                  R                  [        R                  5        T R
                  R                  R                  U 4S j5        T R
                  R                  $ )z<
Test that the SASL error condition is correctly extracted.
)r   Úfailureúnot-authorizedc                 ó<   >• TR                  SU R                  5      $ )NrB   )ÚassertEqualÚ	condition)Úer   s    €r   Ú<lambda>Ú?SASLInitiatingInitializerTests.test_onFailure.<locals>.<lambda>\   s   ø€ �d×&Ñ&Ð'7¸¿¹ÔEr   )r
   ÚElementÚ
addElementr   ÚDeferredr=   Ú	_deferredÚ	onFailureÚassertFailurer   ÚSASLAuthErrorÚaddCallback)r   rA   s   ` r   Útest_onFailureÚ-SASLInitiatingInitializerTests.test_onFailureR   s•   ø€ ô —.’.Ð!PÓQˆØ×ÑÐ+Ô,Ü#ŸnšnÓ.ˆ�	‰	ÔØ�	‰	×Ñ˜GÔ$Ø×Ñ˜4Ÿ9™9×.Ñ.´×0BÑ0BÔCØ�	‰	×Ñ×'Ñ'ÜEô	
ð �y‰y×"Ñ"Ð"r   c                 óP  • SU R                   l        U R                   R                  5         U R                  S   nU R	                  [
        UR                  5        U R	                  SUR                  5        U R	                  SUS   5        U R	                  S[        U5      5        g)z8
Test starting authentication with an initial response.
s   dummyr   Úauthr   r.   zZHVtbXk=N)	r=   r   Ústartr5   rD   ÚNS_XMPP_SASLÚurir'   Ústr©r   rT   s     r   Útest_sendAuthInitialResponseÚ;SASLInitiatingInitializerTests.test_sendAuthInitialResponse`   s|   € ð %-ˆ�	‰	Ô!Ø�	‰	�‰ÔØ�{‰{˜1‰~ˆØ×Ñœ t§x¡xÔ0Ø×Ñ˜ §¡Ô+Ø×Ñ˜ $ {Ñ"3Ô4Ø×Ñ˜¤S¨£YÕ/r   c                 ó®   • SU R                   l        U R                   R                  5         U R                  S   nU R	                  S[        U5      5        g)z;
Test starting authentication without an initial response.
Nr   Ú ©r=   r   rU   r5   rD   rX   rY   s     r   Útest_sendAuthNoInitialResponseÚ=SASLInitiatingInitializerTests.test_sendAuthNoInitialResponsel   s?   € ð %)ˆ�	‰	Ô!Ø�	‰	�‰ÔØ�{‰{˜1‰~ˆØ×Ñ˜œS ›YÕ'r   c                 ó®   • SU R                   l        U R                   R                  5         U R                  S   nU R	                  S[        U5      5        g)zC
Test starting authentication where the initial response is empty.
r   r   Ú=Nr^   rY   s     r   Ú!test_sendAuthEmptyInitialResponseÚ@SASLInitiatingInitializerTests.test_sendAuthEmptyInitialResponseu   s?   € ð %(ˆ�	‰	Ô!Ø�	‰	�‰ÔØ�{‰{˜1‰~ˆØ×Ñ˜œc $›iÕ(r   c                 ó`  • U R                   R                  5       n[        R                  " [        S45      nUR                  S5        U R                   R                  U5        U R                  SU R                   R                  R                  5        U R                   R                  S5        U$ )z%
Test receiving a challenge message.
r   ÚbXkgY2hhbGxlbmdls   my challengeN)r=   rU   r
   rI   rV   Ú
addContentÚonChallengerD   r.   r   Ú	onSuccess©r   Údr   s      r   Útest_onChallengeÚ/SASLInitiatingInitializerTests.test_onChallenge~   s   € ð �I‰I�O‰OÓˆÜ—N’N¤L°+Ð#>Ó?ˆ	Ø×ÑÐ/Ô0Ø�	‰	×Ñ˜iÔ(Ø×Ñ˜¨$¯)©)×*=Ñ*=×*GÑ*GÔHØ�	‰	×Ñ˜DÔ!Øˆr   c                 óŠ  • U R                   R                  5       n[        R                  " [        S45      nUR                  S5        SU R                   R                  l        U R                   R                  U5        U R                  S   nU R                  S[        U5      5        U R                   R                  S5        U$ )zC
A non-empty response gets encoded and included as character data.
r   rf   s   responseé   zcmVzcG9uc2U=N)r=   rU   r
   rI   rV   rg   r.   r   rh   r5   rD   rX   ri   )r   rk   r   r   s       r   Útest_onChallengeResponseÚ7SASLInitiatingInitializerTests.test_onChallengeResponseŠ   s’   € ð �I‰I�O‰OÓˆÜ—N’N¤L°+Ð#>Ó?ˆ	Ø×ÑÐ/Ô0Ø'2ˆ�	‰	×ÑÔ$Ø�	‰	×Ñ˜iÔ(Ø—;‘;˜q‘>ˆØ×Ñ˜¬¨X«Ô7Ø�	‰	×Ñ˜DÔ!Øˆr   c                 ó>  • U R                   R                  5       n[        R                  " [        S45      nU R                   R                  U5        U R                  SU R                   R                  R                  5        U R                   R                  S5        U$ )z,
Test receiving an empty challenge message.
r   r   N)
r=   rU   r
   rI   rV   rh   rD   r.   r   ri   rj   s      r   Útest_onChallengeEmptyÚ4SASLInitiatingInitializerTests.test_onChallengeEmpty˜   sp   € ð �I‰I�O‰OÓˆÜ—N’N¤L°+Ð#>Ó?ˆ	Ø�	‰	×Ñ˜iÔ(Ø×Ñ˜˜dŸi™i×1Ñ1×;Ñ;Ô<Ø�	‰	×Ñ˜DÔ!Øˆr   c                 ó
  • U R                   R                  5       n[        R                  " [        S45      nUR                  S5        U R                   R                  U5        U R                  U[        R                  5        U$ )z:
Test receiving a challenge message with illegal padding.
r   zbXkg=Y2hhbGxlbmdl©
r=   rU   r
   rI   rV   rg   rh   rN   r   ÚSASLIncorrectEncodingErrorrj   s      r   Útest_onChallengeIllegalPaddingÚ=SASLInitiatingInitializerTests.test_onChallengeIllegalPadding£   óc   € ð �I‰I�O‰OÓˆÜ—N’N¤L°+Ð#>Ó?ˆ	Ø×ÑÐ0Ô1Ø�	‰	×Ñ˜iÔ(Ø×Ñ˜1œd×=Ñ=Ô>Øˆr   c                 ó
  • U R                   R                  5       n[        R                  " [        S45      nUR                  S5        U R                   R                  U5        U R                  U[        R                  5        U$ )z=
Test receiving a challenge message with illegal characters.
r   zbXkg*Y2hhbGxlbmdlrv   rj   s      r   Ú!test_onChallengeIllegalCharactersÚ@SASLInitiatingInitializerTests.test_onChallengeIllegalCharacters®   rz   r   c                 ó
  • U R                   R                  5       n[        R                  " [        S45      nUR                  S5        U R                   R                  U5        U R                  U[        R                  5        U$ )z/
Test receiving a malformed challenge message.
r   Úarv   rj   s      r   Útest_onChallengeMalformedÚ8SASLInitiatingInitializerTests.test_onChallengeMalformed¹   sb   € ð �I‰I�O‰OÓˆÜ—N’N¤L°+Ð#>Ó?ˆ	Ø×Ñ˜SÔ!Ø�	‰	×Ñ˜iÔ(Ø×Ñ˜1œd×=Ñ=Ô>Øˆr   ©r7   r=   r5   r	   N)r"   r#   r$   r%   r&   r>   rQ   rZ   r_   rc   rl   rp   rs   rx   r|   r€   r(   r)   r   r   r2   r2   ?   s?   † ñòCò#ò
0ò(ò)ò
òò	ò	ò	õ	r   r2   c                   óB   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)Ú*SASLInitiatingInitializerSetMechanismTestséÅ   z:
Test for L{sasl.SASLInitiatingInitializer.setMechanism}.
c                 óŽ  • / U l         [        R                  " 5       U l        [        R                  " U R                  5      U l        U R                   R
                  U R                  l        U R                  R                  5         U R                  R                  S5        [        R                  " U R                  5      U l        g )Nz�<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='12345' version='1.0'>)r5   r	   r6   r7   r8   r9   r:   r;   r<   r   ÚSASLInitiatingInitializerr=   r   s    r   r>   Ú0SASLInitiatingInitializerSetMechanismTests.setUpÊ   s‡   € ØˆŒä&×4Ò4Ó6ˆÔÜ"×,Ò,¨T×-?Ñ-?Ó@ˆŒØ"Ÿk™k×0Ñ0ˆ�‰ÔØ�‰×%Ñ%Ô'Ø�‰×#Ñ#ð;ô	
ô ×2Ò2°4·>±>ÓBˆ�	r   c                 ó*  • [         R                  " [        S45      nUR                  SUS9  X R                  R
                  UR                  UR                  4'   U R                  R                  5         U R                  R                  R                  $ )zH
Set up the XML Stream to have a SASL feature with the given mechanism.
Ú
mechanismsr.   )Úcontent)r
   rI   rV   rJ   r	   ÚfeaturesrW   r'   r=   r/   r.   )r   r'   Úfeatures      r   Ú_setMechanismÚ8SASLInitiatingInitializerSetMechanismTests._setMechanismÙ   so   € ô —.’.¤,°Ð!=Ó>ˆØ×Ñ˜;°ÐÑ5Ø?F�‰×Ñ §¡¨g¯l©lÐ ;Ñ<à�	‰	×ÑÔ Ø�y‰y×"Ñ"×'Ñ'Ð'r   c                 ó´   • [         R                  " S5      U R                  l         SU R                  l        SnU R	                  XR                  U5      5        g)z9
Test setting ANONYMOUS as the authentication mechanism.
úexample.comNÚ	ANONYMOUS©r   ÚJIDr7   ÚpasswordrD   rŽ   ©r   r'   s     r   Útest_anonymousÚ9SASLInitiatingInitializerSetMechanismTests.test_anonymousä   sG   € ô "%§¢¨Ó!7ˆ×ÑÔØ&*ˆ×ÑÔ#Øˆà×Ñ˜×1Ñ1°$Ó7Õ8r   c                 ó´   • [         R                  " S5      U R                  l         SU R                  l        SnU R	                  XR                  U5      5        g)z5
Test setting PLAIN as the authentication mechanism.
útest@example.comÚsecretÚPLAINNr“   r–   s     r   Ú
test_plainÚ5SASLInitiatingInitializerSetMechanismTests.test_plainî   sH   € ô "%§¢Ð);Ó!<ˆ×ÑÔØ&.ˆ×ÑÔ#Øˆà×Ñ˜×1Ñ1°$Ó7Õ8r   c                 ó´   • [         R                  " S5      U R                  l         SU R                  l        SnU R	                  XR                  U5      5        g)z:
Test setting DIGEST-MD5 as the authentication mechanism.
rš   r›   z
DIGEST-MD5Nr“   r–   s     r   Útest_digestÚ6SASLInitiatingInitializerSetMechanismTests.test_digestø   sH   € ô "%§¢Ð);Ó!<ˆ×ÑÔØ&.ˆ×ÑÔ#Øˆà×Ñ˜×1Ñ1°$Ó7Õ8r   c                 óÆ   • [         R                  " S5      U R                  l         SU R                  l        U R	                  [
        R                  U R                  S5        g)z;
Test using an unacceptable SASL authentication mechanism.
rš   r›   ÚSOMETHING_UNACCEPTABLEN©r   r”   r7   r•   ÚassertRaisesr   ÚSASLNoAcceptableMechanismrŽ   r   s    r   Útest_notAcceptableÚ=SASLInitiatingInitializerSetMechanismTests.test_notAcceptable  sL   € ô
 "%§¢Ð);Ó!<ˆ×ÑÔØ&.ˆ×ÑÔ#à×ÑÜ×*Ñ*¨D×,>Ñ,>Ð@Xõ	
r   c                 óÆ   • [         R                  " S5      U R                  l         SU R                  l        U R	                  [
        R                  U R                  S5        g)zG
Test using an unacceptable SASL authentication mechanism with no JID.
r‘   r›   r£   Nr¤   r   s    r   Útest_notAcceptableWithoutUserÚHSASLInitiatingInitializerSetMechanismTests.test_notAcceptableWithoutUser  sK   € ô "%§¢¨Ó!7ˆ×ÑÔØ&.ˆ×ÑÔ#à×ÑÜ×*Ñ*¨D×,>Ñ,>Ð@Xõ	
r   r‚   N)r"   r#   r$   r%   r&   r>   rŽ   r—   r�   r    r§   rª   r(   r)   r   r   r„   r„   Å   s+   † ñòCò	(ò9ò9ò9ò

õ	
r   r„   N)Úzope.interfacer   Útwisted.internetr   Útwisted.trialr   Útwisted.words.protocols.jabberr   r   r   r	   Útwisted.words.xishr
   rV   ÚISASLMechanismr   r‡   r+   ÚTestCaser2   r„   r)   r   r   Ú<module>r³      s   ðõ
 'å "Ý "ß PÓ PÝ %à1€ñ ˆ_×+Ñ+Ó,÷ð ó -ðô:B T×%CÑ%Cô Bô$C X×%6Ñ%6ô CôLR
°×1BÑ1Bõ R
r   