U
    •uÄcy&  ã                	   @   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	 ddddd	d
dddg	Z
e ¡ dkr~e
 dddg¡ 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é   é   Z(0c60c80f961f0e71f3a9b524af6012062fe037a6)r   r   é   r   Z(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957)r   ó   ATHENA.MIT.EDUraeburnr   é   Z cdedb5281bb2f801565a1122b2563515)r   r
   r   é    Z@cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837)r   r
   r	   r   Z 01dbee7f4a9e243e988b62c73cda935d)r   r
   r	   r   Z@01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86)r   r
   é°  r   Z@5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13)s@   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase equals block sizer   r   Z@139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1)sA   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase exceeds block sizer   r   Z@9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82aÚPyPy)r   r   é   r   Z(4b007901b765489abead49d926f721d065a429c1)s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsaltr   é   Z23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038)s	   pass words   sa ltr   r   Z 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 ]R}t |d |d |d |d d¡}|  t|ƒt¡ |  t |¡ d¡|d ¡ qd S )Nr   r   r	   é   Zsha1Úasciié   )	ÚPBKDF2_TEST_VECTORSr   Zpbkdf2ÚassertEqualÚtypeÚbytesÚbinasciiÚhexlifyÚdecode)ÚselfZtvÚresult© r   újc:\users\psant\downloads\hotstarbackend\school\venv\Lib\site-packages\autobahn\wamp\test\test_wamp_auth.pyÚtest_pbkdf2I   s    "zTestWampAuthHelpers.test_pbkdf2c                 C   s,   t  ¡ }|  t|ƒt¡ |  t|ƒd¡ d S )Ng      0@©r   Zgenerate_totp_secretr   r   ÚstrÚlen©r   Úsecretr   r   r   Ú!test_generate_totp_secret_defaultO   s    z5TestWampAuthHelpers.test_generate_totp_secret_defaultc                 C   s@   dD ]6}t  |¡}|  t|ƒt¡ |  t|ƒ|d d ¡ qd S )N©é   é
   r   é   é(   é2   é   r(   r!   ©r   Úlengthr%   r   r   r   Ú test_generate_totp_secret_lengthT   s    
z4TestWampAuthHelpers.test_generate_totp_secret_lengthc                 C   s@   t  d¡}d}t |¡}|  t|ƒt¡ |  | |¡d k	¡ d S )Nú\d\d\d\d\d\dÚMFRGGZDFMZTWQ2LK)	ÚreÚcompiler   Úcompute_totpr   r   r"   Ú
assertTrueÚmatch)r   Úpatr%   Ú	signaturer   r   r   Útest_compute_totpZ   s
    

z%TestWampAuthHelpers.test_compute_totpc                 C   sR   t  d¡}d}tddƒD ]4}t ||¡}|  t|ƒt¡ |  | 	|¡d k	¡ qd S )Nr1   r2   iöÿÿÿr)   )
r3   r4   Úranger   r5   r   r   r"   r6   r7   )r   r8   r%   Úoffsetr9   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ÚL3L1YUE8TxlwZsalt123Úutf8s,   qzcdsr9uu/L5hnss3kjNTRe490ETgA70ZBaB5rvnJ5Y=)r   Z
derive_keyÚencoder   r   r   )r   r%   ÚsaltÚkeyr   r   r   Útest_derive_keyi   s
    z#TestWampAuthHelpers.test_derive_keyc                 C   s,   t  ¡ }|  t|ƒt¡ |  t|ƒd¡ d S )Né   ©r   Zgenerate_wcsr   r   r   r#   r$   r   r   r   Útest_generate_wcs_defaultp   s    z-TestWampAuthHelpers.test_generate_wcs_defaultc                 C   s8   dD ].}t  |¡}|  t|ƒt¡ |  t|ƒ|¡ qd S )Nr'   rE   r.   r   r   r   Útest_generate_wcs_lengthu   s    
z,TestWampAuthHelpers.test_generate_wcs_lengthc                 C   sP   d}t jdddgdd� d¡}t | d¡|¡}|  t|ƒt¡ |  |d¡ d S )	Nr>   r   r	   r   F)Úensure_asciir?   s,   1njQtmmeYO41N5EWEzD2kAjjEKRZ5kPZt/TzpYXOzR0=)ÚjsonÚdumpsr@   r   Zcompute_wcsr   r   r   )r   r%   Ú	challenger9   r   r   r   Útest_compute_wcs{   s
    z$TestWampAuthHelpers.test_compute_wcsN)Ú__name__Ú
__module__Ú__qualname__r    r&   r0   r:   r=   rC   rF   rG   rL   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 )NZ@ee4a8acf9d5958354fb79a95ae20692d05e42591ba49fae85eb6700e8b0ed293ó   p4ssw0rdó   1234567890abcdefr   é   s   ==
)r   Ú	unhexlifyr   Z_hash_argon2id13_secretÚ
b2a_base64Ú
a2b_base64r   )r   ÚexpectedÚraw_hashZdecoded_hashr   r   r   Útest_argon2id_static†   s    
üzTestScram.test_argon2id_staticc                 C   s(   t  d¡}t ddd¡}|  ||¡ d S )NZ@f6991a28c75f43751e0d75499fd7b8649f659118ddc1d61cee5883af547d15f5rQ   rR   r-   )r   rT   r   Z_hash_pbkdf2_secretr   )r   rW   rX   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Ú
argon2id13rR   r   r   rS   Úp4ssw0rdÚusername©ÚnonceÚkdfrA   Ú
iterationsÚmemoryÚpasswordZauthidr`   Z 31323334353637383930616263646566ÚscramÚ 1234567890abcdeffedcba0987654321úargon2id-13)r`   ra   rA   rb   rc   s,   f5r3loERzGVSuimE+lvO0bWna2zyswBo0HrZkaaEy38=)Zscram_server_signature)r   Ú	AuthScramr   Úb2a_hexr   Z_client_noncer   Ú	authextrar   Ú	ChallengeÚon_challenger   ÚdictZ
on_welcome)r   re   rK   Zreplyrj   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¡�0}t 	d
ddt d¡ddœ¡}| 
tƒ |¡ W 5 Q R X |  dt|jƒ¡ d S )Nr[   r\   rR   r   r   rS   r]   r^   r_   re   rf   rg   )r`   ra   rA   rb   zrequires 'memory' parameter)r   rh   r   ri   r   rj   ÚassertRaisesÚ
ValueErrorr   rk   rl   r   ÚassertInr"   Ú	exception©r   re   ÚctxrK   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¡�4}t d	d
dt d¡ddd dœ¡}| 	t
ƒ |¡ W 5 Q R X |  dt|jƒ¡ d S )Nr[   r\   rR   r   rS   r]   r^   r_   re   rf   rg   )r`   ra   rA   rb   rc   Úan_invalid_keyrv   )r   rh   r   ri   rj   ro   ÚRuntimeErrorr   rk   rl   r   rq   r"   rr   rs   r   r   r   Útest_unknown_argØ   s*    ù	úzTestScram.test_unknown_argN)rM   rN   rO   rY   rZ   rn   ru   rx   r   r   r   r   rP   ƒ   s
   %rP   )ÚunittestZunittest.mockr   Úplatformr3   rI   r   Zautobahn.wampr   r   r   Úpython_implementationÚextendÚTestCaser   ÚskipIfZ	HAS_ARGONrP   r   r   r   r   Ú<module>   s6   ôüÿ<