o
    èó·iy&  ã                   @   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é   é   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 ])}t |d |d |d |d d¡}|  t|ƒt¡ |  t |¡ d¡|d ¡ qd S )Nr   r   r	   é   Úsha1Úasciié   )	ÚPBKDF2_TEST_VECTORSr   Zpbkdf2ÚassertEqualÚtypeÚbytesÚbinasciiÚhexlifyÚdecode)ÚselfZtvÚresult© r   úgC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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   Z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+   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 u¡ 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 ]}t ||¡}|  t|ƒt¡ |  | 	|¡d u¡ qd S )Nr4   r5   iöÿÿÿr,   )
r6   r7   Úranger   r8   r   r   r$   r9   r:   )r   r;   r'   Úoffsetr<   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   r"   )Né   ©r   Zgenerate_wcsr   r   r   r%   r&   r   r   r    Útest_generate_wcs_defaultp   r)   z-TestWampAuthHelpers.test_generate_wcs_defaultc                 C   s8   dD ]}t  |¡}|  t|ƒt¡ |  t|ƒ|¡ qd S )Nr*   rH   r1   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 )NrA   )r   r	   r   F)Úensure_asciirB   s,   1njQtmmeYO41N5EWEzD2kAjjEKRZ5kPZt/TzpYXOzR0=)ÚjsonÚdumpsrC   r   Zcompute_wcsr   r   r   )r   r'   Ú	challenger<   r   r   r    Útest_compute_wcs{   s
   z$TestWampAuthHelpers.test_compute_wcsN)Ú__name__Ú
__module__Ú__qualname__r!   r(   r3   r=   r@   rF   rI   rJ   rO   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@f6991a28c75f43751e0d75499fd7b8649f659118ddc1d61cee5883af547d15f5rT   rU   r0   )r   rW   r   Z_hash_pbkdf2_secretr   )r   rZ   r[   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Ú
argon2id13rU   r   r   rV   Úp4ssw0rdÚusername©ÚnonceÚkdfrD   Ú
iterationsÚmemoryÚpasswordZauthidrc   Z 31323334353637383930616263646566ÚscramÚ 1234567890abcdeffedcba0987654321úargon2id-13)rc   rd   rD   re   rf   s,   f5r3loERzGVSuimE+lvO0bWna2zyswBo0HrZkaaEy38=)Zscram_server_signature)r   Ú	AuthScramr   Úb2a_hexr   Z_client_noncer   Ú	authextrar   Ú	ChallengeÚon_challenger   ÚdictZ
on_welcome)r   rh   rN   Zreplyrm   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 )Nr^   r_   rU   r   r   rV   r`   ra   rb   rh   ri   rj   )rc   rd   rD   re   zrequires 'memory' parameter)r   rk   r   rl   r   rm   ÚassertRaisesÚ
ValueErrorr   rn   ro   r   ÚassertInr$   Ú	exception©r   rh   ÚctxrN   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 )Nr^   r_   rU   r   rV   r`   ra   rb   rh   ri   rj   )rc   rd   rD   re   rf   Úan_invalid_keyry   )r   rk   r   rl   rm   rr   ÚRuntimeErrorr   rn   ro   r   rt   r$   ru   rv   r   r   r    Útest_unknown_argØ   s,   ù	ú÷
zTestScram.test_unknown_argN)rP   rQ   rR   r\   r]   rq   rx   r{   r   r   r   r    rS   ƒ   s    %rS   )ZunittestZunittest.mockr   Úplatformr6   rL   r   Zautobahn.wampr   r   r   Úpython_implementationÚextendZTestCaser   ZskipIfZ	HAS_ARGONrS   r   r   r   r    Ú<module>   s    ÿ<