Ë
    àU.j²<  ã                   ó–  — d Z ddlmZ ddlZ ej                  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 ddlmZmZmZmZ ddlmZmZ dd	lmZmZmZ  ed
«      Zd„ Z G d„ de«      Z G d„ de«      Z G d„ dee«      Z G d„ dee«      Z  G d„ dee«      Z! G d„ dee«      Z" G d„ dee«      Z# ee
jH                  jK                  «       d«       G d„ dee«      «       Z& ee
jH                  jK                  «       d«       G d„ dee«      «       Z'ddl(m)Z)  ee
jT                  jK                  «       d «       G d!„ d"ee«      «       Z+y)#zFpasslib.tests.test_handlers_django - tests for passlib hash algorithmsé    )Úwith_statementN)Úhash)Úrepeat_string)Úu)ÚTestCaseÚHandlerCaseÚ
skipUnlessÚSkipTest)Ú	UPASS_USDÚUPASS_TABLE)ÚDJANGO_VERSIONÚMIN_DJANGO_VERSIONÚcheck_django_hasher_has_backendu   lÃ¨tmeinc                 ó2   — dj                  d„ | D «       «      S )NÚ.c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Ústr)Ú.0Úes     údC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\passlib/tests/test_handlers_django.pyÚ	<genexpr>zvstr.<locals>.<genexpr>   s   è ø€ Ð,¡G˜q”C˜—F¡Gùs   ‚)Újoin)Úversions    r   Úvstrr      s   € Ø�8‰8Ñ,¡GÓ,Ó,Ð,ó    c                   óR   — e Zd ZdZdZeZdZd„ Ze	j                  dz   Zd„ Zd„ Zd„ Zy)	Ú_DjangoHelperzi
    mixin for HandlerCase subclasses that are testing a hasher
    which is also present in django.
    TNc                 ón  — t         | j                  k  r'| j                  dt        | j                  «      z  «      ‚| j                  r:t         | j                  kD  r'| j                  dt        | j                  «      z  «      ‚| j
                  j                  }t        |«      s| j                  d|z  «      ‚y)NzDjango >= %s not installedzDjango <= %s not installedzdjango hasher %r not availableT)r   Úmin_django_versionÚskipTestr   Úmax_django_versionÚhandlerÚdjango_namer   )ÚselfÚnames     r   Ú_require_django_supportz%_DjangoHelper._require_django_support0   s—   € ä˜D×3Ñ3Ò3Ø—-‘-Ð <¼tÀD×D[ÑD[Ó?\Ñ \Ó]Ð]Ø×"Ò"¤~¸×8OÑ8OÒ'OØ—-‘-Ð <¼tÀD×D[ÑD[Ó?\Ñ \Ó]Ð]ð �|‰|×'Ñ'ˆÜ.¨tÔ4Ø—-‘-Ð @À4Ñ GÓHÐHàr   )Úfuzz_verifier_djangoc                 ób   ‡ ‡— 	 ‰ j                  «        ddlmŠ ˆˆ fd„}|S # t        $ r Y y w xY w)Nr   ©Úcheck_passwordc                 óÔ   •— ‰j                   j                  dk(  r% |j                  d«      r |j                  dd«      }t	        | t
        «      r| j                  d«      }  ‰| |«      S )zdjango/check_passwordÚdjango_bcryptzbcrypt$$2y$z$$2y$z$$2a$úutf-8)r#   r&   Ú
startswithÚreplaceÚ
isinstanceÚbytesÚdecode)Úsecretr   r+   r%   s     €€r   Úverify_djangoz9_DjangoHelper.fuzz_verifier_django.<locals>.verify_djangoI   sY   ø€ à�|‰|× Ñ  OÒ3¸¸¿¹ÈÔ8VØ#�t—|‘| G¨WÓ5�Ü˜&¤%Ô(ØŸ™ wÓ/�Ù! &¨$Ó/Ð/r   )r'   r
   Údjango.contrib.auth.hashersr+   )r%   r5   r+   s   ` @r   r(   z"_DjangoHelper.fuzz_verifier_djangoB   s:   ù€ ð	Ø×(Ñ(Ô*õ 	?õ	0ð Ðøô ò 	Ùð	ús   „" ¢	.­.c           	      ó  — | j                  «        ddlm} | j                  sJ ‚| j	                  «       D ]H  \  }}| j                   |||«      d|›d|›d�«       | j                   |d|z   |«      d|›d|›d�«       ŒJ y	)
z:run known correct hashes through Django's check_password()r   r*   zsecret=z hash=z failed to verifyÚxzmangled secret=z incorrect verifiedN)r'   r6   r+   Úknown_correct_hashesÚiter_known_hashesÚ
assertTrueÚassertFalse)r%   r+   r4   r   s       r   Útest_90_django_referencez&_DjangoHelper.test_90_django_referenceR   s   € à×$Ñ$Ô&õ 	?Ø×(Ò(Ð(Ð(Ø ×2Ñ2Ö4‰LˆF�DØ�O‰O™N¨6°4Ô8â#¢Tð+ô,ð ×Ñ™^¨C°&©L¸$Ô?â#¢Tð+õ,ñ	 5r   c                 óH  — | j                  «        ddlm} ddlm} | j
                  j                  } |«       | j                  dz  z   }| j                  | | j                  «       «      } |«       |k  r¯|j                  «       \  }}|sŒ t        |t        «      r|j                  d«      } |||¬«      }| j                  | j                  |«      «       | j                  | j!                  ||«      «       | j#                  | j!                  ||«      «        |«       |k  rŒ®yy)z/test against output of Django's make_password()r   )Útick)Úmake_passwordé   r.   )ÚhasherN)r'   Úpasslib.utilsr?   r6   r@   r#   r$   Úmax_fuzz_timeÚFuzzHashGeneratorÚ	getRandomÚrandom_password_pairr1   r2   r3   r;   Údo_identifyÚ	do_verifyr<   )	r%   r?   r@   r&   ÚendÚ	generatorr4   Úotherr   s	            r   Útest_91_django_generationz'_DjangoHelper.test_91_django_generationa   sì   € à×$Ñ$Ô&õ 	'Ý=Ø�|‰|×'Ñ'ˆÙ‹f�t×)Ñ)¨!Ñ+Ñ+ˆØ×*Ñ*¨4°·±Ó1AÓBˆ	Ù‹f�sŠlØ%×:Ñ:Ó<‰MˆF�EÙØÜ˜&¤%Ô(ØŸ™ wÓ/�Ù  °Ô5ˆDØ�O‰O˜D×,Ñ,¨TÓ2Ô3Ø�O‰O˜DŸN™N¨6°4Ó8Ô9Ø×Ñ˜TŸ^™^¨E°4Ó8Ô9ñ ‹f�s�lr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_DjangoHelper__unittest_skipr   r    r"   r'   r   Úfuzz_verifiersÚextra_fuzz_verifiersr(   r=   rM   © r   r   r   r      sJ   „ ñð €Oð ,Ðð Ðòð '×5Ñ5ð 9ñ Ðòò ,ó:r   r   c                   ó@   — e Zd ZdZej
                  ZdZddedfgZ	dgZ
y)Údjango_disabled_testztest django_disabledT)ÚpasswordÚ!)Ú rY   rY   )z!9wa845vn7098ythaehasldkfjrX   rY   N)rN   rO   rP   rQ   r   Údjango_disabledr#   Údisabled_contains_saltr   r9   Úknown_alternate_hashesrU   r   r   rW   rW   v   s;   „ ÙØ×"Ñ"€GØ!Ðð 	ØØ	�cÐð	Ðð 	8ðÑr   rW   c                   ój   — e Zd ZdZej
                  ZdZdddedfe	df e
d«      d	fd
gZdgZdgZg d¢Zy)Údjango_des_crypt_testztest django_des_crypt©é   é	   )rX   úcrypt$c2$c2M87q...WWcU)rX   zcrypt$c2e86$c2M87q...WWcU)Úpasswordignoremezcrypt$c2.AZ$c2M87q...WWcUzcrypt$c2e86$c2hN1Bxd6ZiWszcrypt$0.aQs$0.wB.TT0Czvlou   hellÃ–zcrypt$sa$saykDgk3BPZ9E)Úfooz!crypt$MNVY.9ajgdvDQ$MNVY.9ajgdvDQ)zcrypt$$c2M87q...WWcUrX   rc   ú
sha1$aa$bb)zcrypt$c2$c2M87qzcrypt$f$c2M87q...WWcUzcrypt$ffe86$c2M87q...WWcUN)rN   rO   rP   rQ   r   Údjango_des_cryptr#   r"   r   r   r   r9   r]   Úknown_unidentified_hashesÚknown_malformed_hashesrU   r   r   r_   r_   ‡   sr   „ ÙØ×#Ñ#€GØÐð 	7Ø9Ø9ð 
Ð/Ð0Ø	Ð1Ð2Ù	
ˆ<‹Ð2Ð3ð 	5ðÐð$ 	GðÐð 	ð!Ðò	Ñr   r_   c                   óv   — e Zd ZdZej
                  ZdZddedfe	dfgZ
dgZdgZ G d	„ d
ej                  «      Zy)Údjango_salted_md5_testztest django_salted_md5r`   )rX   z.md5$123abcdef$c8272612932975ee80e8a35995708e80)Útestz1md5$3OpqnFAHW5CT$54b29300675271049a1ebae07b395e20z*md5$c2e86$92105508419a81a6babfaecf876a2fa0z*md5$d9eb8$01495b32852bffb27cf5d4394fe7a54crf   ú	md5$aa$bbc                   ó   — e Zd Zd„ Zy)ú(django_salted_md5_test.FuzzHashGeneratorc                 ó¬   — | j                   }|j                  }|j                  dk(  sJ ‚d}|j                  xs |dz  }| j	                  ||||dz  «      S )Nr   ra   é   g      à?)r#   Údefault_salt_sizeÚmin_salt_sizeÚmax_salt_sizeÚrandintgauss)r%   r#   ÚdefaultÚlowerÚuppers        r   Úrandom_salt_sizez9django_salted_md5_test.FuzzHashGenerator.random_salt_sizeÌ   s`   € ð
 —l‘lˆGØ×/Ñ/ˆGØ×(Ñ(¨AÒ-Ð-Ð-ØˆEØ×)Ñ)Ò6¨W°Q©YˆEØ×$Ñ$ U¨E°7¸GÀB¹JÓGÐGr   N)rN   rO   rP   ry   rU   r   r   rE   ro   Ê   s   „ ó
	Hr   rE   N)rN   rO   rP   rQ   r   Údjango_salted_md5r#   r"   r   r   r9   rh   ri   r   rE   rU   r   r   rk   rk   °   sl   „ Ù Ø×$Ñ$€GØÐð 	Jð 	Fð 
ÐDÐEØ	ÐDÐEð
Ðð 	ð!Ðð 	ðÐô
H˜K×9Ñ9õ Hr   rk   c                   óf   — e Zd ZdZej
                  ZdZddedfe	dfdgZ
dgZd	gZej                  Zy
)Údjango_salted_sha1_testztest django_salted_sha1r`   )rX   z7sha1$123abcdef$e4a1877b0e35c47329e7ed7e58014276168a37ba)rl   z:sha1$bcwHF9Hy8lxS$6b4cfa0651b43161c6f1471ce9523acf1f751ba3z3sha1$c2e86$0f75c5d7fbd100d587c127ef0b693cde611b4adaz3sha1$6d853$ef13a4d8fb57aed0cb573fe9c82e28dc7fd372d4)Ú
MyPasswordz3sha1$54123$893cf12e134c3c215f3a76bd50d13f92404a54d3rm   zsha1$c2e86$0f75N)rN   rO   rP   rQ   r   Údjango_salted_sha1r#   r"   r   r   r9   rh   ri   rk   rE   rU   r   r   r|   r|   Ø   sl   „ Ù!Ø×%Ñ%€GØÐð 	Oð 	Oð 
ÐMÐNØ	ÐMÐNð 	OðÐð  	ð!Ðð 	ðÐð /×@Ñ@Ñr   r|   c                   ó4   — e Zd ZdZej
                  ZdedfgZy)Údjango_pbkdf2_sha256_testztest django_pbkdf2_sha256)únot a passwordzMpbkdf2_sha256$10000$kjVJaVz6qsnJ$5yPHw3rwJGECpUf70daLGhOrQ5+AMxIJdz1c3bqK1Rs=zMpbkdf2_sha256$10000$bEwAfNrH1TlQ$OgYUblFNUX1B8GfMqaCYUK/iHyO0pa7STTDdaEJBuY0=N)	rN   rO   rP   rQ   r   Údjango_pbkdf2_sha256r#   r   r9   rU   r   r   r€   r€   ø   s*   „ Ù#Ø×'Ñ'€Gð	Zà	Ø	Xð	ZðÑr   r€   c                   ó4   — e Zd ZdZej
                  ZdedfgZy)Údjango_pbkdf2_sha1_testztest django_pbkdf2_sha1)r�   z;pbkdf2_sha1$10000$wz5B6WkasRoF$atJmJ1o+XfJxKq1+Nu1f1i57Z5I=z;pbkdf2_sha1$10000$KZKWwvqb8BfL$rw5pWsxJEU4JrZAQhHTCO+u0f5Y=N)	rN   rO   rP   rQ   r   Údjango_pbkdf2_sha1r#   r   r9   rU   r   r   r„   r„     s*   „ Ù!Ø×%Ñ%€Gð	Hà	Ø	Fð	HðÑr   r„   zno bcrypt backends availablec                   óz   ‡ — e Zd ZdZej
                  ZdZdZdde	dfgZ
ˆ fd„Z G d„ d	ej                  «      Zˆ xZS )
Údjango_bcrypt_testútest django_bcrypt)rA   r   T)rZ   zCbcrypt$$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.)ÚabcdefghijklmnopqrstuvwxyzzCbcrypt$$2a$10$fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dqzCbcrypt$$2a$05$Z17AXnnlpzddNUvnC6cZNOSwMA/8oNiKnHTHTwLlBijfucQQlHjaGc                 óP   •— |j                  dd«       t        t        | �  |«       y ©NÚroundsrq   )Ú
setdefaultÚsuperr‡   Úpopulate_settings©r%   ÚkwdsÚ	__class__s     €r   r�   z$django_bcrypt_test.populate_settings*  s!   ø€ à�‰˜ !Ô$ÜÔ  $Ñ9¸$Õ?r   c                   ó   — e Zd Zd„ Zd„ Zy)ú$django_bcrypt_test.FuzzHashGeneratorc                 ó*   — | j                  dddd«      S ©Né   é   é   ra   ©ru   ©r%   s    r   Úrandom_roundsz2django_bcrypt_test.FuzzHashGenerator.random_rounds1  ó   € à×$Ñ$ Q¨¨1¨aÓ0Ð0r   c                  ó   — y r   rU   r›   s    r   Úrandom_identz1django_bcrypt_test.FuzzHashGenerator.random_ident5  ó   € ð r   N©rN   rO   rP   rœ   rŸ   rU   r   r   rE   r”   /  ó   „ ò	1ó	r   rE   )rN   rO   rP   rQ   r   r-   r#   r"   Úfuzz_salts_need_bcrypt_repairr   r9   r�   r   rE   Ú__classcell__©r’   s   @r   r‡   r‡     sZ   ø„ áØ× Ñ €GàÐØ$(Ð!ð 	Tð	Tà	ØUð	Wð
Ðô@ô
	˜K×9Ñ9÷ 	ð 	r   r‡   c            	       óÌ   ‡ — e Zd ZdZej
                  ZdZdZde	dfe
df edd«      d	f edd«      d
z   df edd«      dz   dfgZdgZˆ fd„Z G d„ dej                   «      Zˆ xZS )Údjango_bcrypt_sha256_testztest django_bcrypt_sha256NT)rZ   zJbcrypt_sha256$$2a$06$/3OeRpbOf8/l6nPPRdZPp.nRiyYqPobEZGdNRBWihQhiFDh1ws1tuzJbcrypt_sha256$$2a$08$NDjSAIcas.EcoxCRiArvT.MkNiPYVhrsrnJsRkLueZOoV1bsQqlmCzJbcrypt_sha256$$2a$06$kCXUnRFQptGg491siDKNTu8RxjBGSjALHRuvhPYNFsa4Ea5d9M48uÚabc123éH   zJbcrypt_sha256$$2a$06$Tg/oYyZTyAf.Nb3qSgN61OySmyXA8FoY4PjGizjE1QSDfuL5MXNniÚqwrzJbcrypt_sha256$$2a$06$Tg/oYyZTyAf.Nb3qSgN61Ocy0BEz1RK6xslSNi8PlaLX2pe7x/KQGÚxyzzJbcrypt_sha256$$2a$06$Tg/oYyZTyAf.Nb3qSgN61OvY2zoRVUa2Pugv2ExVOUT2YmhvxUFUazMbcrypt_sha256$xyz$2a$06$/3OeRpbOf8/l6nPPRdZPp.nRiyYqPobEZGdNRBWihQhiFDh1ws1tuc                 óP   •— |j                  dd«       t        t        | �  |«       y r‹   )r�   rŽ   r§   r�   r�   s     €r   r�   z+django_bcrypt_sha256_test.populate_settings\  s!   ø€ à�‰˜ !Ô$ÜÔ'¨Ñ@ÀÕFr   c                   ó   — e Zd Zd„ Zd„ Zy)ú+django_bcrypt_sha256_test.FuzzHashGeneratorc                 ó*   — | j                  dddd«      S r–   rš   r›   s    r   rœ   z9django_bcrypt_sha256_test.FuzzHashGenerator.random_roundsc  r�   r   c                  ó   — y r   rU   r›   s    r   rŸ   z8django_bcrypt_sha256_test.FuzzHashGenerator.random_identg  r    r   Nr¡   rU   r   r   rE   r®   a  r¢   r   rE   )rN   rO   rP   rQ   r   Údjango_bcrypt_sha256r#   Úforbidden_charactersr£   ÚUPASS_LETMEINr   r   r9   Úknown_malformed_hashersr�   r   rE   r¤   r¥   s   @r   r§   r§   :  s³   ø„ á#Ø×'Ñ'€GØÐØ$(Ð!ð	Zà	ØXð	Zà	ØXð	Zñ 
�x Ó	#ØXð	Zá	�x Ó	# EÑ	)ØXð	Zá	�x Ó	# EÑ	)ØXð	Zð!Ðð, 	XðÐôGô
	˜K×9Ñ9÷ 	ð 	r   r§   )Ú_base_argon2_testzno argon2 backends availablec                   ó€   ‡ — e Zd ZdZej
                  ZddedfgZˆ fd„Z	d
d„Z
d„ Z G d„ d	ej                  «      Zˆ xZS )Údjango_argon2_testrˆ   )rX   zDargon2$argon2i$v=19$m=256,t=1,p=1$c29tZXNhbHQ$AJFIsNZTMKTAewB4+ETN1A)rX   zDargon2$argon2i$v=19$m=380,t=2,p=2$c29tZXNhbHQ$SrssP8n7m/12VWPM8dvNrwzIargon2$argon2i$v=19$m=512,t=2,p=2$V25jN1l4UUJZWkR1$MxpA1BD2Gh7+D79gaAw6sQc                 óV   •— t         t        | �  «        t        j                  dd«       y )NÚignorez.*Using argon2pure backend.*)rŽ   r·   ÚsetUpWarningsÚwarningsÚfilterwarnings)r%   r’   s    €r   rº   z django_argon2_test.setUpWarnings€  s"   ø€ ÜÔ  $Ñ5Ô7Ü×Ñ Ð*HÕIr   c                 óâ   —  |xs | j                   j                  di |¤Ž}|j                  d¬«      } | j                  | _        | j                  sJ ‚|j                  | j                  «       «      S )NT)Úuse_defaultsrU   )r#   ÚusingÚwrappedÚ_stub_checksumÚchecksumÚ
_wrap_hashÚ	to_string)r%   r#   Úsettingss      r   Údo_stub_encryptz"django_argon2_test.do_stub_encrypt„  sc   € ð 2�7Ò*˜dŸl™l×1Ñ1Ñ=°HÑ=ˆØ�‰¨DˆÓ1ˆØ×+Ñ+ˆŒØ�}Š}Ðˆ}Ø×!Ñ! $§.¡.Ó"2Ó3Ð3r   c                 ó$   — | j                  d«      ‚)Nz!legacy 1.6 workflow not supported)r!   r›   s    r   Útest_03_legacy_hash_workflowz/django_argon2_test.test_03_legacy_hash_workflow�  s   € à�m‰mÐ?Ó@Ð@r   c                   ó   — e Zd Zd„ Zd„ Zy)ú$django_argon2_test.FuzzHashGeneratorc                  ó   — y)NÚIrU   r›   s    r   Úrandom_typez0django_argon2_test.FuzzHashGenerator.random_type“  s   € àr   c                 ó*   — | j                  dddd«      S )Nra   é   rA   rš   r›   s    r   rœ   z2django_argon2_test.FuzzHashGenerator.random_rounds—  r�   r   N)rN   rO   rP   rÍ   rœ   rU   r   r   rE   rÊ   ‘  s   „ ò	ó	1r   rE   r   )rN   rO   rP   rQ   r   Údjango_argon2r#   r³   r9   rº   rÆ   rÈ   rµ   rE   r¤   r¥   s   @r   r·   r·   n  sY   ø„ áØ× Ñ €Gð 	]ð 	]ð 
ÐcÐdð	ÐôJó4òAô1Ð-×?Ñ?÷ 1ð 1r   r·   ),rQ   Ú
__future__r   ÚloggingÚ	getLoggerrN   ÚlogÚrer»   Úpasslibr   rC   r   Úpasslib.utils.compatr   Úpasslib.tests.utilsr   r   r	   r
   Úpasslib.tests.test_handlersr   r   Úpasslib.tests.test_ext_djangor   r   r   r³   r   r   rW   r_   rk   r|   r€   r„   ÚbcryptÚhas_backendr‡   r§   Ú"passlib.tests.test_handlers_argon2rµ   Úargon2r·   rU   r   r   Ú<module>rß      s]  ðÙ Lõ &ã Ð'�g×'Ñ'¨Ó1�Û 	Û õ Ý 'Ý "ß KÓ Kß >÷$ñ $ñ �,“€ò-ôU:�Hô U:ôn˜;ô ô"'˜K¨ô 'ôR&H˜[¨-ô &HôPA˜k¨=ô Aô@ ¨]ô ô˜k¨=ô ñ ˆD�K‰K×#Ñ#Ó%Ð'EÓFô#˜ mó #ó Gð#ñJ ˆD�K‰K×#Ñ#Ó%Ð'EÓFô/ ¨]ó /ó Gð/õb AáˆD�K‰K×#Ñ#Ó%Ð'EÓFô*1˜ mó *1ó Gñ*1r   