+
    ims                     R   R t ^ RIHt ^ RIt]P                  ! ]4      t^ RIt^ RIt^ RI	H
t
 ^ RIHtHt ^ RIHtHtHt ^ RIHtHt ^ RIHtHt ^ RIHt  ! R	 R
]4      t]P7                  R4      t]P7                  R4      t]P7                  R4      t ! R R]P7                  R4      4      t]P7                  R4      t  ! R R]4      t!]!P7                  R4      t"]!P7                  R4      t#]!P7                  R4      t$ ! R R]!P7                  R4      4      t%]!P7                  R4      t&R# )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                   V  a a ] tR t^t oRt]P                  tRtRt	RRRRRR R!R"R#R$R%R&R'R(R)R*R+R,R-R.R/R0R1R2R3R4R5]
R3]
R3.t]! R4      '       dz   R6tR7t]P                  R]R,           3R]R,           3R]R	,           3R]R
,           3R8]R	,           3R8]R,           3R9]R	,           3R9]R	,           3R:]R	,           3R:]R	,           3.
4       R]
R3.tRR.t. R;Ot. R<OtV 3R ltV 3R ltR t]P0                  R=,           tR tR tR t ! R R]P8                  4      t. R>OtR tR tRt Vt!V ;t"# )?_bcrypt_testzbase for BCrypt test casesT abcz<$2a$05$Z17AXnnlpzddNUvnC6cZNOSwMA/8oNiKnHTHTwLlBijfucQQlHjaGz<$2b$05$Z17AXnnlpzddNUvnC6cZNOSwMA/8oNiKnHTHTwLlBijfucQQlHjaGfullJ2ihDv8vVf7QZ9BsaRrKyqs2tkn55YqzXuQjdH.wPVNUZ/bOfstdW/FqB8QSjteev6gDwpVye3oMCUpLY85aTpfBNHD0Gaz2kIdfSj/4/R/Q6n847VTvc68BXiRYZCz$2a$04$uM6csdM8R9SXTex/gbTayez<$2a$04$uM6csdM8R9SXTex/gbTayezuvzFEufYGd2uB6of7qScLjQ4GwcD4Gz<$2f$12$EXRkfkdmXnagzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9qz<$2`$12$EXRkfkdmXnagzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9qc                  < \        R 4      '       d   V P                  R8X  d   Rp\        P                  P	                  V4      pV'       d,   V P                  \        P                  P                  W4       M*V P                  \        P                  P                  V4       R\        P                  V&   \        \        V `+  4        \        P                  ! RR4       R# )r   builtinPASSLIB_BUILTIN_BCRYPTtrueignore3.*backend is vulnerable to the bsd wraparound bug.*N)r   backendosenvironget
addCleanup__setitem____delitem__superr   setUpwarningsfilterwarningsselfkeyorig	__class__s   &  `/var/www/html/photoedit/myenv/lib/python3.14/site-packages/passlib/tests/test_handlers_bcrypt.pyr#   _bcrypt_test.setUp   s    V!:*C::>>#&D

 6 6B

 6 6<$BJJsOlD') 	*_`    c                t   < V P                   R 8X  d   VP                  R^4       \        \        V `  V4       R# r   roundsN)r   
setdefaultr"   r   populate_settingsr'   kwdsr*   s   &&r+   r2   _bcrypt_test.populate_settings   s,    <<9$OOHa(lD3D9r-   c                    ^ RI HpHpHp ^ RIHp VP                  V4      pV! RVR,           4      ;'       g    RP                  V4      # )z4check if OS crypt is expected to support given ident)bcryptr   IDENT_2Y)
safe_crypttestz04$5BJqKfqMQvV7nS.yUguNcur   )passlib.handlers.bcryptr7   r   r8   passlib.utilsr9   from_string
startswith)r'   r   r7   r   r8   r9   idents   &&     r+   crypt_supports_variant#_bcrypt_test.crypt_supports_variant   sB    FF,""4(65+F#FGMM2YYZ_``r-   c                   a aaaaa	a
 ^ RI HoHoHoHpHoHp ^ RIHpH	o
  ^ RI
o	T! 4       '       d   R# TTTTT	T T
3R lpT#   \         d     R# i ; i)    )r   IDENT_2AIDENT_2Br   r8   _detect_pybcrypt)to_native_strr   Nc                  < S! V SP                   P                  4      p VP                  ! S4      '       d   SVR,          ,           pMvVP                  ! S4      '       d&   SVR,          ,           pV '       d   \        V ^H4      p M9VP                  ! S4      '       d"   SP                  R8X  d   SVR,          ,           pS! V4      p SP                  W4      V8H  #   \         d    \        RT: RT : R24      hi ; i)r7      NN   NNz3.0.0zbcrypt rejected hash: z	 (secret=))FuzzHashGeneratorpassword_encodingr>   r   __version__hashpw
ValueError)	secretr   r   rD   rE   r8   r7   r'   r   s	   &&r+   check_bcrypt7_bcrypt_test.fuzz_verifier_bcrypt.<locals>.check_bcrypt   s    fd&<&<&N&NOFx(($r(*))  $r(**626F**v/A/AW/L$r(*D>DZ}}V2d:: Z 4QW!XYYZs   C  C;)r;   r   rD   rE   r   r8   rF   r<   rG   r   r7   ImportError)r'   r   rF   rG   rT   r   rD   rE   r8   r7   r   s   f    @@@@@@r+   fuzz_verifier_bcrypt!_bcrypt_test.fuzz_verifier_bcrypt   sJ    mm9	 	Z 	Z( 1  		s   A AAc                   a aaaa	a
a ^ RI HpHoHoHpHoHp ^ RIHo VP                  RR4      pV'       g   R# ^ RI H
o	 VP                  o
VVVV	V
V V3R lpV# )rC   )r   rD   rE   r   r8   _PyBcryptBackendrG   pybcryptFN)	_pybcryptc                  < S! V SP                   P                  4      p \        V 4      ^8  d
   V R,          p VP                  ! SS34      '       d   SVR,          ,           p S'       d*   S;_uu_ 4        SP	                  W4      V8H  uuRRR4       # SP	                  W4      V8H  #   + '       g   i     R# ; i  \
         d    \        RT: 24      hi ; i)r\   :N   NrI   Nzpy-bcrypt rejected hash: )rN   rO   lenr>   rQ   rR   )	rS   r   rD   rE   r8   
bcrypt_modlockr'   rG   s	   &&r+   check_pybcrypt;_bcrypt_test.fuzz_verifier_pybcrypt.<locals>.check_pybcrypt  s    "64+A+A+S+STF6{S (344$r(*J)00>$F  &,,V:dBB   J $!HIIJs6   #B< +
B< 5B(	
B< B< (B9	3B< 9B< <C)r;   r   rD   rE   r   r8   rZ   r<   rG   _load_backend_mixinr]   
_calc_lock)r'   r   r   rZ   loadedrc   rD   rE   r8   ra   rb   rG   s   f     @@@@@@r+   fuzz_verifier_pybcrypt#_bcrypt_test.fuzz_verifier_pybcrypt   sL    	
 	
 	0!55j%HC**	J 	J r-   c                   a aaaaaa ^ RI HoHoHoHo ^ RIHo  ^ RIHo TTTTTT T3R lpT#   \         d     R# i ; i)rC   )r   rD   r8   rE   r[   )EngineNc                @  < S! V SP                   P                  4      p VP                  ! SS34      '       d   SVR,          ,           pM<VP                  ! S4      '       d%   SVR,          ,           pV '       d   \        V ^H4      p S! R4      P	                  W4      V8H  # )bcryptorrI   rK   F)rN   rO   r>   r   hash_key)	rS   r   rk   r   rD   rE   r8   r'   rG   s	   &&r+   check_bcryptor;_bcrypt_test.fuzz_verifier_bcryptor.<locals>.check_bcryptor  s    "64+A+A+S+STF(344$r(*))  $r(**626F%=))&74??r-   )
r;   r   rD   r8   rE   r<   rG   bcryptor.enginerk   rV   )r'   ro   rk   r   rD   rE   r8   rG   s   f @@@@@@r+   fuzz_verifier_bcryptor#_bcrypt_test.fuzz_verifier_bcryptor  s<    QQ/	.	@ 	@   		s   / >>c                   8   a a ] tR tRt oV 3R ltR tRtVtV ;t# )_bcrypt_test.FuzzHashGeneratori)  c                z  < \         \        P                  V `  4       pVR ,          pVR,          pVR,          pVP	                  R4      pV\
        8X  d   VR V# V\        8X  dW   V'       dO   \        \        V4      \        \        V4      4      4      \        V4      8X  d   V P                  4       w  VR &   VR&   V# )rS   othersettingsr?   )r"   r   rN   generater   r   r   r   r   r`   random_password_pair)r'   optsrS   rw   rx   r?   r*   s   &     r+   ry   '_bcrypt_test.FuzzHashGenerator.generate+  s    77GID(^FMEJ'HLL)E W% K '!ehuosS[\bScOd0eiqrxiy0y 150I0I0K-XWKr-   c                *    V P                  ^^^^4      #    randintgaussr'   s   &r+   random_rounds,_bcrypt_test.FuzzHashGenerator.random_rounds>      $$Q1a00r-    )	__name__
__module____qualname____firstlineno__ry   r   __static_attributes____classdictcell____classcell__r*   __classdict__s   @@r+   rN   ru   )  s     	&	1 	1r-   rN   c           	     p  a  S P                  R4       S P                  pRpV 3R lp\        ^4       F  pV! VP                  4       4       K  	  \        ^4       F4  pV! VP	                  VP
                  R7      P                  R4      4       K6  	  S P                  RV.4      ;_uu_ 4        VP                  R^RR7      pR	R	R	4       S P                  XR4       S P                  pV EF  w  rxp	S P                  V.4      ;_uu_ 4        S P                  VP                  Wx4      V	4       R	R	R	4       S P                  . 4      ;_uu_ 4        S P                  VP                  Wy4      V	4       R	R	R	4       S P                  V.4      ;_uu_ 4        S P                  VP                  Wx4      4       R	R	R	4       S P                  . 4      ;_uu_ 4        S P                  VP                  Wy4      4       R	R	R	4       S P                  V.4      ;_uu_ 4        S P                  VP                  V4      V	4       R	R	R	4       S P                  . 4      ;_uu_ 4        S P                  VP                  V	4      V	4       R	R	R	4       EK  	  S P                  VP                  R
4      R
4       R	#   + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     ELm; i  + '       g   i     EL>; i  + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     EKK  ; i)z2test passlib correctly handles bcrypt padding bitsr   z.*incorrectly set padding bitsc                    < V P                   ! R4      '       d   \        V 4      ^8  g   Q RV : 24       hSP                  V ^,          R9   RV : 24       R# )$2a$zunexpectedly malformed hash: z.Oeuz%unused bits incorrectly set in hash: N)r   z$2b$)r>   r`   
assertTrue)r   r'   s   &r+   check_padding:_bcrypt_test.test_90_bcrypt_padding.<locals>.check_paddingl  sN    ??#344Tb <59;<HOODH.IMOQr-   r0   bobzsalt too largeT)saltr0   relaxedNz$md5$abcz.....................A.z<$2b$05$.....................................................)require_TEST_MODEhandlerr	   	genconfigusing
min_roundsr   assertWarningListassertEqualknown_incorrect_paddinggenhashr   verifynormhash)
r'   r7   	corr_descr   ir   samplespwdbadgoods
   f         r+   test_90_bcrypt_padding#_bcrypt_test.test_90_bcrypt_padding^  sd   v& 4	
	Q
 A&**,- A&,,f.?.?,@EEeLM  ##%5y$ABB##q$#OD C:;
 ..%NCd ''44  !94@ 5''++  !:DA , ''44c 78 5''++c 89 , ''44  !5t< 5''++  !6= ,+# &* 	4jA; CBB 544+++ 544+++ 54+++sT   -J,"K "K!K(!K<"L"L#,J=	 KK%(K9<LL #L5c                    V P                   P                  ^R7      pRpRpV P                  VP                  V4      4       V P	                  VP                  V4      4       R# )z$needs_update corrects bcrypt paddingr   <$2a$04$yjDgE74RJkeqC0/1NheSScrvKeu9IbKDpcQf/Ox3qsrRS/Kw42qIS<$2a$04$yjDgE74RJkeqC0/1NheSSOrvKeu9IbKDpcQf/Ox3qsrRS/Kw42qISN)r   r   r   needs_updateassertFalse)r'   r7   BAD1GOOD1s   &   r+   test_needs_update_w_padding(_bcrypt_test.test_needs_update_w_padding  sX     ##1#-
 ON++D12,,U34r-   r   )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)r   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   UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUz<$2a$05$/OK.fbVrR/bpIqNJ5ianF.R9xrDjiycxMbQE2bp.vgqlYpW5wx2yy)sH   UUUUUUUUUUUUUUUUUUUUUUUUz<$2a$05$/OK.fbVrR/bpIqNJ5ianF.9tQZzcJfm3uj2NvJ/n5xkhpqLrMpWCe)r   z<$2y$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq)s   ёz<$2y$05$6bNw2HLQYeqHYyBfLMsv/OUcZd0LKP39b87nBw3.S2tVZSqiQX6eu)01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123<$2a$04$R1lJ2gkNaoPGdafE.H.16.1MKHPvmKwryeulRe225LKProWYwt9Oi)012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234r   )   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345r   )  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456r   )r   z<$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.)az<$2a$10$k87L/MF28Q673VKh8/cPi.SUl7MU/rWuSiIDDFayrKk/1tBsSQu4u)r   z<$2a$10$WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi)abcdefghijklmnopqrstuvwxyzz<$2a$10$fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dq)z"~!@#$%^&*()      ~!@#$%^&*()PNBFRDz<$2a$10$LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfSz$2$05$......................z$2a$05$......................EabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcHabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcIabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcx)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)solarisN)rW   rh   rr   ))r:   z<$2a$04$oaQbBqq8JnSM1NHRPQGXORY4Vw3bdHKLIXTecPDRAcJ98cz1ilveOz<$2a$04$oaQbBqq8JnSM1NHRPQGXOOY4Vw3bdHKLIXTecPDRAcJ98cz1ilveO)r:   r   r   )r:   z<$2a$04$yjDgE74RJkeqC0/1NheSSOrvKeu9IbKDpcQf/Ox3qsrRS/Kw42qIVr   )#r   r   r   r   __doc__r   r7   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_supportr#   r2   r@   r   fuzz_verifiersrW   rh   rr   rN   r   r   r   r   r   r   r   s   @@r+   r   r      s    $kkG $(! 	USTTL 	PPQL	P	P	L	P	P	P	P	P 	V 	baa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.1K99 1828Bt5 5r-   r   r7   r\   rm   c                       ] tR tRt]P
                   U u. uF  p \        V ^ ,          4      '       g   K  V NK!  	  up tRtRtR# u up i )bcrypt_os_crypt_testi  Fr   N)	r   r   r   r   r   r   r   has_os_crypt_fallbackr   )rows   0r+   r   r     sC     ,8+L+L <+LC23q6:  C+L < "	<s
   AAr   os_cryptr   c                     a a ] tR tRt oRt]P                  tRtRt	Rt
RR]R3]P                  ! R4      R3R]R3]! R^H4      R	3]! R^H4      R
,           R3]! R^H4      R,           R3RR]R3]P                  ! R4      R3]! R^H4      R3]! R^H4      R
,           R3]! R^H4      R,           R3.tR R!.t. R"OtV 3R ltV 3R ltR tR t ! R R]P,                  4      tR tR tRtVtV ;t# )#_bcrypt_sha256_testi  z!base for BCrypt-SHA256 test casesTNzJ$bcrypt-sha256$2a,5$.US1fQ4TQS.ZTz/uJ5Kyn.$QNdPDOTKKT5/sovNz1iWg26quOU4Pjezutf-8zJ$bcrypt-sha256$2b,5$.US1fQ4TQS.ZTz/uJ5Kyn.$QNdPDOTKKT5/sovNz1iWg26quOU4Pjeabc123zJ$bcrypt-sha256$2b,5$X1g1nh3g0v4h6970O68cxe$r/hyEtqJ0teqPEmfTLoZ83ciAI1Q74.qwrzJ$bcrypt-sha256$2b,5$X1g1nh3g0v4h6970O68cxe$021KLEif6epjot5yoxk0m8I0929ohEaxyzzJ$bcrypt-sha256$2b,5$X1g1nh3g0v4h6970O68cxe$7.1kgpHduMGEjvM3fX6e/QCvfn6OKjazR$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/1UDUG2ofEXB6Onr2vvyFzfhEOS3Sc                  < \        R 4      '       d   V P                  R8X  d   Rp\        P                  P	                  V4      pV'       d,   V P                  \        P                  P                  W4       M*V P                  \        P                  P                  V4       R\        P                  V&   \        \        V `+  4        \        P                  ! RR4       R# )r   r   r   enabledr   r   N)r   r   r   r   r   r   r    r!   r"   r   r#   r$   r%   r&   s   &  r+   r#   _bcrypt_sha256_test.setUp@  s    V!:*C::>>#&D

 6 6B

 6 6<'BJJsO!4.0*_`r-   c                t   < V P                   R 8X  d   VP                  R^4       \        \        V `  V4       R# r/   )r   r1   r"   r   r2   r3   s   &&r+   r2   %_bcrypt_sha256_test.populate_settingsM  s-    <<9$OOHa(!4:4@r-   c                $    V P                  R 4      h)zmultiple idents not supported)skipTestr   s   &r+   require_many_idents'_bcrypt_sha256_test.require_many_identsW  s    mm;<<r-   c                b    V P                   pV! R R7       V P                  \        VRR R7       R# )T)use_defaultsz$2y$)r?   r   N)r   assertRaisesrR   )r'   r   s   & r+   test_30_HasOneIdent'_bcrypt_sha256_test.test_30_HasOneIdentZ  s*    ,,T"*gV$Or-   c                   ,   a  ] tR tRt o R tR tRtV tR# )%_bcrypt_sha256_test.FuzzHashGeneratorid  c                *    V P                  ^^^^4      # r~   r   r   s   &r+   r   3_bcrypt_sha256_test.FuzzHashGenerator.random_roundsf  r   r-   c                    R # )2br   r   s   &r+   random_ident2_bcrypt_sha256_test.FuzzHashGenerator.random_identj  s    r-   r   N)r   r   r   r   r   r   r   r   r   s   @r+   rN   r   d  s     	1	 	r-   rN   c                `   V P                   pV P                  VP                  ^4       VP                  ^R7      pV P                  VP                  ^4       V P	                  \
        VP                  RR7       VP                  ^RR7      pV P	                  \
        VP                  RR7       R# )   )versioni  2a)r   r?   )r?   N)r   r   r   r   r   rR   )r'   r   subclss   &  r+   test_using_version&_bcrypt_sha256_test.test_using_versionq  s    ,,!, q)+ 	*gmmSA q5*gmm4@r-   c                   ^ RI Hp ^ RIHp ^ RIHp RpRpV! RVP                  R4      4      ! VP                  R4      4      pV! V4      P                  R4      pV P                  VR4       V! R	V^R
7      P                  V4      pV P                  VR4       V P                  VP                  VRV,           V,           4      4       V P                  R	V^R
7      P                  V4      pV P                  W4       R# )z&
test digest calc v2 matches bcrypt()
)r7   )compile_hmac)	b64encodenyKYxTAvjmy6lMDYMl11Uur:   sha256asciiz,J5TlyIDm+IcSWmKiDJm+MeICndBkFVPn4kKdJW8f+xY=r   )r?   r   r0   zM0wE0Ov/9LXoQFCe.jRHu3MSHPF54Taz$2b$12$N)passlib.hashr7   passlib.crypto.digestr   passlib.utils.binaryr   encodedecoder   _calc_checksumr   r   r   )	r'   r7   r   r   r   rS   temp_digestbcrypt_digestresults	   &        r+   test_calc_digest_v2'_bcrypt_sha256_test.test_calc_digest_v2  s     	(62 ("8T[[-AB6==QXCYZ,33G<&TU TR@OOP[\(IJk9t3Cm3STU DtB?NNvV/r-   r   )r   zJ$bcrypt-sha256$2a,5$E/e/2AOhqM5W/KJTFQzLce$F6dYSxOdAEoJZO2eoHUZWZljW/e0TXO)passwordJ$bcrypt-sha256$2a,5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyu)r	  zJ$bcrypt-sha256$2b,5$5Hg1DKFqPE8C2aflZ5vVoe$12BjNE0p7axMg55.Y/mHsYiVuFBDQyu)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.h5fs0u84qyPbS)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$)r   r   r   r   r   r   bcrypt_sha256r   r   forbidden_charactersr   r   r  r   r   r   r   r#   r2   r   r   r   rN   r   r  r   r   r   r   s   @@r+   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 0 0r-   r   c                   4   a  ] tR tRt o ]R 4       tRtRtV tR# )bcrypt_sha256_os_crypt_testi  c                *    \         P                  4       # )N)r   _get_safe_crypt_handler_backend)clss   &r+   r  ;bcrypt_sha256_os_crypt_test._get_safe_crypt_handler_backend  s    #CCEEr-   Fr   N)	r   r   r   r   classmethodr  r   r   r   r   s   @r+   r  r    s!     F F "r-   r  )'r   
__future__r   logging	getLoggerr   logr   r$   passlibr   r;   r   r   r<   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-   r+   <module>r&     s   E & g''1 	   5 F F , 6 3M5; M5h "55h? #77
C #77
C "<;;JG " #66yA 
\0+ \0F 0CCHM 1EEjQ 1EEjQ ""5"I"I*"U " 1DDYO r-   