§
    HŠtjms  ã                   ó¶  — 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                     d¦  «        Ze                     d¦  «        Ze                     d¦  «        Z G d„ de                     d¦  «        ¦  «        Ze                     d¦  «        Z  G d„ de¦  «        Z!e!                     d¦  «        Z"e!                     d¦  «        Z#e!                     d¦  «        Z$ G d„ de!                     d¦  «        ¦  «        Z%e!                     d¦  «        Z&dS )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#¦  «        rUd$Zd%Ze
                     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j        ¦  «        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                             |¦  «        }|r'|                      t          j        j        ||¦  «         n%|                      t          j        j        |¦  «         dt          j        |<   t          t          | ¦  «         
                    ¦   «          t          j        dd¦  «         d S )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      €ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/passlib/tests/test_handlers_bcrypt.pyr1   z_bcrypt_test.setUp«   s¹   ø€ å�VÑÔð 	% ¤°Ò!:Ð!:Ø*ˆCÝ”:—>’> #Ñ&Ô&ˆDØð =Ø—’¥¤
Ô 6¸¸TÑBÔBÐBÐBà—’¥¤
Ô 6¸Ñ<Ô<Ð<Ø$�BŒJ�s‰Oå�l˜DÑ!Ô!×'Ò'Ñ)Ô)Ð)õ 	Ô Ð*_Ñ`Ô`Ð`Ð`Ð`ó    c                 óš   •— | j         dk    r|                     dd¦  «         t          t          | ¦  «                             |¦  «         d S ©Nr$   Úroundsé   )r)   Ú
setdefaultr0   r   Úpopulate_settings©r5   Úkwdsr8   s     €r9   r@   z_bcrypt_test.populate_settings»   sH   ø€ àŒ<˜9Ò$Ð$Ø�OŠO˜H aÑ(Ô(Ð(Ý�l˜DÑ!Ô!×3Ò3°DÑ9Ô9Ð9Ð9Ð9r:   c                 ó”   — ddl m}m}m} ddlm} |                     |¦  «        } |d|dz   ¦  «        pd                     |¦  «        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Ä   sq   € àFÐFÐFÐFÐFÐFÐFÐFÐFÐFØ,Ð,Ð,Ð,Ð,Ð,Ø×"Ò" 4Ñ(Ô(ˆØ�
˜6 5Ð+FÑ#FÑGÔ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
Š	n# t          $ r Y d S w xY w |¦   «         rd S ˆˆˆˆˆ	ˆ ˆ
fd„}|S )Nr   )r   ÚIDENT_2AÚIDENT_2Br   rE   Ú_detect_pybcrypt)Úto_native_strr   c                 ó°  •—  ‰| ‰j         j        ¦  «        }  |j        ‰¦  «        r‰|dd…         z   }nX |j        ‰¦  «        r ‰|dd…         z   }| rt          | d¦  «        } n( |j        ‰¦  «        r‰j        dk    r‰|dd…         z   } ‰|¦  «        }	 ‰                     | |¦  «        |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   ø€ à�X˜f dÔ&<Ô&NÑOÔOˆFØˆtŒ˜xÑ(Ô(ð +à $ q r r¤(Ñ*��Ø �” Ñ)Ô)ð +ð   $ q r r¤(Ñ*�Øð 7Ý*¨6°2Ñ6Ô6�FøØ �” Ñ*Ô*ð +¨vÔ/AÀWÒ/LÐ/LØ $ q r r¤(Ñ*�Ø�8˜D‘>”>ˆDðZØ—}’} V¨TÑ2Ô2°dÒ:Ð:øÝð Zð Zð ZÝ �jÈ4È4È4ÐQWÐQWÐQWÐ!XÑYÔYÐYðZøøøs   ÂB4 Â4!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Ñ   sã   øøøøøøø€ àmÐmÐmÐmÐmÐmÐmÐmÐmÐmÐmÐmÐmÐmÐmÐmØ9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð	ØˆMˆMˆMˆMøÝð 	ð 	ð 	ØˆFˆFð	øøøàÐÑÔð 	ØˆFð	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð( Ðs   ¡& ¦
4³4c                 ó¤   ‡ ‡‡‡‡	‡
‡— ddl m}mŠmŠm}mŠm} ddlmŠ | 	                    dd¦  «        }|sd S ddl m
Š	 |j        Š
ˆˆˆˆ	ˆ
ˆ ˆfd„}|S )Nr   )r   rR   rS   r   rE   Ú_PyBcryptBackend©rU   ÚpybcryptF)Ú	_pybcryptc                 óŽ  •—  ‰| ‰j         j        ¦  «        } t          | ¦  «        dk    r
| dd…         }  |j        ‰‰f¦  «        r‰|dd…         z   }	 ‰r6‰5  ‰                     | |¦  «        |k    cddd¦  «         S # 1 swxY w Y   dS ‰                     | |¦  «        |k    S # 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  sY  ø€ à"�] 6¨4Ô+AÔ+SÑTÔTˆFÝ�6‰{Œ{˜SÒ Ð Ø   œ�ØˆtŒ ¨(Ð3Ñ4Ô4ð +Ø $ q r r¤(Ñ*�ðJØð CØð Gð GØ)×0Ò0°¸Ñ>Ô>À$ÒFðGð Gð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð Gð Gð &×,Ò,¨V°TÑ:Ô:¸dÒBÐBøÝð Jð Jð JÝ �jÀ$À$Ð!HÑIÔIÐIðJøøøs6   ÁB' ÁB Á3B' Â BÂB' ÂBÂB' ÂB' Â'C)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ñ   só   øøøøøøø€ ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	0Ð/Ð/Ð/Ð/Ð/à!×5Ò5°jÀ%ÑHÔHˆØð 	ØˆFàCÐCÐCÐCÐCÐCàÔ*ˆð	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð Ðr:   c                 ó€   ‡ ‡‡‡‡‡‡— ddl mŠmŠmŠmŠ ddlmŠ 	 ddlmŠ n# t          $ r Y d S w xY wˆˆˆˆˆˆ ˆfd„}|S )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¦  «                             | |¦  «        |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Ô+SÑTÔTˆFØˆtŒ ¨(Ð3Ñ4Ô4ð 7Ø $ q r r¤(Ñ*��Ø �” Ñ)Ô)ð 7ð   $ q r r¤(Ñ*�Øð 7Ý*¨6°2Ñ6Ô6�FØ�6˜%‘=”=×)Ò)¨&°$Ñ7Ô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ÐQÐQÐQÐQÐQÐQÐQÐQÐQÐQØ/Ð/Ð/Ð/Ð/Ð/ð	Ø.Ð.Ð.Ð.Ð.Ð.Ð.øÝð 	ð 	ð 	ØˆFˆFð	øøøð	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð Ðs   ›" ¢
0¯0c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ú_bcrypt_test.FuzzHashGeneratorc                 ó¼  •— t          t          j        | ¦  «                             ¦   «         }|d         }|d         }|d         }|                     d¦  «        }|t
          k    r|d= nr|t          k    rg|ret          t          |¦  «        t          t          |¦  «        ¦  «        ¦  «        t          |¦  «        k    r|  
                    ¦   «         \  |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¸Ñ>Ô>×GÒGÑIÔIˆDà˜(”^ˆFØ˜”MˆEØ˜JÔ'ˆHØ—L’L Ñ)Ô)ˆEà�Ò Ð à˜WÐ%Ð%à�'Ò!Ð! eÐ!µ½hÀu¹o¼oÍsÕS[Ð\bÑScÔScÑOdÔOdÑ0eÔ0eÕiqÐrxÑiyÔiyÒ0yÐ0yð 15×0IÒ0IÑ0KÔ0KÑ-��X‘  W¡àˆKr:   c                 ó2   — |                       dddd¦  «        S ©Né   é   é   é   ©Úrandintgauss©r5   s    r9   Úrandom_roundsz,_bcrypt_test.FuzzHashGenerator.random_rounds>  ó   € à×$Ò$ Q¨¨1¨aÑ0Ô0Ð0r:   )Ú__name__Ú
__module__Ú__qualname__r|   rˆ   Ú__classcell__©r8   s   @r9   rZ   rx   )  sG   ø€ € € € € ð	ð 	ð 	ð 	ð 	ð&	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	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                 ó€  ‡ — ‰                       d¦  «         ‰ j        }d}ˆ fd„}t          d¦  «        D ]} ||                     ¦   «         ¦  «         Œ t          d¦  «        D ]9} ||                     |j        ¬¦  «                             d¦  «        ¦  «         Œ:‰                      d|g¦  «        5  |                     d	d
d¬¦  «        }ddd¦  «         n# 1 swxY w Y   ‰                      |d¦  «         ‰ j	        }|D �]\  }}}	‰                      |g¦  «        5  ‰                      | 
                    ||¦  «        |	¦  «         ddd¦  «         n# 1 swxY w Y   ‰                      g ¦  «        5  ‰                      | 
                    ||	¦  «        |	¦  «         ddd¦  «         n# 1 swxY w Y   ‰                      |g¦  «        5  ‰                      |                     ||¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   ‰                      g ¦  «        5  ‰                      |                     ||	¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   ‰                      |g¦  «        5  ‰                      |                     |¦  «        |	¦  «         ddd¦  «         n# 1 swxY w Y   ‰                      g ¦  «        5  ‰                      |                     |	¦  «        |	¦  «         ddd¦  «         n# 1 swxY w Y   �Œ‰                      |                     d¦  «        d¦  «         dS )z2test passlib correctly handles bcrypt padding bitsr   z.*incorrectly set padding bitsc                 óª   •—  | j         d¦  «        rt          | ¦  «        dk    sJ d| ›�¦   «         ‚‰                     | d         dv d| ›�¦  «         d S )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  sx   ø€ Ø"�4”?Ð#3Ñ4Ô4ð <½¸T¹¼Àbº¸¸¸Ø59°TÐ;ñ :I¼ÐHà�OŠO˜D œH¨Ð.Ð.ØIMÈÐOñQô Qð Qð Qð 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^  s/  ø€ à×Ò˜vÑ&Ô&Ð&ð ”ˆØ4ˆ	ð
	Qð 	Qð 	Qð 	Qð 	Qõ
 ˜‘”ð 	.ð 	.ˆAØˆM˜&×*Ò*Ñ,Ô,Ñ-Ô-Ð-Ð-Ý˜‘”ð 	Nð 	NˆAØˆM˜&Ÿ,š,¨fÔ.?˜,Ñ@Ô@×EÒEÀeÑLÔLÑMÔMÐMÐMð
 ×#Ò#Ð%5°yÐ$AÑBÔBð 	Pð 	PØ×#Ò#¨¸qÈ$Ð#ÑOÔOˆDð	Pð 	Pð 	Pñ 	Pô 	Pð 	Pð 	Pð 	Pð 	Pð 	Pð 	Pøøøð 	Pð 	Pð 	Pð 	Pà×Ò˜Ð:Ñ;Ô;Ð;ð
 Ô.ˆØ%ð 	>ñ 	>‰NˆC��dð ×'Ò'¨¨Ñ4Ô4ð Að AØ× Ò  §¢°°SÑ!9Ô!9¸4Ñ@Ô@Ð@ðAð Að Añ Aô Að Að Að Að Að Að Aøøøð Að Að Að Aà×'Ò'¨Ñ+Ô+ð Bð BØ× Ò  §¢°°TÑ!:Ô!:¸DÑAÔAÐAðBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bð ×'Ò'¨¨Ñ4Ô4ð 9ð 9Ø—’ §¢¨c°3Ñ 7Ô 7Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9à×'Ò'¨Ñ+Ô+ð :ð :Ø—’ §¢¨c°4Ñ 8Ô 8Ñ9Ô9Ð9ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð ×'Ò'¨¨Ñ4Ô4ð =ð =Ø× Ò  §¢°Ñ!5Ô!5°tÑ<Ô<Ð<ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =à×'Ò'¨Ñ+Ô+ð >ð >Ø× Ò  §¢°Ñ!6Ô!6¸Ñ=Ô=Ð=ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >ùð 	×Ò˜Ÿš¨Ñ4Ô4°jÑAÔAÐAÐAÐAs~   Â4CÃCÃ CÄ +EÅE	ÅE	Å7+F.Æ.F2	Æ5F2	Ç*HÈH		ÈH		È%*IÉI	É"I	É<*J2Ê2J6	Ê9J6	Ë*LÌL	ÌL	c                 óä   — | j                              d¬¦  «        }d}d}|                      |                     |¦  «        ¦  «         |                      |                     |¦  «        ¦  «         dS )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˜  sq   € ð ”×#Ò#¨1Ð#Ñ-Ô-ˆð
 OˆØNˆà�Š˜×+Ò+¨DÑ1Ô1Ñ2Ô2Ð2Ø×Ò˜×,Ò,¨UÑ3Ô3Ñ4Ô4Ð4Ð4Ð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€GØ ÐØ$(Ð!ð 	UØSØTØTØLð 	PØPØQØLð	Pð	Pð	Lð	Pð	Pð	Pð	Pð	Pð 	Vð ˜4˜C˜4Ô	 Ð"`ÐaØ
˜4˜C˜4Ô	 Ð"`ÐaØ
˜4˜C˜4Ô	 Ð"`ÐaØ
˜4˜C˜4Ô	 Ð"`Ðað 	MØMØOð	Pð	Pð 
ØNð	Pð 
ØNð	PðeU
Ððn €y�ÑÔð ð %ˆØ%ˆØ×#Ò#Ø�Ð=Ñ=Ð>Ø�Ð=Ñ=Ð>Ø�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ð að að að :ð :ð :ð :ð :ðað að að !Ô/ð 3ñ €Nðð ð ð@ð ð ðBð ð ð.1ð 1ð 1ð 1ð 1˜KÔ9ñ 1ô 1ð 1ð8ð ð Ðð28Bð 8Bð 8Bðt5ð 5ð 5ð 5ð 5ð 5ð 5r:   r   rD   re   rs   c                   ó4   — e Zd Zd„ ej        D ¦   «         ZdZdS )Úbcrypt_os_crypt_testc                 ó<   — g | ]}t          |d          ¦  «        ¯|‘ŒS )r   )r	   )Ú.0Úrows     r9   ú
<listcomp>zbcrypt_os_crypt_test.<listcomp>²  s8   € ð <ð <ð < CÝ2°3°q´6Ñ:Ô:ð<˜Cð <ð <ð <r:   FN)rŠ   r‹   rŒ   r   rµ   Úhas_os_crypt_fallback© r:   r9   r¿   r¿   ¯  s9   € € € € € ð<ð <¨<Ô+Lð <ñ <ô <Ðð "ÐÐÐr:   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                             |¦  «        }|r'|                      t          j        j        ||¦  «         n%|                      t          j        j        |¦  «         dt          j        |<   t          t          | ¦  «         
                    ¦   «          t          j        dd¦  «         d S )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¸¸TÑBÔBÐBÐBà—’¥¤
Ô 6¸Ñ<Ô<Ð<Ø'�BŒJ�s‰OÝÕ! 4Ñ(Ô(×.Ò.Ñ0Ô0Ð0ÝÔ Ð*_Ñ`Ô`Ð`Ð`Ð`r:   c                 óš   •— | j         dk    r|                     dd¦  «         t          t          | ¦  «                             |¦  «         d S r<   )r)   r?   r0   rÈ   r@   rA   s     €r9   r@   z%_bcrypt_sha256_test.populate_settingsM  sI   ø€ àŒ<˜9Ò$Ð$Ø�OŠO˜H aÑ(Ô(Ð(ÝÕ! 4Ñ(Ô(×:Ò:¸4Ñ@Ô@Ð@Ð@Ð@r:   c                 ó,   — |                       d¦  «        ‚)Nzmultiple idents not supported)ÚskipTestr‡   s    r9   Úrequire_many_identsz'_bcrypt_sha256_test.require_many_identsW  s   € Ø�mŠmÐ;Ñ<Ô<Ð<r:   c                 óh   — | j         } |d¬¦  «         |                      t          |dd¬¦  «         d S )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È$ÐÑOÔOÐOÐOÐOr:   c                   ó   — e Zd Zd„ Zd„ ZdS )ú%_bcrypt_sha256_test.FuzzHashGeneratorc                 ó2   — |                       dddd¦  «        S r€   r…   r‡   s    r9   rˆ   z3_bcrypt_sha256_test.FuzzHashGenerator.random_roundsf  r‰   r:   c                 ó   — dS )NÚ2brÅ   r‡   s    r9   Úrandom_identz2_bcrypt_sha256_test.FuzzHashGenerator.random_identj  s   € Ø�4r:   N)rŠ   r‹   rŒ   rˆ   rÞ   rÅ   r:   r9   rZ   rÚ   d  s2   € € € € € ð	1ð 	1ð 	1ð	ð 	ð 	ð 	ð 	r:   rZ   c                 ób  — | j         }|                      |j        d¦  «         |                     d¬¦  «        }|                      |j        d¦  «         |                      t
          |j        d¬¦  «         |                     dd¬¦  «        }|                      t
          |j        d¬¦  «         d S )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¸SÐÑAÔAÐAð —’ q°�Ñ5Ô5ˆØ×Ò�* g¤m¸4ÐÑ@Ô@Ð@Ð@Ð@r:   c                 ó^  — ddl m} ddlm} ddlm} d}d}  |d|                     d¦  «        ¦  «        |                     d¦  «        ¦  «        } ||¦  «                             d¦  «        }|                      |d	¦  «          |d
|d¬¦  «         	                    |¦  «        }|                      |d¦  «         |  
                    |                     |d|z   |z   ¦  «        ¦  «         |                      d
|d¬¦  «         	                    |¦  «        }|                      ||¦  «         dS )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�  sY  € ð 	(Ð'Ð'Ð'Ð'Ð'Ø6Ð6Ð6Ð6Ð6Ð6Ø2Ð2Ð2Ð2Ð2Ð2ð (ˆØˆØB�l�l 8¨T¯[ª[¸Ñ-AÔ-AÑBÔBÀ6Ç=Â=ÐQXÑCYÔCYÑZÔZˆØ�i Ñ,Ô,×3Ò3°GÑ<Ô<ˆØ×Ò˜Ð&TÑUÔUÐUð ˜ T°¸RÐ@Ñ@Ô@×OÒOÐP[Ñ\Ô\ˆØ×Ò˜Ð(IÑJÔJÐJØ�Š˜Ÿš k°9¸tÑ3CÀmÑ3SÑTÔTÑUÔUÐUð —’ D¨t¸B�Ñ?Ô?×NÒNÈvÑ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ð að að aðAð Að Að Að Að=ð =ð =ðPð Pð Pðð ð ð ð ˜KÔ9ñ ô ð ðAð Að Að 0ð 0ð 0ð 0ð 0ð 0ð 0r:   rÈ   c                   ó(   — e Zd Zed„ ¦   «         ZdZdS )Úbcrypt_sha256_os_crypt_testc                 ó4   — t                                ¦   «         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ÔEÐEr:   FN)rŠ   r‹   rŒ   Úclassmethodrû   rÄ   rÅ   r:   r9   rù   rù   ¤  s4   € € € € € àðFð 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Ð Eð &Ð %Ð %Ð %Ð %Ð %à €€€Ð'�gÔ'¨Ñ1Ô1�Ø 	€	€	€	Ø €€€ð Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðM5ð M5ð M5ð M5ð M5�;ñ M5ô M5ð M5ðh "×5Ò5°hÑ?Ô?Ð Ø#×7Ò7¸
ÑCÔCÐ Ø#×7Ò7¸
ÑCÔCÐ ð"ð "ð "ð "ð "˜<×;Ò;¸JÑGÔGñ "ô "ð "ð #×6Ò6°yÑAÔAÐ ð
\0ð \0ð \0ð \0ð \0˜+ñ \0ô \0ð \0ðF 0×CÒCÀHÑMÔMÐ Ø1×EÒEÀjÑQÔQÐ Ø1×EÒEÀjÑQÔQÐ ð"ð "ð "ð "ð "Ð"5×"IÒ"IÈ*Ñ"UÔ"Uñ "ô "ð "ð 1×DÒDÀYÑOÔOÐ Ð Ð r:   