Ë
    àU.jms  ã                   óP  — 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mZ ddlmZmZmZ ddlmZmZ ddlmZmZ dd	lmZ  G d
„ de«      Zej7                  d«      Zej7                  d«      Zej7                  d«      Z G d„ dej7                  d«      «      Zej7                  d«      Z  G d„ de«      Z!e!j7                  d«      Z"e!j7                  d«      Z#e!j7                  d«      Z$ G d„ de!j7                  d«      «      Z%e!j7                  d«      Z&y)z?passlib.tests.test_handlers - tests for passlib hash algorithmsé    )Úwith_statementN)Úhash)ÚIDENT_2ÚIDENT_2X)Úrepeat_stringÚto_bytesÚis_safe_crypt_input)ÚirangeÚPY3)ÚHandlerCaseÚ	TEST_MODE)ÚUPASS_TABLEc                   ó  ‡ — e Zd ZdZej
                  ZdZdZddddddd	d
ddddddddddddd dfddd dfddd dfddd dfddddd e	d!fe	d"fgZ
 ed#«      rQd$Zd%Ze
j                  d&ed'z   fd&ed'z   fd(ed)z   fd(ed*z   fd+ed)z   fd+ed,z   fd-ed)z   fd-ed)z   fd.ed)z   fd.ed)z   fg
«       d/e	d0fgZd1d2gZg d3¢Zg d4¢Zˆ fd5„Zˆ fd6„Zd7„ Zej.                  d8z   Zd9„ Zd:„ Zd;„ Z G d<„ d=ej6                  «      Zg d>¢Zd?„ Zd@„ Zˆ xZS )AÚ_bcrypt_testzbase for BCrypt test casesT)zU*U*U*U*z<$2a$05$c92SVSfjeiCD6F2nAD6y0uBpJDjdRkt0EgeC4/31Rf2LUZbDRDE.O)zU*U***Uz<$2a$05$WY62Xk2TXZ7EvVDQ5fmjNu7b0GEzSzUXUh2cllxJwhtOeMtWV3Ujq)zU*U***U*z<$2a$05$Fa0iKV3E2SYVUlMknirWU.CFYGvJ67UwVKI1E2FP6XeLiZGcH3MJi)z*U*U*U*Uz<$2a$05$.WRrXibc1zPgIdRXYfv.4uu6TD1KWf0VnHzq/0imhUhuxSxCyeBs2)Ú z<$2a$05$Otz9agnajgrAe0.kFVF9V.tzaStZ2s1s4ZWi/LY4sw2k/MTVFj/IO)zU*Uz<$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW)zU*U*z<$2a$05$CCCCCCCCCCCCCCCCCCCCC.VGOzA784oUp/Z0DY336zx7pLYAy0lwK)zU*U*Uz<$2a$05$XXXXXXXXXXXXXXXXXXXXXOAcXxm9kjPGEMsLznoKqmqw7tc8WCx4a)r   z<$2a$05$CCCCCCCCCCCCCCCCCCCCC.7uG0VCzI2bS7j6ymqJi9CdcdxiRTWNy)zb0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789chars after 72 are ignoredz<$2a$05$abcdefghijklmnopqrstuu5s2v8.iXieOjg/.AySBTTZIIVFJeBui)ó   £z<$2a$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq)s   ÿ£345z<$2a$05$/OK.fbVrR/bpIqNJ5ianF.nRht2l/HRhr6zmCp9vYUvvsqynflf9e)s   £abz<$2a$05$/OK.fbVrR/bpIqNJ5ianF.6IflQkJytoRVc1yuaNtHfiuq.FRlSIS)sk   ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªchars after 72 are ignored as usualz<$2a$05$/OK.fbVrR/bpIqNJ5ianF.swQOIzjOiJ9GHEPuhEkvqrUyvWhEMx6)sH   ªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUªUz<$2a$05$/OK.fbVrR/bpIqNJ5ianF.R9xrDjiycxMbQE2bp.vgqlYpW5wx2yy)sH   UªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿUªÿz<$2a$05$/OK.fbVrR/bpIqNJ5ianF.9tQZzcJfm3uj2NvJ/n5xkhpqLrMpWCe)r   z<$2y$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq)s   Ñ‘z<$2y$05$6bNw2HLQYeqHYyBfLMsv/OUcZd0LKP39b87nBw3.S2tVZSqiQX6euÁ  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789Néþ   z<$2a$04$R1lJ2gkNaoPGdafE.H.16.1MKHPvmKwryeulRe225LKProWYwt9Oiéÿ   é   i  )r   z<$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.)Úaz<$2a$10$k87L/MF28Q673VKh8/cPi.SUl7MU/rWuSiIDDFayrKk/1tBsSQu4u)Úabcz<$2a$10$WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi)Úabcdefghijklmnopqrstuvwxyzz<$2a$10$fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dq)z"~!@#$%^&*()      ~!@#$%^&*()PNBFRDz<$2a$10$LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfSz<$2a$05$Z17AXnnlpzddNUvnC6cZNOSwMA/8oNiKnHTHTwLlBijfucQQlHjaGz<$2b$05$Z17AXnnlpzddNUvnC6cZNOSwMA/8oNiKnHTHTwLlBijfucQQlHjaGÚfullz$2$05$......................z$2a$05$......................r   ÚJ2ihDv8vVf7QZ9BsaRrKyqs2tkn55Yqr   zXuQjdH.wPVNUZ/bOfstdW/FqB8QSjteÚev6gDwpVye3oMCUpLY85aTpfBNHD0GaÚEabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcz2kIdfSj/4/R/Q6n847VTvc68BXiRYZCÚHabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcÚIabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcxz$2a$04$uM6csdM8R9SXTex/gbTayez<$2a$04$uM6csdM8R9SXTex/gbTayezuvzFEufYGd2uB6of7qScLjQ4GwcD4Gz<$2f$12$EXRkfkdmXnagzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9qz<$2`$12$EXRkfkdmXnagzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9q)z<$2a$12$EXRkfkdmXn!gzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9qz<$2x$12$EXRkfkdmXnagzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9qz;$2a$6$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.))zfreedbsd|openbsd|netbsdT)ÚdarwinF)ÚlinuxN)ÚsolarisNc                 ó¢  •— t        d«      r›| j                  dk(  rŒd}t        j                  j	                  |«      }|r,| j                  t        j                  j                  ||«       n*| j                  t        j                  j                  |«       dt        j                  |<   t        t        | �+  «        t        j                  dd«       y )Nr   ÚbuiltinÚPASSLIB_BUILTIN_BCRYPTÚtrueÚignoreú3.*backend is vulnerable to the bsd wraparound bug.*)r   ÚbackendÚosÚenvironÚgetÚ
addCleanupÚ__setitem__Ú__delitem__Úsuperr   ÚsetUpÚwarningsÚfilterwarnings©ÚselfÚkeyÚorigÚ	__class__s      €údC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\passlib/tests/test_handlers_bcrypt.pyr1   z_bcrypt_test.setUp«   s�   ø€ ä�VÔ §¡°Ò!:Ø*ˆCÜ—:‘:—>‘> #Ó&ˆDÙØ—‘¤§
¡
× 6Ñ 6¸¸TÕBà—‘¤§
¡
× 6Ñ 6¸Ô<Ø$ŒB�J‰J�s‰OäŒl˜DÑ'Ô)ô 	×Ñ Ð*_Õ`ó    c                 ón   •— | j                   dk(  r|j                  dd«       t        t        | �  |«       y ©Nr$   Úroundsé   )r)   Ú
setdefaultr0   r   Úpopulate_settings©r5   Úkwdsr8   s     €r9   r@   z_bcrypt_test.populate_settings»   s,   ø€ à�<‰<˜9Ò$Ø�O‰O˜H aÔ(ÜŒl˜DÑ3°DÕ9r:   c                 ó‚   — ddl m}m}m} ddlm} |j                  |«      } |d|dz   «      xs dj                  |«      S )z4check if OS crypt is expected to support given identr   )Úbcryptr   ÚIDENT_2Y)Ú
safe_cryptÚtestz04$5BJqKfqMQvV7nS.yUguNcur   )Úpasslib.handlers.bcryptrD   r   rE   Úpasslib.utilsrF   Úfrom_stringÚ
startswith)r5   r   rD   r   rE   rF   Úidents          r9   Úcrypt_supports_variantz#_bcrypt_test.crypt_supports_variantÄ   s?   € çFÑFÝ,Ø×"Ñ" 4Ó(ˆÙ˜6 5Ð+FÑ#FÓGÒMÈ2×YÑYÐZ_Ó`Ð`r:   )Úfuzz_verifier_bcryptÚfuzz_verifier_pybcryptÚfuzz_verifier_bcryptorc                 ó’   ‡ ‡‡‡‡‡	‡
— ddl mŠmŠmŠm}mŠm} ddlm}m	Š
 	 dd l
Š	 |«       ry ˆˆˆˆˆ	ˆ ˆ
fd„}|S # t        $ r Y y w xY w)Nr   )r   ÚIDENT_2AÚIDENT_2Br   rE   Ú_detect_pybcrypt)Úto_native_strr   c                 ó’  •—  ‰| ‰j                   j                  «      }  |j                  ‰«      r	‰|dd z   }nR |j                  ‰«      r‰|dd z   }| r6t        | d«      } n) |j                  ‰«      r‰j                  dk(  r‰|dd z   } ‰|«      }	 ‰j                  | |«      |k(  S # t        $ r t        d|›d| ›d�«      ‚w xY w)	rD   r>   Né   éH   z3.0.0zbcrypt rejected hash: z	 (secret=Ú))ÚFuzzHashGeneratorÚpassword_encodingrK   r   Ú__version__ÚhashpwÚ
ValueError)	Úsecretr   r   rR   rS   rE   rD   r5   r   s	     €€€€€€€r9   Úcheck_bcryptz7_bcrypt_test.fuzz_verifier_bcrypt.<locals>.check_bcryptÛ   sÚ   ø€ á˜f d×&<Ñ&<×&NÑ&NÓOˆFØˆt�‰˜xÔ(à $ q r (Ñ*‘Ø �—‘ Ô)ð   $ q r (Ñ*�ÙÜ*¨6°2Ó6‘FØ �—‘ Ô*¨v×/AÑ/AÀWÒ/LØ $ q r (Ñ*�Ù˜D“>ˆDðZØ—}‘} V¨TÓ2°dÑ:Ð:øÜò ZÝ Ê4ÒQWÐ!XÓYÐYðZús   ÂB* Â*C)rH   r   rR   rS   r   rE   rT   rI   rU   r   rD   ÚImportError)r5   r   rT   rU   r`   r   rR   rS   rE   rD   r   s   `    @@@@@@r9   rN   z!_bcrypt_test.fuzz_verifier_bcryptÑ   sG   þ€ çm×mß9ð	Ûñ ÔØ÷	Zò 	Zð( Ðøô1 ò 	Ùð	ús   ¡: º	AÁAc                 ó¤   ‡ ‡‡‡‡	‡
‡— ddl m}mŠmŠm}mŠm} ddlmŠ |j                  dd«      }|sy ddl m
Š	 |j                  Š
ˆˆˆˆ	ˆ
ˆ ˆfd„}|S )Nr   )r   rR   rS   r   rE   Ú_PyBcryptBackend©rU   ÚpybcryptF)Ú	_pybcryptc                 ó\  •—  ‰| ‰j                   j                  «      } t        | «      dkD  r| dd }  |j                  ‰‰f«      r‰|dd z   }	 ‰r!‰5  ‰j	                  | |«      |k(  cddd«       S ‰j	                  | |«      |k(  S # 1 sw Y   yxY w# t
        $ r t        d|›�«      ‚w xY w)re   éÈ   Nr>   zpy-bcrypt rejected hash: )rZ   r[   ÚlenrK   r]   r^   )	r_   r   rR   rS   rE   Ú
bcrypt_modÚlockr5   rU   s	     €€€€€€€r9   Úcheck_pybcryptz;_bcrypt_test.fuzz_verifier_pybcrypt.<locals>.check_pybcrypt  s¿   ø€ á" 6¨4×+AÑ+A×+SÑ+SÓTˆFÜ�6‹{˜SÒ Ø  ˜�Øˆt�‰ ¨(Ð3Ô4Ø $ q r (Ñ*�ðJÙÚØ)×0Ñ0°¸Ó>À$ÑF÷ ™ð &×,Ñ,¨V°TÓ:¸dÑBÐB÷ ˜ûô ò JÝ Á$Ð!HÓIÐIðJús0   ÁB ÁBÁ(	B Á2B ÂBÂB ÂB ÂB+)rH   r   rR   rS   r   rE   rc   rI   rU   Ú_load_backend_mixinrf   Ú
_calc_lock)r5   r   r   rc   Úloadedrl   rR   rS   rE   rj   rk   rU   s   `     @@@@@@r9   rO   z#_bcrypt_test.fuzz_verifier_pybcryptñ   sL   þ€ ÷	
÷ 	
õ 	0à!×5Ñ5°jÀ%ÓHˆÙØåCà×*Ñ*ˆ÷	Jò 	Jð Ðr:   c                 óz   ‡ ‡‡‡‡‡‡— ddl mŠmŠmŠmŠ ddlmŠ 	 ddlmŠ ˆˆˆˆˆˆ ˆfd„}|S # t        $ r Y y w xY w)Nr   )r   rR   rE   rS   rd   )ÚEnginec                 óþ   •—  ‰| ‰j                   j                  «      }  |j                  ‰‰f«      r	‰|dd z   }n( |j                  ‰«      r‰|dd z   }| rt        | d«      }  ‰d«      j	                  | |«      |k(  S )Úbcryptorr>   NrW   rX   F)rZ   r[   rK   r   Úhash_key)	r_   r   rq   r   rR   rS   rE   r5   rU   s	     €€€€€€€r9   Úcheck_bcryptorz;_bcrypt_test.fuzz_verifier_bcryptor.<locals>.check_bcryptor  s‰   ø€ á" 6¨4×+AÑ+A×+SÑ+SÓTˆFØˆt�‰ ¨(Ð3Ô4Ø $ q r (Ñ*‘Ø �—‘ Ô)ð   $ q r (Ñ*�ÙÜ*¨6°2Ó6�FÙ˜%“=×)Ñ)¨&°$Ó7¸4Ñ?Ð?r:   )
rH   r   rR   rE   rS   rI   rU   Úbcryptor.enginerq   ra   )r5   ru   rq   r   rR   rS   rE   rU   s   ` @@@@@@r9   rP   z#_bcrypt_test.fuzz_verifier_bcryptor  s<   þ€ çQÓQÝ/ð	Ý.÷	@ò 	@ð Ðøô ò 	Ùð	ús   ›. ®	:¹:c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ú_bcrypt_test.FuzzHashGeneratorc                 óJ  •— t         t        j                  | �  «       }|d   }|d   }|d   }|j	                  d«      }|t
        k(  r|d= |S |t        k(  rN|rLt        t        |«      t        t        |«      «      «      t        |«      k(  r| j                  «       \  |d<   |d<   |S )Nr_   ÚotherÚsettingsrL   )r0   r   rZ   Úgenerater,   r   r   r   r   ri   Úrandom_password_pair)r5   Úoptsr_   rz   r{   rL   r8   s         €r9   r|   z'_bcrypt_test.FuzzHashGenerator.generate+  s¬   ø€ Üœ×7Ñ7¸ÑGÓIˆDà˜(‘^ˆFØ˜‘MˆEØ˜JÑ'ˆHØ—L‘L Ó)ˆEàœÒ à˜WÐ%ð ˆKð œ'Ò!¡e´¼hÀu»oÌsÔS[Ð\bÓScÓOdÓ0eÔiqÐrxÓiyÒ0yð 15×0IÑ0IÓ0KÑ-��X‘  W¡àˆKr:   c                 ó*   — | j                  dddd«      S ©Né   é   é   é   ©Úrandintgauss©r5   s    r9   Úrandom_roundsz,_bcrypt_test.FuzzHashGenerator.random_rounds>  ó   € à×$Ñ$ Q¨¨1¨aÓ0Ð0r:   )Ú__name__Ú
__module__Ú__qualname__r|   rˆ   Ú__classcell__©r8   s   @r9   rZ   rx   )  s   ø„ ô	ö&	1r:   rZ   ))rG   z<$2a$04$oaQbBqq8JnSM1NHRPQGXORY4Vw3bdHKLIXTecPDRAcJ98cz1ilveOz<$2a$04$oaQbBqq8JnSM1NHRPQGXOOY4Vw3bdHKLIXTecPDRAcJ98cz1ilveO)rG   ú<$2a$04$yjDgE74RJkeqC0/1NheSScrvKeu9IbKDpcQf/Ox3qsrRS/Kw42qISú<$2a$04$yjDgE74RJkeqC0/1NheSSOrvKeu9IbKDpcQf/Ox3qsrRS/Kw42qIS)rG   z<$2a$04$yjDgE74RJkeqC0/1NheSSOrvKeu9IbKDpcQf/Ox3qsrRS/Kw42qIVr�   c                 ó”  ‡ — ‰ j                  d«       ‰ j                  }d}ˆ fd„}t        d«      D ]  } ||j                  «       «       Œ t        d«      D ]3  } ||j	                  |j
                  ¬«      j                  d«      «       Œ5 ‰ j                  d|g«      5  |j                  d	d
d¬«      }ddd«       ‰ j                  d«       ‰ j                  }|D �]n  \  }}}	‰ j                  |g«      5  ‰ j                  |j                  ||«      |	«       ddd«       ‰ j                  g «      5  ‰ j                  |j                  ||	«      |	«       ddd«       ‰ j                  |g«      5  ‰ j                  |j                  ||«      «       ddd«       ‰ j                  g «      5  ‰ j                  |j                  ||	«      «       ddd«       ‰ j                  |g«      5  ‰ j                  |j                  |«      |	«       ddd«       ‰ j                  g «      5  ‰ j                  |j                  |	«      |	«       ddd«       �Œq ‰ j                  |j                  d«      d«       y# 1 sw Y   �Œ¾xY w# 1 sw Y   �ŒfxY w# 1 sw Y   �Œ7xY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒÙxY w# 1 sw Y   Œ©xY w# 1 sw Y   �ŒêxY w)z2test passlib correctly handles bcrypt padding bitsr   z.*incorrectly set padding bitsc                 óŽ   •—  | j                   d«      rt        | «      dk\  s
J d| ›�«       ‚‰j                  | d   dv d| ›�«       y )N)z$2a$z$2b$é   zunexpectedly malformed hash: z.Oeuz%unused bits incorrectly set in hash: )rK   ri   Ú
assertTrue)r   r5   s    €r9   Úcheck_paddingz:_bcrypt_test.test_90_bcrypt_padding.<locals>.check_paddingl  sM   ø€ Ø"�4—?‘?Ð#3Ô4¼¸T»Àbºñ <Ù59Ð;ó<ÐHà�O‰O˜D ™H¨Ñ.ÙIMÐOõQr:   rƒ   rW   ©r=   Úbobzsalt too largez.....................A.r�   T)Úsaltr=   ÚrelaxedNz<$2b$05$.....................................................z$md5$abc)Úrequire_TEST_MODEÚhandlerr
   Ú	genconfigÚusingÚ
min_roundsr   ÚassertWarningListÚassertEqualÚknown_incorrect_paddingÚgenhashr”   ÚverifyÚnormhash)
r5   rD   Ú	corr_descr•   Úir   ÚsamplesÚpwdÚbadÚgoods
   `         r9   Útest_90_bcrypt_paddingz#_bcrypt_test.test_90_bcrypt_padding^  sG  ø€ à×Ñ˜vÔ&ð —‘ˆØ4ˆ	ô
	Qô
 ˜–ˆAÙ˜&×*Ñ*Ó,Õ-ð ä˜–ˆAÙ˜&Ÿ,™,¨f×.?Ñ.?˜,Ó@×EÑEÀeÓLÕMð ð ×#Ñ#Ð%5°yÐ$AÕBØ×#Ñ#¨¸qÈ$Ð#ÓOˆD÷ Cà×Ñ˜Ð:Ô;ð
 ×.Ñ.ˆÜ%‰NˆC��dð ×'Ñ'¨¨Õ4Ø× Ñ  §¡°°SÓ!9¸4Ô@÷ 5à×'Ñ'¨Õ+Ø× Ñ  §¡°°TÓ!:¸DÔA÷ ,ð ×'Ñ'¨¨Õ4Ø—‘ §¡¨c°3Ó 7Ô8÷ 5à×'Ñ'¨Õ+Ø—‘ §¡¨c°4Ó 8Ô9÷ ,ð ×'Ñ'¨¨Õ4Ø× Ñ  §¡°Ó!5°tÔ<÷ 5à×'Ñ'¨Õ+Ø× Ñ  §¡°Ó!6¸Ô=÷ ,Ñ+ð# &ð* 	×Ñ˜Ÿ™¨Ó4°jÕA÷; CÑBú÷ 5Ñ4úç+Ñ+ú÷ 5Ñ4úç+Ð+ú÷ 5Ð4úç+Ñ+úsT   Â I1Ã7#I>Ä3#JÅ0"JÆ+"J%Ç'"J1È""J=É1I;É>J	ÊJ	ÊJ"	Ê%J.	Ê1J:	Ê=K	c                 óÄ   — | j                   j                  d¬«      }d}d}| j                  |j                  |«      «       | j	                  |j                  |«      «       y)z$needs_update corrects bcrypt paddingr>   r–   r�   r�   N)r›   r�   r”   Úneeds_updateÚassertFalse)r5   rD   ÚBAD1ÚGOOD1s       r9   Útest_needs_update_w_paddingz(_bcrypt_test.test_needs_update_w_padding˜  sX   € ð —‘×#Ñ#¨1Ð#Ó-ˆð
 OˆØNˆà�‰˜×+Ñ+¨DÓ1Ô2Ø×Ñ˜×,Ñ,¨UÓ3Õ4r:   ) rŠ   r‹   rŒ   Ú__doc__r   rD   r›   Úreduce_default_roundsÚfuzz_salts_need_bcrypt_repairr   Úknown_correct_hashesr   ÚCONFIG_2ÚCONFIG_AÚextendÚknown_correct_configsÚknown_unidentified_hashesÚknown_malformed_hashesÚplatform_crypt_supportr1   r@   rM   r   Úfuzz_verifiersrN   rO   rP   rZ   r¡   r«   r±   r�   rŽ   s   @r9   r   r      s@  ø„ Ù$Ø�k‰k€GØ ÐØ$(Ð!ð 	UØSØTØTØLð 	PØPØQØLð	Pð	Pð	Lð	Pð	Pð	Pð	Pð	Pð 	Vð ˜4˜CÐ	 Ð"`ÐaØ
˜4˜CÐ	 Ð"`ÐaØ
˜4˜CÐ	 Ð"`ÐaØ
˜4˜CÐ	 Ð"`Ðað 	MØMØOð	Pð	Pð 
ØNð	Pð 
ØNð	PðeU
Ðñn �Ôð %ˆØ%ˆØ×#Ñ#Ø�Ð=Ñ=Ð>Ø�Ð=Ñ=Ð>Ø�HÐ@Ñ@ÐAØ�HÐ@Ñ@ÐAØ�xÐ"CÑCÐDØ�xÐ"CÑCÐDØ�xÐ"CÑCÐDØ�xÐ"CÑCÐDØ˜8Ð&GÑGÐHØ˜8Ð&GÑGÐHð%
ô 	ð 
)¨+Ø	Gð	IðÐð 	GØFð!Ðò
ÐòÐôaô :òað !×/Ñ/ð 3ñ €Nòò@òBô.1˜K×9Ñ9ô 1ò8Ðò28Böt5r:   r   rD   re   rs   c            	       óv   — e Zd Zej                  D � ��cg c]  }t        |d   «      r|‘Œ c}}} ZdZyc c}}} w )Úbcrypt_os_crypt_testr   FN)rŠ   r‹   rŒ   r   rµ   r	   Úhas_os_crypt_fallback)Ú.0Úrowr	   s   000r9   r¿   r¿   ¯  sA   „ ð ,8×+LÒ+Lõ <Ñ+L CÜ2°3°q±6Ô:ò  Ð+Ló <Ðð "Ñùô	<s   •4r¿   Úos_cryptr$   c                   óž  ‡ — e Zd ZdZej
                  ZdZdZdZ	dde
df e
j                  d«      dfde
d	f ed
d«      df ed
d«      dz   df ed
d«      dz   dfdde
df e
j                  d«      df ed
d«      df ed
d«      dz   df ed
d«      dz   dfgZddgZg d¢Zˆ fd„Zˆ fd„Zd„ Zd„ Z G d„ dej*                  «      Zd „ Zd!„ Zˆ xZS )"Ú_bcrypt_sha256_testz!base for BCrypt-SHA256 test casesTN)r   zJ$bcrypt-sha256$2a,5$E/e/2AOhqM5W/KJTFQzLce$F6dYSxOdAEoJZO2eoHUZWZljW/e0TXO)ÚpasswordúJ$bcrypt-sha256$2a,5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzJ$bcrypt-sha256$2a,5$.US1fQ4TQS.ZTz/uJ5Kyn.$QNdPDOTKKT5/sovNz1iWg26quOU4Pjezutf-8)rÆ   zJ$bcrypt-sha256$2b,5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzJ$bcrypt-sha256$2b,5$.US1fQ4TQS.ZTz/uJ5Kyn.$QNdPDOTKKT5/sovNz1iWg26quOU4PjeÚabc123rX   zJ$bcrypt-sha256$2b,5$X1g1nh3g0v4h6970O68cxe$r/hyEtqJ0teqPEmfTLoZ83ciAI1Q74.ÚqwrzJ$bcrypt-sha256$2b,5$X1g1nh3g0v4h6970O68cxe$021KLEif6epjot5yoxk0m8I0929ohEaÚxyzzJ$bcrypt-sha256$2b,5$X1g1nh3g0v4h6970O68cxe$7.1kgpHduMGEjvM3fX6e/QCvfn6OKja)r   zR$bcrypt-sha256$v=2,t=2b,r=5$E/e/2AOhqM5W/KJTFQzLce$WFPIZKtDDTriqWwlmRFfHiOTeheAZWe)rÆ   úR$bcrypt-sha256$v=2,t=2b,r=5$5Hg1DKFqPE8C2aflZ5vVoe$wOK1VFFtS8IGTrGa7.h5fs0u84qyPbSzR$bcrypt-sha256$v=2,t=2b,r=5$.US1fQ4TQS.ZTz/uJ5Kyn.$pzzgp40k8reM1CuQb03PvE0IDPQSdV6zR$bcrypt-sha256$v=2,t=2b,r=5$X1g1nh3g0v4h6970O68cxe$zu1cloESVFIOsUIo7fCEgkdHaI9SSuezR$bcrypt-sha256$v=2,t=2b,r=5$X1g1nh3g0v4h6970O68cxe$CBF9csfEdW68xv3DwE6xSULXMtqEFP.zR$bcrypt-sha256$v=2,t=2b,r=5$X1g1nh3g0v4h6970O68cxe$zC/1UDUG2ofEXB6Onr2vvyFzfhEOS3S)z*$bcrypt-sha256$2a,5$5Hg1DKFqPE8C2aflZ5vVoerÆ   rÇ   )z2$bcrypt-sha256$v=2,t=2b,r=5$5Hg1DKFqPE8C2aflZ5vVoerÆ   rË   )zJ$bcrypt-sha256$2a,5$5Hg1DKF!PE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzJ$bcrypt-sha256$2c,5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzJ$bcrypt-sha256$2x,5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzK$bcrypt-sha256$2a,05$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuz+$bcrypt-sha256$2a,5$5Hg1DKFqPE8C2aflZ5vVoe$zR$bcrypt-sha256$v=2,t=2b,r=5$5Hg1DKF!PE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzR$bcrypt-sha256$v=1,t=2b,r=5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzR$bcrypt-sha256$v=3,t=2b,r=5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzR$bcrypt-sha256$v=2,t=2c,r=5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzR$bcrypt-sha256$v=2,t=2a,r=5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzR$bcrypt-sha256$v=2,t=2x,r=5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuzS$bcrypt-sha256$v=2,t=2b,r=05$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyuz3$bcrypt-sha256$v=2,t=2b,r=5$5Hg1DKFqPE8C2aflZ5vVoe$c                 ó¢  •— t        d«      r›| j                  dk(  rŒd}t        j                  j	                  |«      }|r,| j                  t        j                  j                  ||«       n*| j                  t        j                  j                  |«       dt        j                  |<   t        t        | �+  «        t        j                  dd«       y )Nr   r$   r%   Úenabledr'   r(   )r   r)   r*   r+   r,   r-   r.   r/   r0   rÅ   r1   r2   r3   r4   s      €r9   r1   z_bcrypt_sha256_test.setUp@  sŽ   ø€ ä�VÔ §¡°Ò!:Ø*ˆCÜ—:‘:—>‘> #Ó&ˆDÙØ—‘¤§
¡
× 6Ñ 6¸¸TÕBà—‘¤§
¡
× 6Ñ 6¸Ô<Ø'ŒB�J‰J�s‰OÜÔ! 4Ñ.Ô0Ü×Ñ Ð*_Õ`r:   c                 ón   •— | j                   dk(  r|j                  dd«       t        t        | �  |«       y r<   )r)   r?   r0   rÅ   r@   rA   s     €r9   r@   z%_bcrypt_sha256_test.populate_settingsM  s-   ø€ à�<‰<˜9Ò$Ø�O‰O˜H aÔ(ÜÔ! 4Ñ:¸4Õ@r:   c                 ó$   — | j                  d«      ‚)Nzmultiple idents not supported)ÚskipTestr‡   s    r9   Úrequire_many_identsz'_bcrypt_sha256_test.require_many_identsW  s   € Ø�m‰mÐ;Ó<Ð<r:   c                 ó`   — | j                   } |d¬«       | j                  t        |dd¬«       y )NT)Úuse_defaultsz$2y$)rL   rÓ   )r›   ÚassertRaisesr^   )r5   r›   s     r9   Útest_30_HasOneIdentz'_bcrypt_sha256_test.test_30_HasOneIdentZ  s*   € à—,‘,ˆÙ˜TÕ"Ø×Ñœ* g°VÈ$ÐÕOr:   c                   ó   — e Zd Zd„ Zd„ Zy)ú%_bcrypt_sha256_test.FuzzHashGeneratorc                 ó*   — | j                  dddd«      S r€   r…   r‡   s    r9   rˆ   z3_bcrypt_sha256_test.FuzzHashGenerator.random_roundsf  r‰   r:   c                  ó   — y)NÚ2b© r‡   s    r9   Úrandom_identz2_bcrypt_sha256_test.FuzzHashGenerator.random_identj  s   € Ør:   N)rŠ   r‹   rŒ   rˆ   rÜ   rÛ   r:   r9   rZ   r×   d  s   „ ò	1ó	r:   rZ   c                 ó^  — | j                   }| j                  |j                  d«       |j                  d¬«      }| j                  |j                  d«       | j	                  t
        |j                  d¬«       |j                  dd¬«      }| j	                  t
        |j                  d¬«       y )Né   r„   )Úversioniç  Ú2a)rß   rL   )rL   )r›   r    rß   r�   rÔ   r^   )r5   r›   Úsubclss      r9   Útest_using_versionz&_bcrypt_sha256_test.test_using_versionq  s�   € à—,‘,ˆØ×Ñ˜Ÿ™¨!Ô,ð —‘ q�Ó)ˆØ×Ñ˜Ÿ™¨Ô+ð 	×Ñœ* g§m¡m¸SÐÔAð —‘ q°�Ó5ˆØ×Ñœ* g§m¡m¸4ÐÕ@r:   c                 óì  — ddl m} ddlm} ddlm} d}d}  |d|j                  d«      «      |j                  d«      «      } ||«      j                  d«      }| j                  |d	«        |d
|d¬«      j                  |«      }| j                  |d«       | j                  |j                  |d|z   |z   «      «       | j                  d
|d¬«      j                  |«      }| j                  ||«       y)z6
        test digest calc v2 matches bcrypt()
        r   )rD   )Úcompile_hmac)Ú	b64encodeÚnyKYxTAvjmy6lMDYMl11UurG   Úsha256Úasciiz,J5TlyIDm+IcSWmKiDJm+MeICndBkFVPn4kKdJW8f+xY=rÚ   é   )rL   r˜   r=   zM0wE0Ov/9LXoQFCe.jRHu3MSHPF54Taz$2b$12$N)Úpasslib.hashrD   Úpasslib.crypto.digesträ   Úpasslib.utils.binaryrå   ÚencodeÚdecoder    Ú_calc_checksumr”   r£   r›   )	r5   rD   rä   rå   r˜   r_   Útemp_digestÚbcrypt_digestÚresults	            r9   Útest_calc_digest_v2z'_bcrypt_sha256_test.test_calc_digest_v2�  sä   € õ 	(Ý6Ý2ð (ˆØˆØB‘l 8¨T¯[©[¸Ó-AÓBÀ6Ç=Á=ÐQXÓCYÓZˆÙ Ó,×3Ñ3°GÓ<ˆØ×Ñ˜Ð&TÔUñ  T°¸RÔ@×OÑOÐP[Ó\ˆØ×Ñ˜Ð(IÔJØ�‰˜Ÿ™ k°9¸tÑ3CÀmÑ3SÓTÔUð —‘ D¨t¸B�Ó?×NÑNÈvÓVˆØ×Ñ˜ Õ/r:   )rŠ   r‹   rŒ   r²   r   Úbcrypt_sha256r›   r³   Úforbidden_charactersr´   r   rí   r   rµ   r¹   r»   r1   r@   rÑ   rÕ   r   rZ   râ   ró   r�   rŽ   s   @r9   rÅ   rÅ   ½  s€  ø„ Ù'Ø× Ñ €GØ ÐØÐØ$(Ð!ð	Zð	Zð 
ØXð	Zà	ˆ×	Ñ	˜GÓ	$ØXð	Zð	Zà	ØXð	Zñ
 
�x Ó	$ØXð	Zá	�x Ó	$ uÑ	,ØXð	Zá	�x Ó	$ uÑ	,ØXð	Zð	bð	bð 
Ø`ð	bà	ˆ×	Ñ	˜GÓ	$Ø`ð	bñ
 
�x Ó	$Ø`ð	bá	�x Ó	$ uÑ	,Ø`ð	bá	�x Ó	$ uÑ	,Ø`ð	bðw=
ÐðB	cð	kðÐò/ÐôhaôAò=òPô˜K×9Ñ9ô òAö 0r:   rÅ   c                   ó    — e Zd Zed„ «       ZdZy)Úbcrypt_sha256_os_crypt_testc                 ó*   — t         j                  «       S )N)r¿   Ú_get_safe_crypt_handler_backend)Úclss    r9   rù   z;bcrypt_sha256_os_crypt_test._get_safe_crypt_handler_backend¦  s   € ä#×CÑCÓEÐEr:   FN)rŠ   r‹   rŒ   Úclassmethodrù   rÀ   rÛ   r:   r9   r÷   r÷   ¤  s   „ àñFó ðFð "Ñr:   r÷   )'r²   Ú
__future__r   ÚloggingÚ	getLoggerrŠ   Úlogr*   r2   Úpasslibr   rH   r   r   rI   r   r   r	   Úpasslib.utils.compatr
   r   Úpasslib.tests.utilsr   r   Úpasslib.tests.test_handlersr   r   Úcreate_backend_caseÚbcrypt_bcrypt_testÚbcrypt_pybcrypt_testÚbcrypt_bcryptor_testr¿   Úbcrypt_builtin_testrÅ   Úbcrypt_sha256_bcrypt_testÚbcrypt_sha256_pybcrypt_testÚbcrypt_sha256_bcryptor_testr÷   Úbcrypt_sha256_builtin_testrÛ   r:   r9   Ú<module>r     s  ðÙ Eõ &ã Ð'�g×'Ñ'¨Ó1�Û 	Û õ ß 5ß FÑ Fß ,ß 6Ý 3ôM5�;ô M5ðh "×5Ñ5°hÓ?Ð Ø#×7Ñ7¸
ÓCÐ Ø#×7Ñ7¸
ÓCÐ ô"˜<×;Ñ;¸JÓGô "ð #×6Ñ6°yÓAÐ ô
\0˜+ô \0ðF 0×CÑCÀHÓMÐ Ø1×EÑEÀjÓQÐ Ø1×EÑEÀjÓQÐ ô"Ð"5×"IÑ"IÈ*Ó"Uô "ð 1×DÑDÀYÓOÑ r:   