U
    h5Y                     @   s  d Z ddlZeeZddlZddlZddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZ dd Zd	Zeed
d	dddddeed
ddddddeed
ddddddeed
ddddddeed
dd
ddddeedd	dddddeedd	dddddeed
d	dd dd!d"eed
d	ddd#d$d%g	Zd&Zeeed
d	dddd'd(eed
ddddd)d*eed
ddddd+d,eed
ddddd-d.eed
dd
ddd/d0eedd	dddd1d2eedd	dddd3d4eed
d	dd dd5d6eed
d	ddd#d7d8g	 d&Zeeed
d	dddd9d:eed
ddddd;d<eed
ddddd=d>eed
dd
ddd?d@eedd	ddddAdBeedd	ddddCdDeed
d	dd ddEdFeed
d	ddd#dGdHg G dIdJ dJeZG dKdL dLedMZG dNdO dOedPZdS )QzFpasslib.tests.test_handlers_argon2 - tests for passlib hash algorithms    N)hash)unicode)HandlerCase	TEST_MODE)UPASS_TABLEPASS_TABLE_UTF8c                 C   s   t | ||d|> |||||d	S )N   )	versionroundslogMmemory_costparallelismsecretsalt
hex_digestr   )dict)r	   tr   pr   r   r   r    r   H./venv/lib/python3.8/site-packages/passlib/tests/test_handlers_argon2.pyhashtest   s       r         r   passwordZsomesaltZ@f6c4db4a54e2a370627aff3db6176b94a2a209a62c8e36152711802f7b30c694zP$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ   Z@9690ec55d28d3ed32562f2e73ea62b02b018757643a2ae6e79528459de8106e9zR$argon2i$m=1048576,t=2,p=1$c29tZXNhbHQ$lpDsVdKNPtMlYvLnPqYrArAYdXZDoq5ueVKEWd6BBuk   Z@3e689aaa3d28a77cf2bc72a51ac53166761751182f1ee292e3f677a7da4c2467zQ$argon2i$m=262144,t=2,p=1$c29tZXNhbHQ$Pmiaqj0op3zyvHKlGsUxZnYXURgvHuKS4/Z3p9pMJGc   Z@fd4dd83d762c49bdeaf57c47bdcd0c2f1babf863fdeb490df63ede9975fccf06zN$argon2i$m=256,t=2,p=1$c29tZXNhbHQ$/U3YPXYsSb3q9XxHvc0MLxur+GP960kN9j7emXX8zwYZ@b6c11560a6a9d61eac706b79a2f97d68b4463aa3ad87e00c07e2b01e90c564fbzN$argon2i$m=256,t=2,p=2$c29tZXNhbHQ$tsEVYKap1h6scGt5ovl9aLRGOqOth+AMB+KwHpDFZPsZ@81630552b8f3b1f48cdb1992c4c678643d490b2b5eb4ff6c4b3438b5621724b2zP$argon2i$m=65536,t=1,p=1$c29tZXNhbHQ$gWMFUrjzsfSM2xmSxMZ4ZD1JCytetP9sSzQ4tWIXJLI   Z@f212f01615e6eb5d74734dc3ef40ade2d51d052468d8c69440a3a1f2c1c2847bzP$argon2i$m=65536,t=4,p=1$c29tZXNhbHQ$8hLwFhXm6110c03D70Ct4tUdBSRo2MaUQKOh8sHChHsZdifferentpasswordZ@e9c902074b6754531a3a0be519e5baf404b30ce69b3f01ac3bf21229960109a3zP$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ$6ckCB0tnVFMaOgvlGeW69ASzDOabPwGsO/ISKZYBCaMZdiffsaltZ@79a103b90fe8aef8570cb31fc8b22259778916f8336b7bdac3892569d4f1c497zP$argon2i$m=65536,t=2,p=1$ZGlmZnNhbHQ$eaEDuQ/orvhXDLMfyLIiWXeJFvgza3vaw4kladTxxJc   Z@c1628832147d9720c5bd1cfd61367078729f6dfb6f8fea9ff98158e0d7816ed0zU$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtAZ@d1587aca0922c3b5d6a83edab31bee3c4ebaef342ed6127a55d19b2351ad1f41zW$argon2i$v=19$m=1048576,t=2,p=1$c29tZXNhbHQ$0Vh6ygkiw7XWqD7asxvuPE667zQu1hJ6VdGbI1GtH0EZ@296dbae80b807cdceaad44ae741b506f14db0959267b183b118f9b24229bc7cbzV$argon2i$v=19$m=262144,t=2,p=1$c29tZXNhbHQ$KW266AuAfNzqrUSudBtQbxTbCVkmexg7EY+bJCKbx8sZ@89e9029f4637b295beb027056a7336c414fadd43f6b208645281cb214a56452fzS$argon2i$v=19$m=256,t=2,p=1$c29tZXNhbHQ$iekCn0Y3spW+sCcFanM2xBT63UP2sghkUoHLIUpWRS8Z@4ff5ce2769a1d7f4c8a491df09d41a9fbe90e5eb02155a13e4c01e20cd4eab61S$argon2i$v=19$m=256,t=2,p=2$c29tZXNhbHQ$T/XOJ2mh1/TIpJHfCdQan76Q5esCFVoT5MAeIM1Oq2EZ@d168075c4d985e13ebeae560cf8b94c3b5d8a16c51916b6f4ac2da3ac11bbecfzU$argon2i$v=19$m=65536,t=1,p=1$c29tZXNhbHQ$0WgHXE2YXhPr6uVgz4uUw7XYoWxRkWtvSsLaOsEbvs8Z@aaa953d58af3706ce3df1aefd4a64a84e31d7f54175231f1285259f88174ce5bzU$argon2i$v=19$m=65536,t=4,p=1$c29tZXNhbHQ$qqlT1YrzcGzj3xrv1KZKhOMdf1QXUjHxKFJZ+IF0zlsZ@14ae8da01afea8700c2358dcef7c5358d9021282bd88663a4562f59fb74d22eezU$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ$FK6NoBr+qHAMI1jc73xTWNkCEoK9iGY6RWL1n7dNIu4Z@b0357cccfbef91f3860b0dba447b2348cbefecadaf990abfe9cc40726c521271zU$argon2i$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ$sDV8zPvvkfOGCw26RHsjSMvv7K2vmQq/6cxAcmxSEnEZ@09316115d5cf24ed5a15a31a3ba326e5cf32edc24702987c02b6566f61913cf7zV$argon2id$v=19$m=65536,t=2,p=1$c29tZXNhbHQ$CTFhFdXPJO1aFaMaO6Mm5c8y7cJHAph8ArZWb2GRPPcZ@78fe1ec91fb3aa5657d72e710854e4c3d9b9198c742f9616c2f085bed95b2e8czW$argon2id$v=19$m=262144,t=2,p=1$c29tZXNhbHQ$eP4eyR+zqlZX1y5xCFTkw9m5GYx0L5YWwvCFvtlbLowZ@9dfeb910e80bad0311fee20f9c0e2b12c17987b4cac90c2ef54d5b3021c68bfezT$argon2id$v=19$m=256,t=2,p=1$c29tZXNhbHQ$nf65EOgLrQMR/uIPnA4rEsF5h7TKyQwu9U1bMCHGi/4Z@6d093c501fd5999645e0ea3bf620d7b8be7fd2db59c20d9fff9539da2bf57037zT$argon2id$v=19$m=256,t=2,p=2$c29tZXNhbHQ$bQk8UB/VmZZF4Oo79iDXuL5/0ttZwg2f/5U52iv1cDcZ@f6a5adc1ba723dddef9b5ac1d464e180fcd9dffc9d1cbf76cca2fed795d9ca98zV$argon2id$v=19$m=65536,t=1,p=1$c29tZXNhbHQ$9qWtwbpyPd3vm1rB1GThgPzZ3/ydHL92zKL+15XZypgZ@9025d48e68ef7395cca9079da4c4ec3affb3c8911fe4f86d1a2520856f63172czV$argon2id$v=19$m=65536,t=4,p=1$c29tZXNhbHQ$kCXUjmjvc5XMqQedpMTsOv+zyJEf5PhtGiUghW9jFywZ@0b84d652cf6b0c4beaef0dfe278ba6a80df6696281d7e0d2891b817d8c458fdezV$argon2id$v=19$m=65536,t=2,p=1$c29tZXNhbHQ$C4TWUs9rDEvq7w3+J4umqA32aWKB1+DSiRuBfYxFj94Z@bdf32b05ccc42eb15d58fd19b1f856b113da1e9a5874fdcc544308565aa8141czV$argon2id$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ$vfMrBczELrFdWP0ZsfhWsRPaHppYdP3MVEMIVlqoFBwc                	       s   e Zd ZejZddedfedfddgZdddd	d
dgZ	de
dddddddfgZ fddZd- f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)d* ZG d+d, d,ejZ  ZS )._base_argon2_test)r   z>$argon2i$v=19$m=256,t=1,p=1$c29tZXNhbHQ$AJFIsNZTMKTAewB4+ETN1A)r   z>$argon2i$v=19$m=380,t=2,p=2$c29tZXNhbHQ$SrssP8n7m/12VWPM8dvNrwzI$argon2i$v=19$m=512,t=2,p=2$1sV0O4PWLtc12Ypv1f7oGw$z+yqzlKtrq3SaNfXDfIDnQ)	password z>$argon2i$v=19$m=512,t=2,p=2$c29tZXNhbHQ$Fb5+nPuLzZvtqKRwqUEtUQ)r   zL$argon2d$v=19$m=102400,t=2,p=8$g2RodLh8j8WbSdCp+lUy/A$zzAJqL/HSjm809PYQu6qkAzY$argon2qq$v=19$t=2,p=4$c29tZXNhbHQAAAAAAAAAAA$QWLzI4TY9HkL2ZTLc8g6SinwdhZewYrzz9zxCo0bkGYzX$argon2i$v=19$t=2,p=4$c29tZXNhbHQAAAAAAAAAAA$QWLzI4TY9HkL2ZTLc8g6SinwdhZewYrzz9zxCo0bkGYzi$argon2i$v=19$m=65536,t=8589934592,p=4$c29tZXNhbHQAAAAAAAAAAA$QWLzI4TY9HkL2ZTLc8g6SinwdhZewYrzz9zxCo0bkGYzd$argon2i$v=19$m=65536,t=2,p=4,q=5$c29tZXNhbHQAAAAAAAAAAA$QWLzI4TY9HkL2ZTLc8g6SinwdhZewYrzz9zxCo0bkGYzd$argon2i$v=19$t=2,m=65536,p=4,q=5$c29tZXNhbHQAAAAAAAAAAA$QWLzI4TY9HkL2ZTLc8g6SinwdhZewYrzz9zxCo0bkGYzT$argon2i$v=19$m=127,t=2,p=16$c29tZXNhbHQ$IMit9qkFULCMA/ViizL57cnTLOa5DiVM9eMwpAvPwr4z>$argon2i$v=19$m=256,t=2,p=3$c29tZXNhbHQ$AJFIsNZTMKTAewB4+ETN1Ai   r         somesalts    HS0{ xD)typer   r
   r   r   checksumc                    s   t t|   tdd d S )Nignorez.*Using argon2pure backend.*)superr    setUpWarningswarningsfilterwarningsself	__class__r   r   r*      s    z_base_argon2_test.setUpWarningsNc                    sX   | j dkr@|p| jjf |}|dd} | j| _| js8t|  S tt| j	|f|S d S )Nargon2_cffiTuse_defaults)
backendhandlerusingZ_stub_checksumr'   AssertionErrorZ	to_stringr)   r    do_stub_encrypt)r.   r5   Zsettingsr/   r   r   r8      s    


z!_base_argon2_test.do_stub_encryptc                 C   s   |  dd S )Nz!legacy 1.6 workflow not supported)skipTestr-   r   r   r   test_03_legacy_hash_workflow   s    z._base_argon2_test.test_03_legacy_hash_workflowc                 C   s   |  t| jjdd d S )Nr   z`$argon2i$v=19$m=65536,t=2,p=4,keyid=ABCD$c29tZXNhbHQ$IMit9qkFULCMA/ViizL57cnTLOa5DiVM9eMwpAvPwr4assertRaisesNotImplementedErrorr5   verifyr-   r   r   r   test_keyid_parameter   s    z&_base_argon2_test.test_keyid_parameterc                 C   s   | j }d}d}d}| jdkrD| t|jd| | |d|| n4| jdksRt| |d| | |d|| | jdkr| t|jd| | |d|| n6| jdkst| 	| j d| | |d|| d S )NzO$argon2i$v=19$m=512,t=2,p=2,data=c29tZWRhdGE$c29tZXNhbHQ$KgHyCesFyyjkVkihZ5VNFwzO$argon2i$v=19$m=512,t=2,p=2,data=c29tZWRhdGE$c29tZXNhbHQ$uEeXt1dxN1iFKGhklseW4wz>$argon2i$v=19$m=512,t=2,p=2$c29tZXNhbHQ$uEeXt1dxN1iFKGhklseW4wr1   r   
argon2pure)
r5   r4   r<   r=   r>   assertEqualZgenhashr7   
assertTrueassertFalse)r.   r5   Zsample1Zsample2Zsample3r   r   r   test_data_parameter   s     

z%_base_argon2_test.test_data_parameterc                 C   s   |  t| jjdd d S )Nstubzj$argon2i$v=19$m=65536,t=2,p=4,keyid=ABCD,data=EFGH$c29tZXNhbHQ$IMit9qkFULCMA/ViizL57cnTLOa5DiVM9eMwpAvPwr4r;   r-   r   r   r   test_keyid_and_data_parameters!  s    z0_base_argon2_test.test_keyid_and_data_parametersc                 C   s   | j }| d|jk |jD ]}| |t q| d|jk | d|jk | |j|jk |}|  d }||}|d= |f d|ji| |f | |f ddi| | j	t
|fddi| d S )Nr&   r"   dr   r3   TxXx)r5   rB   Zsetting_kwdstype_valuesZassertIsInstancer   r&   Zget_sample_hashZ	parsehashr<   
ValueError)r.   clsvaluer5   r   kwdsr   r   r   test_type_kwd'  s    


z_base_argon2_test.test_type_kwdc                 C   s   | j }|j}|jD ]}||kr q6qtd||jf dd }| }| |j| |j|d}| |j| | |j| | ||| | ||| | jt|jdd |j|d}| |j| | |j| | ||jddd d S )Nz5expected to find alternate type: default=%r values=%rc                 S   s   | ddj S )NTr2   r&   )rK   r   r   r   effective_type[  s    z9_base_argon2_test.test_type_using.<locals>.effective_typerO   rH   Ir"   )r5   r&   rI   r7   r6   rA   r<   rJ   )r.   r5   Z	orig_typeZalt_typerP   subclsr   r   r   test_type_usingM  s*    
z!_base_argon2_test.test_type_usingc                 C   sB   | j }|d}| || tdd|}| || d S )NrE   z\$argon2\w+\$z	$argon2d$)r5   r   rC   needs_updateresubrB   )r.   r5   r   Zhash2r   r   r   test_needs_update_w_typew  s
    
z*_base_argon2_test.test_needs_update_w_typec                 C   sH   | j jddddd}d}|jdkr4| || n| || d S )Ni   r   r       )r   	time_costr   Zdigest_size[$argon2i$m=65536,t=2,p=4$c29tZXNhbHQAAAAAAAAAAA$QWLzI4TY9HkL2ZTLc8g6SinwdhZewYrzz9zxCo0bkGYr   )r5   r6   Zmax_versionrC   rT   rB   )r.   r5   r   r   r   r   test_needs_update_w_version  s    
z-_base_argon2_test.test_needs_update_w_versionc                 C   s~   | j }|jdkr| dd}|jddd|ddd}|d	}| |d
 d}|jddd|ddd}|d	}| |d dS )z3verify we're using right base64 encoding for argon2r   z,handler uses wrong version for sample hashesr%   r#   r   rX   r"   )r   rY   r   r   Zchecksum_sizer&   r   r   s   somesalt        z^$argon2i$v=19$m=256,t=2,p=2$c29tZXNhbHQAAAAAAAAAAA$rqnbEp1/jFDUEKZZmw+z14amDsFqMDC53dIe57ZHD38N)r5   r	   r9   r6   r   rA   )r.   r5   r   Ztempr   r   r   r   test_argon_byte_encoding  s"    

 
 
z*_base_argon2_test.test_argon_byte_encodingc                   @   s6   e Zd Zejj Zejddd dd Zdd Z	dS )	z#_base_argon2_test.FuzzHashGeneratorrandom_memory_costrandom_type)r   r&   c                 C   s   | j | jjS )N)rngchoicer5   rI   r-   r   r   r   r^     s    z/_base_argon2_test.FuzzHashGenerator.random_typec                 C   s0   | j jdkr| ddddS | ddddS d S )Nr@      i  r#   i  i @  i   )Ztestr4   randintgaussr-   r   r   r   r]     s    z6_base_argon2_test.FuzzHashGenerator.random_memory_costN)
__name__
__module____qualname__r   FuzzHashGeneratorZsettings_mapcopyupdater^   r]   r   r   r   r   rf     s   rf   )N)rc   rd   re   r   argon2r5   r   r   known_correct_hashesZknown_malformed_hashesr   Zknown_parsehash_resultsr*   r8   r:   r?   rD   rF   rN   rS   rW   r[   r\   r   rf   __classcell__r   r   r/   r   r       sB   	:&*	
r    c                   @   s4   e Zd Zejdddddg Zedd eD  dS )	argon2_argon2_cffi_test)r   rZ   )r   zU$argon2i$v=19$m=65536,t=2,p=4$c29tZXNhbHQ$IMit9qkFULCMA/ViizL57cnTLOa5DiVM9eMwpAvPwr4)r   zU$argon2d$v=19$m=65536,t=2,p=4$c29tZXNhbHQ$cZn5d+rFh+ZfuRhm2iGUGgcrW5YLeM6q7L3vBsdmFA0)r   zV$argon2id$v=19$m=65536,t=2,p=4$c29tZXNhbHQ$GpZ3sK/oH9p7VIiV56G/64Zo/8GaUw434IimaPqxwCo)r!   zU$argon2i$v=19$m=65536,t=2,p=4$c29tZXNhbHQ$Vpzuc0v0SrP88LcVvmg+z5RoOYpMDKH/lt6O+CZabIQc                 c   s6   | ].}|d  t drdndkr|d |d fV  qdS )r   Zfullr   r   r   r   N)r   .0infor   r   r   	<genexpr>  s   z!argon2_argon2_cffi_test.<genexpr>N)rc   rd   re   r    rj   extendreference_datar   r   r   r   rl     s   !
rl   r1   c                   @   sV   e Zd ZejjdddZde_ej	dd Z	e	
dd eD  G dd	 d	ejZdS )
argon2_argon2pure_testrX   r   )r   r   TNc                 c   s*   | ]"}|d  dk r|d |d fV  qdS )r   r   r   r   Nr   rm   r   r   r   rp     s   z argon2_argon2pure_test.<genexpr>c                   @   s   e Zd Zdd ZdS )z(argon2_argon2pure_test.FuzzHashGeneratorc                 C   s   |  ddddS )Nr   r$   r   )rb   r-   r   r   r   random_rounds  s    z6argon2_argon2pure_test.FuzzHashGenerator.random_roundsN)rc   rd   re   rt   r   r   r   r   rf     s   rf   )rc   rd   re   r   ri   r6   r5   Zpure_use_threadsr    rj   rq   rr   rf   r   r   r   r   rs     s   
rs   r@   )__doc__ZloggingZ	getLoggerrc   logrU   r+   Zpasslibr   Zpasslib.utils.compatr   Zpasslib.tests.utilsr   r   Zpasslib.tests.test_handlersr   r   r   r	   rr   rq   r    Zcreate_backend_caserl   rs   r   r   r   r   <module>   s   
((&  %)