
    ;OOf}                        d Z ddlmZ ddlZddlZddlmZ ddlZddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZ ddlmc mZ ddlmZmZ dd	lmZ  ee      Zd
 Z G d de      Z G d de      Z G d de      Z  G d dejB                        Z" G d dejF                  ejH                        Z% ed      Z& G d de      Z' G d de      Z(y)z>tests for passlib.hash -- (c) Assurance Technologies 2003-2009    )with_statementN)	getLogger)ldap_md5sha256_crypt)MissingBackendErrorPasslibHashWarning)str_to_uasciiuascii_to_strunicode)HandlerCaseTestCase)uc                 4      fdt         |            S )z1generate all strings of given size using alphabetc              3   l   K   | dk  rD ]  }|  y D ]  } | dz
        D ]	  }||z      y w)N       )sizechartailalphabethelpers      b/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/passlib/tests/test_utils_handlers.pyr   z_makelang.<locals>.helper   sS     !8  
 ! $"46N $Dt)O$$s   14)set)r   r   r   s   ` @r   	_makelangr      s    $ vd|    c                   X    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)SkeletonTestztest hash support classesc                     G fddt         j                        | j                  j                  t	        d                   | j                  j                  d             | j                  j                  t	        d                   | j                  j                  t	        d                   | j                  j                  d             | j                  j                  t	        d                   | j                  j                  t	        d	                   | j                  j                  t	        d
                   | j                  t        j                  d       | j                  t        j                  d       | j                  j                         j                  d             | j                  j                  dd             | j                  j                  dt	        d                   | j                  j                  dd             | j                  j                  dt	        d                   | j                  j                  ddd             | j                  t        j                  dd       | j                  t        j                  dt	        d             | j                  j                  d      d       | j                  j                  dd      d       y)ztest StaticHandler classc                   V     e Zd ZdZdZ ed      Z ed      ZdZd fd	Z	d Z
 xZS )	/SkeletonTest.test_00_static_handler.<locals>.d1d1flag_abr   c                 2    t        |   di | || _        y Nr   )super__init__r$   )selfr$   kwds	__class__r"   s      r   r*   z8SkeletonTest.test_00_static_handler.<locals>.d1.__init__9   s    b$(040 	r   c                 F    | j                   rt        d      S t        d      S )Nba)r$   r   r+   secrets     r   _calc_checksumz>SkeletonTest.test_00_static_handler.<locals>.d1._calc_checksum=   s    !%qv6#6r   )F)__name__
__module____qualname__namecontext_kwdsr   _hash_prefixchecksum_charschecksum_sizer*   r3   __classcell__)r-   r"   s   @r   r"   r!   2   s.    D$LS6LtWNM!7r   r"   _as   _a_b_cs   _cr0   r/   cNr    ss   _bTr#   )uhStaticHandler
assertTrueidentifyr   assertFalseassertRaises	TypeErrorassertEqual	genconfighashverify
ValueErrorr+   r"   s    @r   test_00_static_handlerz#SkeletonTest.test_00_static_handler/   s   	7!! 	7 	AdG,-E*+AdG,-QtW-.U+,QsV,-QsV,-QsV,-)R[[$7)R[[!4 	5 			#u-.		#ag./3./3qw/0		#u4	89*biie<*biiag> 	t,40$7r   c                     G d dt         j                        }| j                  d      5  |j                  d      }ddd       | j	                  d       | j                  |j                  d|             | j                  |j                  d|             |`| j                  t        |j                  d       y# 1 sw Y   xY w)ztest StaticHandler legacy attrc                   @    e Zd ZdZed        Zed        Zed        Zy)3SkeletonTest.test_01_calc_checksum_hack.<locals>.d1r"   c                 ^    |rt        |      dk7  ry	 t        |d       y# t        $ r Y yw xY w)N(   F   T)lenintrN   clsrL   s     r   rF   z<SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.identifyf   s9    s4yB !bM  " ! !s     	,,c                     |t        d      t        |t              r|j                  d      }|| j	                  |      st        d      t        j                  d|z         j                         S )Nzno secret providedutf-8zinvalid hashs   xyz)	rI   
isinstancer   encoderF   rN   hashlibsha1	hexdigestrZ   r2   rL   s      r   genhashz;SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.genhashp   sc    >#$899fg.#]]73F#CLL,>$^44||FVO4>>@@r   c                 b    |t        d      | j                  ||      |j                         k(  S )Nzno hash specified)rN   rc   lowerrb   s      r   rM   z:SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.verify{   s/    <$%899{{640DJJL@@r   N)r4   r5   r6   r7   classmethodrF   rc   rM   r   r   r   r"   rS   c   sE    D  A A A Ar   r"   z%d1.*should be updated.*_calc_checksumtestN(7c622762588a0e5cc786ad0a143156f9fd38eea3xtest)rC   rD   assertWarningListrL   rJ   rE   rM   rG   rc   rH   NotImplementedError)r+   r"   rL   s      r   test_01_calc_checksum_hackz'SkeletonTest.test_01_calc_checksum_hack]   s    	A!! 	A> ##$KL 	#776?D	#IJ		&$/07D12 J-rww?	# 	#s   B==Cc                     G d dt         j                        }| j                  t        |j                  d       | j                  t        |j                  d       | j                  |j	                  d             | j                  |j	                  d             | j                  |j	                  d             t        j                  t        d            |_
        | j                  t        |j                  d       | j                  t        |j                  d       | j                  |j	                  d	             | j                  |j	                  d             |`
t        d
      |_        | j                  t        |j                  d       | j                  t        |j                  d       | j                  |j	                  d             | j                  |j	                  d             |`y)ztest GenericHandler.identify()c                       e Zd Zed        Zy))SkeletonTest.test_10_identify.<locals>.d1c                 ~    t        |t              r|j                  d      }|t        d      k(  r	 | |      S t        )Nasciir0   checksum)r]   bytesdecoder   rN   rY   s     r   from_stringz5SkeletonTest.test_10_identify.<locals>.d1.from_string   s6    dE*;;w/D1S6>--$$r   N)r4   r5   r6   rf   rv   r   r   r   r"   ro      s    % %r   r"   Nr   rA   r0   r/   z@.z@a!z!a)rC   GenericHandlerrH   rI   rF   rG   rE   recompiler   _hash_regexidentrO   s     r   test_10_identifyzSkeletonTest.test_10_identify   sa   	%"" 	% 	)R[[$7)R[[!4R)C()S)* AdG,)R[[$7)R[[!4D)*S)*N S6)R[[$7)R[[!4D)*S)*Hr   c                 .    G d dt         j                        dfd	}| j                  t        |t	        d             | j                   |t	        d            t	        d             | j                   |t	        d            t	        d             | j                  t        |t	        d             | j                  t        |t	        d	             | j                  t        |d
       | j                          j                  t	        d             y)z%test GenericHandler checksum handlingc                   $    e Zd ZdZdZ ed      Zy).SkeletonTest.test_11_norm_checksum.<locals>.d1r"      xzN)r4   r5   r6   r7   r;   r   r:   r   r   r   r"   r      s    DMtWNr   r"   Nc                 ,     dd| i|j                   S )Nrs   r   rr   )rs   kr"   s     r   norm_checksumz9SkeletonTest.test_11_norm_checksum.<locals>.norm_checksum   s    -x-1-666r   xxxxxxxxzxzxxxxxxxyxs   xxyxN)rC   rx   rH   rN   r   rJ   rI   _stub_checksumr+   r   r"   s     @r   test_11_norm_checksumz"SkeletonTest.test_11_norm_checksum   s    	%"" 	%
	7 	*mQuX> 	qy11V9=qy11V9= 	*mQwZ@ 	*mQvY? 	)]G< 	,,ai8r   c                     G d dt         j                  t         j                        fd}| j                   |d      d       | j	                  t
        |t        d             | j                          j                  d       y)z*test GenericHandler + HasRawChecksum mixinc                       e Zd ZdZdZy)2SkeletonTest.test_12_norm_checksum_raw.<locals>.d1r"   r   N)r4   r5   r6   r7   r;   r   r   r   r"   r      s    DMr   r"   c                  (     | i |j                   S r   rr   )r0   r   r"   s     r   r   z=SkeletonTest.test_12_norm_checksum_raw.<locals>.norm_checksum   s    q;A;'''r   s   1234r   s       N)rC   HasRawChecksumrx   rJ   rH   rI   r   r   r   s     @r   test_12_norm_checksum_rawz&SkeletonTest.test_12_norm_checksum_raw   sk    	""B$5$5 		( 	w/9 	)]AfI> 	,,i8r   c                 (    G d dt         j                  t         j                        fd}fd}t        dd      }t        dd      }t        dd      }| j	                  t
        |       | j	                  t
        |d	
       | j                   |d      |       t        j                  d      5 }| j	                  t        |d
       | j	                  t        |d
       | j                  |       | j                   |d
      d       | j                   |d
      d       | j                   |d
      d       | j                  |       | j	                  t        |d
       | j                  |       d	d	d	       t        j                  d      5 }| j	                  t        |d       | j	                  t        |d       | j                  |       | j                   |d      |       | j                   |d      |       | j                   |d      |       | j                  |       | j	                  t        |d       | j                  |       | j                   |dd      |       | j                  |dg       d	d	d	       `| j                  g       5  | j                  t         |d	            d       | j                  t         |d            d       d	d	d	       y	# 1 sw Y   uxY w# 1 sw Y   uxY w# 1 sw Y   y	xY w)z#test GenericHandler + HasSalt mixinc                   $    e Zd ZdZdZdZdZdZdZy)*SkeletonTest.test_20_norm_salt.<locals>.d1r"   saltr   r      r&   N)	r4   r5   r6   r7   setting_kwdsmin_salt_sizemax_salt_sizedefault_salt_size
salt_charsr   r   r   r"   r      s!    D$LMM !Jr   r"   c                  (     di | j                   S r(   r   r   r"   s    r   	norm_saltz1SkeletonTest.test_20_norm_salt.<locals>.norm_salt   s    77<<r   c                 N      j                   dd| i|d      j                  S )N	salt_sizeTuse_defaultsr   )usingr   )szr   r"   s     r   gen_saltz0SkeletonTest.test_20_norm_salt.<locals>.gen_salt   s)    .8288.b.A.DAFFFr   r&   r   r   r   Nr   Tr   recordrA   r0   abaabbaaaaabbr   r      )relaxedzsalt_size.*above max_salt_size)rC   HasSaltrx   r   rH   rI   assertInwarningscatch_warningsrN   consumeWarningListrJ   r   rj   rW   )r+   r   r   salts2salts3salts4wlogr"   s          @r   test_20_norm_saltzSkeletonTest.test_20_norm_salt   s   	R.. 		 	G 4#4#4# 	)Y/)YT:iT2F; $$D1 	*T j)"=j)#>##D) YD148YE2E:YF3V<##D) j)(C##D)	*$ $$D1 	NT j(A6j(A6##D) MM(1+v.MM(1+v.MM(1+v.##D) j(A6##D)MM(1d3V<##D+K*LM%	N* ##B' 	2S$0!4S!-q1	2 	2Q	* 	*$	N 	N,	2 	2s'   5CK/C.K<#AL/K9<LLc                     G d dt         j                  t         j                        fd}| j                  t        |       | j                  t        |d       | j                   |d      d       | j                  t        |d	       t        j                  d
      5 }| j                  t        |d       | j                  |       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                  |       | j                  t        |d       | j                  |       ddd       d_
        | j                  t        |d       y# 1 sw Y   )xY w)z%test GenericHandler + HasRounds mixinc                        e Zd ZdZdZdZdZdZy),SkeletonTest.test_30_init_rounds.<locals>.d1r"   roundsr   r   r   N)r4   r5   r6   r7   r   
min_rounds
max_roundsdefault_roundsr   r   r   r"   r   8  s    D&LJJNr   r"   c                  (     di | j                   S r(   r   r   s    r   norm_roundsz5SkeletonTest.test_30_init_rounds.<locals>.norm_rounds@  s    77>>!r   Nr   Tr   r   g      ?r   r   r   r   r   )rC   	HasRoundsrx   rH   rI   rJ   r   r   rN   r   r   )r+   r   r   r"   s      @r   test_30_init_roundsz SkeletonTest.test_30_init_rounds5  sP   	r00 		" 	)[1)[>$7; 	)[= $$D1 	*Tj+a@##D) [2A6[2A6[2A6##D) j+a@##D)	*  !)[tD#	* 	*s   $B/E;;Fc                     G d dt         j                  t         j                        }| j                  t        |j
                         | j                  t        |j                         | j                  t        |j                  d       | j                  t        |j                  d       | j                  |j                                d|_	         |       }| j                  |j                  d      d       |j                  d       |j                  d       | j                  |j                  d      d       | j                  t        |j                  d       | j                  |j                  d             | j                  |j                  d             d|_        | j                  |j                                |j                  d       | j                  |j                  d      d       | j                  t        |j                  d	       | j                  t        |j                  d	       |j                  d        G d
 d|      }| j                  t        |j                  d       y)z+test GenericHandler + HasManyBackends mixinc                   L    e Zd ZdZdZdZdZdZed        Z	ed        Z
d Zd Zy	)
)SkeletonTest.test_40_backends.<locals>.d1r"   r   r0   r/   Fc                 T    | j                   r| j                  | j                         yyNTF)	_enable_a_set_calc_checksum_backend_calc_checksum_arZ   s    r   _load_backend_az9SkeletonTest.test_40_backends.<locals>.d1._load_backend_aj  #    ==2233G3GH r   c                 T    | j                   r| j                  | j                         yyr   )	_enable_br   _calc_checksum_br   s    r   _load_backend_bz9SkeletonTest.test_40_backends.<locals>.d1._load_backend_br  r   r   c                      yNr0   r   r1   s     r   r   z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_az      r   c                      yNr/   r   r1   s     r   r   z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_b}  r   r   N)r4   r5   r6   r7   r   backendsr   r   rf   r   r   r   r   r   r   r   r"   r   a  sK    DL!HII! ! ! !r   r"   anydefaultTrB   r/   r0   r@   c                       e Zd ZdZy))SkeletonTest.test_40_backends.<locals>.d2TN)r4   r5   r6   _has_backend_ar   r   r   d2r     s    !Nr   r   N)rC   HasManyBackendsrx   rH   r   get_backendset_backendrG   has_backendr   rJ   r3   rE   r   rN   AssertionError)r+   r"   objr   s       r   test_40_backendszSkeletonTest.test_40_backends_  s   	##R%6%6 	@ 	-r~~>-r~~>-r~~uE-r~~yI)*  d++C0#6 	s
u++C0#6 	-r~~sCs+,,-  	()
s++C0#6 	*bnnc:*bnnc: 	s	" 	"."..#>r   c                    t        j                  dt        d        G d dt        j                  t        j
                        }| j                  t        |j                         | j                  t        |j                         | j                  t        |j                  d       | j                  t        |j                  d       | j                  |j                                d|_         |       }| j                  |j                  d	      d
       |j                  d
       |j                  d       | j                  |j                  d	      d
       | j                  t        |j                  d       | j                  |j                  d
             | j                  |j                  d             d|_        | j                  |j                                |j                  d       | j                  |j                  d	      d       | j                  t"        |j                  d       | j                  t"        |j                  d       y)z<test GenericHandler + HasManyBackends mixin (deprecated api)ignorez0.* support for \._has_backend_.* is deprecated.*)categorymessagec                   ,    e Zd ZdZdZdZdZdZd Zd Z	y))SkeletonTest.test_41_backends.<locals>.d1r"   r   r   Fc                      yr   r   r1   s     r   r   z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_a  r   r   c                      yr   r   r1   s     r   r   z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_b  r   r   N)
r4   r5   r6   r7   r   r   r   _has_backend_br   r   r   r   r   r"   r     s%    DL!H"N"Nr   r"   r   r   TrB   r/   r0   r@   N)r   filterwarningsDeprecationWarningrC   r   rx   rH   r   r   r   rG   r   r   rJ   r3   rE   r   rN   )r+   r"   r   s      r   test_41_backendszSkeletonTest.test_41_backends  s   'G	
	##R%6%6 	  	-r~~>-r~~>-r~~uE-r~~yI)* ! d++C0#6 	s
u++C0#6 	-r~~sCs+,,- ! 	()
s++C0#6 	*bnnc:*bnnc:r   c                     G d dt         j                  t         j                        fd}| j                  t        |       | j                  t        |d       | j                   |d      t        d             | j                   |t        d            t        d             | j                   |t        d	            t        d	             | j                  t        |t        d
             | j                   |t        d            t        d             | j                  t        |t        d             | j                  j                  t        d                   | j                  j                  t        d                   | j                  j                  t        d                   | j                  j                  t        d                   | j                  j                  t        d                   | j                  t        j                  d       | j                  t        j                  d       d_        | j                  t        |d       y)z#test GenericHandler + HasManyIdentsc                   d    e Zd ZdZdZ ed      Z ed       ed      fZ ed       ed      iZy)+SkeletonTest.test_50_norm_ident.<locals>.d1r"   r|   !A!BAN)	r4   r5   r6   r7   r   r   default_identident_valuesident_aliasesr   r   r   r"   r     s9    D%LdGMdGQtW-Lfag.Mr   r"   c                  (     di | j                   S r(   r   r   s    r   
norm_identz3SkeletonTest.test_50_norm_ident.<locals>.norm_ident  s    77== r   Nr   Tr   r   r   z!Cr   Bz!Axxxz!Bxxxz!CxxxrA   r   )rC   HasManyIdentsrx   rH   rI   rJ   r   rN   rE   rF   rG   r   r   )r+   r  r"   s     @r   test_50_norm_identzSkeletonTest.test_50_norm_ident  s   	/!!2#4#4 	/	! 	)Z0)Zt<6$@ 	!D'2AdG<!D'2AdG<*j$@ 	!C&11T7; 	*j#? 	AgJ/0AgJ/0QwZ01QsV,-QrU+,)R[[$7)R[[!4  .*4Hr   c                    ddl m} |j                  j                  d      }| j	                  |t        d      t        d      d       d}t        d      }t        d	      }|j                  j                  |      }| j	                  |t        |d
d|             |j                  j                  |d      }| j	                  |t        |d
d             |j                  j                  |d      }| j	                  |t        d
dt        d      t        d                   |j                  j                  d      }| j	                  |t        t        d      t        d      d             d}|j                  j                  |      }| j	                  |t        ddd             |j                  j                  |d      }| j	                  |t        t        d      dt        d                   y )!ztest parsehash()r   rL   OgAwTx2l6NADIAwTx2l6NADIOgrs   r   z?$5$LKO/Ute40T3FNF95$U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9zLKO/Ute40T3FNF95z+U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9i  T)r   r   implicit_roundsrs   Frr   )r   r   r  )sanitizezLK**************z+U0pr***************************************)r   r  r   rs   zL$5$rounds=10428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3z+YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3zuy/jIAhCetNCTtb0i(  )rs   r   r   z@$pbkdf2$60000$DoEwpvQeA8B4T.k951yLUQ$O26Y3/NJEiLCVaOVPxGXshyjW8ks   ;nI"U?[i`  s   0xO=\Qrs   r   r   zO26************************zDo********************N)	passlibrL   	des_crypt	parsehashrJ   r   r   dictpbkdf2_sha1)r+   rL   resulthrB   r@   h1s          r   test_91_parsehashzSkeletonTest.test_91_parsehash  s    	! ))/:a.>$!PQ N !;<"",,Q/1T6:Q"H 	I "",,Q,?1T4!PQ "",,Q,>T4%&EF"H 	I
 "",,-{|DE%&"
 	 P!!++B/SC"
 	 !!++B+>45+,"
 	r   c                    ddl m} | j                  |j                  j	                         ddd       | j                  |j
                  j	                         ddd       | j                  |j                  dd	       | j                  |j                  j	                         d
ddd       | j                  |j                  dd       | j                  |j                  j	                         dddd       y)ztest bitsize()r   r  B      r
        r   i   i     `   r  i            N)	r  rL   rJ   r  bitsizebcrypt	patchAttrr   r  r+   rL   s     r   test_92_bitsizezSkeletonTest.test_92_bitsizeJ  s     	! 	//1&("5	7 	,,.&)37	9 	t((*:MJ**224&)RD	F 	t'')9=I))113&)RE	Gr   N)r4   r5   r6   __doc__rP   rl   r}   r   r   r   r   r   r   r  r  r%  r   r   r   r   r   )   sQ    #
,8\.@f!F"9H9*E2R(ETI?V8;t(I\6pGr   r   c                   "    e Zd ZdZd Zd Zd Zy)dummy_handler_in_registryz6context manager that inserts dummy handler in registryc                 p    || _         t        d|z   t        j                  ft	        |d            | _        y )Ndummy_r   )r7   r   )r7   typerC   rx   r  dummy)r+   r7   s     r   r*   z"dummy_handler_in_registry.__init__p  s4    	(T/B,=,=+?B
 
r   c                     ddl m} |j                  | j                  d       |j	                  | j
                         |j                  | j                        | j
                  u sJ | j
                  S Nr   )registryF)	locations)r  r/  _unload_handler_namer7   register_crypt_handlerr,  get_crypt_handler)r+   r/  s     r   	__enter__z#dummy_handler_in_registry.__enter__w  sY    $%%dii5%A''

3))$))4

BBBzzr   c                 J    ddl m} |j                  | j                  d       y r.  )r  r/  r1  r7   )r+   exc_infor/  s      r   __exit__z"dummy_handler_in_registry.__exit__~  s    $%%dii5%Ar   N)r4   r5   r6   r&  r*   r4  r7  r   r   r   r(  r(  n  s    @Br   r(  c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)PrefixWrapperTestztest PrefixWrapper classc                    t        j                  ddddd      }| j                  |j                  d       | j	                  |j
                  d       | j	                  |j                  t               | j	                  |j
                  t               t        d      5 }| j	                  |j                  t               ddd       y# 1 sw Y   yxY w)z*test PrefixWrapper lazy loading of handlerr"   r   {XXX}{MD5}T)lazyN)	rC   PrefixWrapperrJ   _wrapped_nameassertIs_wrapped_handlerwrappedr   r(  r+   r"   r,  s      r   test_00_lazy_loadingz&PrefixWrapperTest.test_00_lazy_loading  s    dJtL 	)):6b))40 	bjj(+b))84 'z2 	0eMM"**h/	0 	0 	0s   !CCc                 l   t        j                  dddd      }| j                  |j                  d       | j	                  |j
                  t               | j	                  |j                  t               t        d      5 }| j	                  |j                  t               ddd       y# 1 sw Y   yxY w)z,test PrefixWrapper active loading of handlerr"   r   r;  r<  N)	rC   r>  rJ   r?  r@  rA  r   rB  r(  rC  s      r   test_01_active_loadingz(PrefixWrapperTest.test_01_active_loading  s    dJA 	)):6b))84bjj(+ 'z2 	0eMM"**h/	0 	0 	0s    !B**B3c                 t   t        j                  dt        dd      }| j                  |j                  d       | j                  |j                  t               | j                  |j                  t               t        d      5 }| j                  |j                  t               ddd       y# 1 sw Y   yxY w)z4test PrefixWrapper with explicitly specified handlerr"   r;  r<  Nr   )	rC   r>  r   rJ   r?  r@  rA  rB  r(  rC  s      r   test_02_explicitz"PrefixWrapperTest.test_02_explicit  s     dHgw? 	))40b))84bjj(+ 'z2 	0eMM"**h/	0 	0 	0s   !B..B7c                    t        j                  dddd      }| j                  |j                  d       | j	                  |j
                  t        j
                         | j                  dt        |      v        t        j                  ddd      }| j	                  |j
                  t        j
                         | j                  dt        |      v        y )Nr"   r   r;  r<  r   r   r   )rC   r>  rJ   r7   r@  r   r   rG   dirr   rE   )r+   r"   r   s      r   test_10_wrapped_attributesz,PrefixWrapperTest.test_10_wrapped_attributes  s    dJA$'boox'<'<=R01dNG<boo|'@'@AB/0r   c                    t        j                  dddd      }d}d}| j                  |j                         d       | j	                  t
        |j                  dd        | j                  |j                  d|      |       | j	                  t        |j                  d|       | j                  |j                  d      |       | j                  |j                  |             | j                  |j                  |             | j	                  t        |j                  d|       | j                  |j                  d|             y )	Nr"   r   r;  r<  z{XXX}X03MO1qnZdYdgyfeuILPmQ==z{MD5}X03MO1qnZdYdgyfeuILPmQ==z{XXX}1B2M2Y8AsgTpgAmY7PhCfg==password)rC   r>  rJ   rK   rH   rI   rc   rN   rL   rE   rF   rG   rM   )r+   r"   dphlphs       r   test_11_wrapped_methodsz)PrefixWrapperTest.test_11_wrapped_methods  s   dJA-- 	)HI 	)RZZTBJ4c:*bjj*cB 	,c2 	C()S)* 	*biiSA		*c23r   c                 4   t        j                  ddd      }| j                  |j                  t	        d             | j                  |j                  d        t        j                  ddd      }| j                  |j                  d        | j                  |j                  d        t        j                  dddd      }| j                  |j                  d        | j                  |j                  d        t        j                  dddd	
      }| j                  |j                  t	        d	             | j                  |j                  d        t        j                  dddd
      }| j                  t        t         j                  dddd
       | j                  t        t         j                  dddd
       t        j                  ddd      }| j                  |j                  d        | j                  |j                  t	        d      t	        d      f       t        j                  dddd
      }| j                  |j                  t	        d             | j                  |j                  d        | j                  t        t         j                  ddd
       | j                  d      5  t        j                  dddd      }d d d        | j                  |j                  d        | j                  |j                  d        y # 1 sw Y   BxY w)Nh2r   r;  z
{XXX}{MD5}r  r  r<  h3z{Xr   z{XXX}Az{XYz{XXXXh4phpassz{XXX}$P$z{XXX}$H$h5Th6z#orig_prefix.*may not work correctlyh7$?)orig_prefixprefix)
rC   r>  rJ   r|   r   r@  r   rH   rN   rj   r+   r  s     r   test_12_identzPrefixWrapperTest.test_12_ident  sq   T:w7!L/2annd+ T;8aggt$annd+ T:w@aggt$annd+ T:wdC!D'*annd+ T:whG*b&6&6j! 	 	0*b&6&6j! 	 	2 T8W5aggt$!J-:)GH T;tD!G*-annd+ 	*b&6&6kQUV ##$IJ 	N  xSMA	N.$'	N 	Ns   3LLc                 l    t        j                  dddd      }| j                  t        |      d       y)ztest repr()rR  	md5_cryptr;  z$1$r[  z(?x)^PrefixWrapper\(
                ['"]h2['"],\s+
                ['"]md5_crypt['"],\s+
                prefix=u?["']{XXX}['"],\s+
                orig_prefix=u?["']\$1\$['"]
            \)$N)rC   r>  assertRegexreprr]  s     r   test_13_reprzPrefixWrapperTest.test_13_repr  s1    T;UKa	r   c                 v    t        j                  ddd      }| j                  t        |j                  d       y)ztest orig_prefix sanity checkrR  r`  z$6$ra  rg   N)rC   r>  rH   rN   rL   r]  s     r   test_14_bad_hashz"PrefixWrapperTest.test_14_bad_hash  s.     T;EB*afff5r   N)r4   r5   r6   r&  rD  rF  rH  rK  rP  r^  rd  rf  r   r   r   r9  r9    s.    "0 00140-(^	6r   r9  c                   6    e Zd ZdZdZej                  ZdZd Z	y)UnsaltedHashz!test algorithm which lacks a saltunsalted_test_hashrU   c                     t        |t              r|j                  d      }d|z   }t        t	        j
                  |      j                               S )Nr\   s   boblious)r]   r   r^   r	   r_   r`   ra   r+   r2   datas      r   r3   zUnsaltedHash._calc_checksum  sA    fg&]]7+FV#W\\$/99;<<r   N)
r4   r5   r6   r&  r7   rC   LOWER_HEX_CHARSr:   r;   r3   r   r   r   rh  rh    s    +D''NM=r   rh  c                       e Zd ZdZdZdZdZdZdZe	j                  xZZ ej                   ed            Zed        Zd	 Zd
 Zy)
SaltedHashztest algorithm with a saltsalted_test_hashr   r   r   rU   z^@salt[0-9a-f]{42,44}$c                     | j                  |      st        j                  j                  |       t	        |t
              r|j                  d      } | |dd |dd        S )Nrq   r   i)r   rs   )rF   rC   excInvalidHashErrorr]   rt   ru   rY   s     r   rv   zSaltedHash.from_string0  sT    ||D!&&))#..dE";;w'DQsd34j99r   c                 `    t        d      | j                  | j                  fz  }t        |      S )Nz	@salt%s%s)r   r   rs   r
   r$  s     r   	to_stringzSaltedHash.to_string8  s(    ~DMM ::T""r   c                    t        |t              r|j                  d      }| j                  j                  d      |z   | j                  j                  d      z   }t	        t        j                  |      j                               S )Nr\   rq   )r]   r   r^   r   r	   r_   r`   ra   rk  s      r   r3   zSaltedHash._calc_checksum<  sd    fg&]]7+Fyy(61DII4D4DW4MMW\\$/99;<<r   N)r4   r5   r6   r&  r7   r   r   r   r;   rC   rm  r   r:   ry   rz   r   r{   rf   rv   ru  r3   r   r   r   ro  ro  $  s`    $DLMMM"$"4"44J"**Q789K: :#=r   ro  u   Ιωαννηςc                   "    e Zd ZeZdedfgZd Zy)UnsaltedHashTest)rM  (61cfd32684c47de231f1f982c214e884133762c0(96b329d120b97ff81ada770042e44ba87343ad2bc                     | j                  t        t        d       | j                  t        t        j                  d       y )Nxr   r   r   )rH   rI   rh  rK   )r+   s    r   test_bad_kwdszUnsaltedHashTest.test_bad_kwdsS  s2    )\<)\%;%;AFr   N)r4   r5   r6   rh  handler
UPASS_TEMPknown_correct_hashesr}  r   r   r   rx  rx  K  s$    G 	A	?@
Gr   rx  c                   "    e Zd ZeZdedfgZd Zy)SaltedHashTest)rM  z/@salt77d71f8fe74f314dac946766c1ac4a2a58365482c0z1@salt9f978a9bfe360d069b0c13f2afecd570447407fa7e48c                     t        d      j                  }| j                  t        t         |d        | j                  t        t         |d       y )NTr   r
  r   )ro  r   rH   rI   rN   )r+   stubs     r   r}  zSaltedHashTest.test_bad_kwds_  s@    t,;;)Z$TJ*j4eLr   N)r4   r5   r6   ro  r~  r  r  r}  r   r   r   r  r  W  s$    G 	H	HI
Mr   r  ))r&  
__future__r   ry   r_   loggingr   r   passlib.hashr   r   passlib.excr   r   passlib.utils.compatr	   r
   r   passlib.utils.handlersutilshandlersrC   passlib.tests.utilsr   r   r   r4   logr   r   objectr(  r9  rD   rh  r   rx   ro  r  rx  r  r   r   r   <module>r     s    D & 	    0 ?8 8 # # 5 "

xG8 xGJB B(O6 O6l
=2## 
==R.. =J ;<

G{ 
GM[ Mr   