o
    ¼>hy&  ã                   @   s¦   d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 g d¢Z
e ¡ dkr7e
 g d¢¡ G dd	„ d	e jƒZe  ej d
¡G dd„ de jƒƒZdS )é    N)ÚMock)Úauth)Útypes)	)ó   passwordó   salté   é   Ú(0c60c80f961f0e71f3a9b524af6012062fe037a6)r   r   é   r   Ú(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957)r   ó   ATHENA.MIT.EDUraeburnr   é   Ú cdedb5281bb2f801565a1122b2563515)r   r   r   é    Ú@cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837)r   r   r
   r   Ú 01dbee7f4a9e243e988b62c73cda935d)r   r   r
   r   Ú@01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86)r   r   é°  r   Ú@5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13)s@   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase equals block sizer   r   Ú@139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1)sA   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase exceeds block sizer   r   Ú@9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82aÚPyPy))r   r   é   r   Ú(4b007901b765489abead49d926f721d065a429c1)s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsaltr   é   Ú23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038)s	   pass words   sa ltr   r   Ú 56fa6aa75548099dcc37d7f03425e0c3c                   @   sT   e 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 )ÚTestWampAuthHelpersc                 C   s\   t D ])}t |d |d |d |d d¡}|  t|ƒt¡ |  t |¡ d¡|d ¡ qd S )Nr   r   r
   é   Úsha1Úasciié   )	ÚPBKDF2_TEST_VECTORSr   Úpbkdf2ÚassertEqualÚtypeÚbytesÚbinasciiÚhexlifyÚdecode)ÚselfÚtvÚresult© r-   ú/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/wamp/test/test_wamp_auth.pyÚtest_pbkdf2I   s
   "ýzTestWampAuthHelpers.test_pbkdf2c                 C   ó,   t  ¡ }|  t|ƒt¡ |  t|ƒd¡ d S )Ng      0@©r   Úgenerate_totp_secretr$   r%   ÚstrÚlen©r*   Úsecretr-   r-   r.   Ú!test_generate_totp_secret_defaultO   ó   z5TestWampAuthHelpers.test_generate_totp_secret_defaultc                 C   s@   dD ]}t  |¡}|  t|ƒt¡ |  t|ƒ|d d ¡ qd S )N©é   é
   r   é   é(   é2   é   r:   r1   ©r*   Úlengthr6   r-   r-   r.   Ú test_generate_totp_secret_lengthT   s
   
ýz4TestWampAuthHelpers.test_generate_totp_secret_lengthc                 C   s@   t  d¡}d}t |¡}|  t|ƒt¡ |  | |¡d u¡ d S )Nú\d\d\d\d\d\dÚMFRGGZDFMZTWQ2LK)	ÚreÚcompiler   Úcompute_totpr$   r%   r3   Ú
assertTrueÚmatch)r*   Úpatr6   Ú	signaturer-   r-   r.   Útest_compute_totpZ   s
   

z%TestWampAuthHelpers.test_compute_totpc                 C   sR   t  d¡}d}tddƒD ]}t ||¡}|  t|ƒt¡ |  | 	|¡d u¡ qd S )NrC   rD   iöÿÿÿr;   )
rE   rF   Úranger   rG   r$   r%   r3   rH   rI   )r*   rJ   r6   ÚoffsetrK   r-   r-   r.   Útest_compute_totp_offseta   s   
ýz,TestWampAuthHelpers.test_compute_totp_offsetc                 C   s@   d}d}t  | d¡| d¡¡}|  t|ƒt¡ |  |d¡ d S )NÚL3L1YUE8TxlwÚsalt123Úutf8s,   qzcdsr9uu/L5hnss3kjNTRe490ETgA70ZBaB5rvnJ5Y=)r   Ú
derive_keyÚencoder$   r%   r&   )r*   r6   ÚsaltÚkeyr-   r-   r.   Útest_derive_keyi   s
   z#TestWampAuthHelpers.test_derive_keyc                 C   r0   )Né   ©r   Úgenerate_wcsr$   r%   r&   r4   r5   r-   r-   r.   Útest_generate_wcs_defaultp   r8   z-TestWampAuthHelpers.test_generate_wcs_defaultc                 C   s8   dD ]}t  |¡}|  t|ƒt¡ |  t|ƒ|¡ qd S )Nr9   rY   r@   r-   r-   r.   Útest_generate_wcs_lengthu   s
   
ýz,TestWampAuthHelpers.test_generate_wcs_lengthc                 C   sN   d}t jg d¢dd d¡}t | d¡|¡}|  t|ƒt¡ |  |d¡ d S )NrP   )r   r
   r   F)Úensure_asciirR   s,   1njQtmmeYO41N5EWEzD2kAjjEKRZ5kPZt/TzpYXOzR0=)ÚjsonÚdumpsrT   r   Úcompute_wcsr$   r%   r&   )r*   r6   Ú	challengerK   r-   r-   r.   Útest_compute_wcs{   s
   z$TestWampAuthHelpers.test_compute_wcsN)Ú__name__Ú
__module__Ú__qualname__r/   r7   rB   rL   rO   rW   r[   r\   rb   r-   r-   r-   r.   r   G   s    r   zno Argon2 libraryc                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	TestScramc                 C   s>   t  d¡}t dt  d¡dd¡}t  |d ¡}|  ||¡ d S )NÚ@ee4a8acf9d5958354fb79a95ae20692d05e42591ba49fae85eb6700e8b0ed293ó   p4ssw0rdó   1234567890abcdefr   é   s   ==
)r'   Ú	unhexlifyr   Ú_hash_argon2id13_secretÚ
b2a_base64Ú
a2b_base64r$   )r*   ÚexpectedÚraw_hashÚdecoded_hashr-   r-   r.   Útest_argon2id_static†   s   
üzTestScram.test_argon2id_staticc                 C   s(   t  d¡}t ddd¡}|  ||¡ d S )NÚ@f6991a28c75f43751e0d75499fd7b8649f659118ddc1d61cee5883af547d15f5rh   ri   r?   )r'   rk   r   Ú_hash_pbkdf2_secretr$   )r*   ro   rp   r-   r-   r.   Útest_pbkdf2_static“   s   
zTestScram.test_pbkdf2_staticc              	   C   s¢   t jddt d¡ d¡ddddd	}t d¡ d¡|_|  d
di|j¡ t 	dddt d¡ d¡dddœ¡}| 
tƒ |¡}|  d|¡ tdd}| tƒ |¡ d S )NÚ1234567890abcdefÚ
argon2id13ri   r    r   rj   Úp4ssw0rdÚusername©ÚnonceÚkdfrU   Ú
iterationsÚmemoryÚpasswordÚauthidr{   Ú 31323334353637383930616263646566ÚscramÚ 1234567890abcdeffedcba0987654321úargon2id-13)r{   r|   rU   r}   r~   s,   f5r3loERzGVSuimE+lvO0bWna2zyswBo0HrZkaaEy38=)Úscram_server_signature)r   Ú	AuthScramr'   Úb2a_hexr)   Ú_client_noncer$   Ú	authextrar   Ú	ChallengeÚon_challenger   ÚdictÚ
on_welcome)r*   r‚   ra   Úreplyr‰   r-   r-   r.   Ú
test_basic™   s<   ùþûþÿzTestScram.test_basicc              	   C   s”   t jddt d¡ d¡ddddd	}|j |  t¡}t 	d
ddt d¡ddœ¡}| 
tƒ |¡ W d   ƒ n1 s:w   Y  |  dt|jƒ¡ d S )Nrv   rw   ri   r    r   rj   rx   ry   rz   r‚   rƒ   r„   )r{   r|   rU   r}   zrequires 'memory' parameter)r   r†   r'   r‡   r)   r‰   ÚassertRaisesÚ
ValueErrorr   rŠ   r‹   r   ÚassertInr3   Ú	exception©r*   r‚   Úctxra   r-   r-   r.   Útest_no_memory_arg¾   s.   ù	üø	þzTestScram.test_no_memory_argc                 C   s’   t jddt d¡ddddd}|j |  t¡}t d	d
dt d¡ddd dœ¡}| 	t
ƒ |¡ W d   ƒ n1 s9w   Y  |  dt|jƒ¡ d S )Nrv   rw   ri   r   rj   rx   ry   rz   r‚   rƒ   r„   )r{   r|   rU   r}   r~   Úan_invalid_keyr—   )r   r†   r'   r‡   r‰   r   ÚRuntimeErrorr   rŠ   r‹   r   r’   r3   r“   r”   r-   r-   r.   Útest_unknown_argØ   s,   ù	ú÷
zTestScram.test_unknown_argN)rc   rd   re   rr   ru   r   r–   r™   r-   r-   r-   r.   rf   ƒ   s    %rf   )ÚunittestÚunittest.mockr   ÚplatformrE   r^   r'   Úautobahn.wampr   r   r"   Úpython_implementationÚextendÚTestCaser   ÚskipIfÚ	HAS_ARGONrf   r-   r-   r-   r.   Ú<module>   s    ÿ<