o
    @»Biþ&  ã                   @   sº   d dl mZ d dlZd dl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 d dl
mZ g d¢Ze ¡ dkrAe g d¢¡ G d	d
„ d
ejƒZe ej d¡G dd„ dejƒƒZdS )é    )Úabsolute_importN)Ú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/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/wamp/test/test_auth.pyÚtest_pbkdf2L   s
   "ýzTestWampAuthHelpers.test_pbkdf2c                 C   s.   t  ¡ }|  t|ƒtj¡ |  t|ƒd¡ d S )Ng      0@©r   Úgenerate_totp_secretr%   r&   ÚsixÚ	text_typeÚlen©r+   Úsecretr.   r.   r/   Ú!test_generate_totp_secret_defaultR   s   z5TestWampAuthHelpers.test_generate_totp_secret_defaultc                 C   sB   dD ]}t  |¡}|  t|ƒtj¡ |  t|ƒ|d d ¡ qd S )N©é   é
   r	   é   é(   é2   é   r:   r1   ©r+   Úlengthr7   r.   r.   r/   Ú test_generate_totp_secret_lengthW   s
   
ýz4TestWampAuthHelpers.test_generate_totp_secret_lengthc                 C   sB   t  d¡}d}t |¡}|  t|ƒtj¡ |  | 	|¡d u¡ d S )Nú\d\d\d\d\d\dÚMFRGGZDFMZTWQ2LK)
ÚreÚcompiler   Úcompute_totpr%   r&   r3   r4   Ú
assertTrueÚmatch)r+   Úpatr7   Ú	signaturer.   r.   r/   Útest_compute_totp]   s
   

z%TestWampAuthHelpers.test_compute_totpc                 C   sT   t  d¡}d}tddƒD ]}t ||¡}|  t|ƒtj¡ |  	| 
|¡d u¡ qd S )NrC   rD   iöÿÿÿr;   )rE   rF   Úranger   rG   r%   r&   r3   r4   rH   rI   )r+   rJ   r7   ÚoffsetrK   r.   r.   r/   Útest_compute_totp_offsetd   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+   r7   ÚsaltÚkeyr.   r.   r/   Útest_derive_keyl   s
   z#TestWampAuthHelpers.test_derive_keyc                 C   s,   t  ¡ }|  t|ƒt¡ |  t|ƒd¡ d S )Né   ©r   Úgenerate_wcsr%   r&   r'   r5   r6   r.   r.   r/   Útest_generate_wcs_defaults   s   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_lengthx   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+   r7   Ú	challengerK   r.   r.   r/   Útest_compute_wcs~   s
   z$TestWampAuthHelpers.test_compute_wcsN)Ú__name__Ú
__module__Ú__qualname__r0   r8   rB   rL   rO   rW   r[   r\   rb   r.   r.   r.   r/   r   J   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   ÚassertInÚstrÚ	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’   r“   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   )Ú
__future__r   ÚunittestÚplatformr3   rE   r^   r(   Úmockr   Úautobahn.wampr   r   r#   Úpython_implementationÚextendÚTestCaser   ÚskipIfÚ	HAS_ARGONrf   r.   r.   r.   r/   Ú<module>   s$   ÿ<