
    K}bg}                        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j!                  Z" G d dej#        ej$                  Z% ed          Z& G d de          Z' G d de          Z(dS )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                 B      fdt           |                    S )z1generate all strings of given size using alphabetc              3   h   K   | dk     rD ]}|V  d S D ]} | dz
            D ]	}||z   V  
d S )N       )sizechartailalphabethelpers      t/home/e360mart.nyusoft.in/public_html/e360mart_env/lib/python3.11/site-packages/passlib/tests/test_utils_handlers.pyr   z_makelang.<locals>.helper   s~      !88   



  ! $ $"F46NN $ $Dt)OOOO$$ $    )set)r   r   r   s   ` @r   	_makelangr      s:    $ $ $ $ $ $ vvd||r   c                   Z    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dS )SkeletonTestztest hash support classesc                 n    G fddt           j                  |                                         t	          d                               |                                         d                     |                                         t	          d                               |                                         t	          d                               |                                         d                     |                                         t	          d                               |                                         t	          d	                               |                                         t	          d
                               |                     t          j        d           |                     t          j        d           |                     	                                
                    d                     |                                         dd                     |                                         dt	          d                               |                                         dd                     |                                         dt	          d                               |                                         ddd                     |                     t          j        dd           |                     t          j        dt	          d                     |                     
                    d          d           |                     
                    dd          d           dS )ztest StaticHandler classc                   b     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   Fc                 L     t          |           j        di | || _        d S Nr   )super__init__r$   )selfr$   kwds	__class__r"   s      r   r*   z8SkeletonTest.test_00_static_handler.<locals>.d1.__init__9   s/    (b$(004000 			r   c                 L    | j         rt          d          nt          d          S )Nba)r$   r   r+   secrets     r   _calc_checksumz>SkeletonTest.test_00_static_handler.<locals>.d1._calc_checksum=   s    !%6qvvv#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1S66LQtWWNM! ! ! ! ! ! !7 7 7 7 7 7 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 	7 	7 	7 	7 	7! 	7 	7 	7 	AdGG,,---E**+++AdGG,,---QtWW--...U++,,,QsVV,,---QsVV,,---QsVV,,---)R[$777)R[!444 	555 			#u--...		#agg..///3..///3qww//000		#u4	88999*bie<<<*biagg>>> 	t,,,400$77777r   c                     G d dt           j                  }|                     d          5  |                    d          }ddd           n# 1 swxY w Y   |                     |d           |                     |                    d|                     |                     |                    d|                     |`| 	                    t          |j        d           dS )ztest StaticHandler legacy attrc                   T    e Zd ZdZed             Zed             Zed             ZdS )3SkeletonTest.test_01_calc_checksum_hack.<locals>.d1r"   c                 z    |rt          |          dk    rdS 	 t          |d           n# t          $ r Y dS w xY wdS )N(   F   T)lenintrN   clsrL   s     r   rF   z<SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.identifyf   sX     !s4yyB 5!bMMMM! ! ! ! 55!ts   * 
88c                    |t          d          t          |t                    r|                    d          }|$|                     |          st          d          t          j        d|z                                             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   s~    >#$8999fg.. 4#]]733F#CLL,>,>#$^444|FVO44>>@@@r   c                 |    |t          d          |                     ||          |                                k    S )Nzno hash specified)rN   rc   lowerrb   s      r   rM   z:SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.verify{   s7    <$%8999{{6400DJJLL@@r   N)r4   r5   r6   r7   classmethodrF   rc   rM   r   r   r   r"   rS   c   sp        D  [ A A [A A 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]   s3   	A 	A 	A 	A 	A! 	A 	A 	A> ##$KLL 	# 	#776??D	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#IJJJ		&$//0007D11222 J-rw?????s   AAAc                 n    G d dt           j                  }|                     t          |j        d           |                     t          |j        d           |                     |                    d                     |                     |                    d                     |                     |                    d                     t          j        t          d                    |_
        |                     t          |j        d           |                     t          |j        d           |                     |                    d	                     |                     |                    d                     |`
t          d
          |_        |                     t          |j        d           |                     t          |j        d           |                     |                    d                     |                     |                    d                     |`dS )ztest GenericHandler.identify()c                   $    e Zd Zed             ZdS ))SkeletonTest.test_10_identify.<locals>.d1c                     t          |t                    r|                    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   sM    dE** 0;;w//D1S66>>3----$$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   s   	% 	% 	% 	% 	%" 	% 	% 	% 	)R[$777)R[!444R)))C(()))S))*** AdGG,,)R[$777)R[!444D))***S))***N S66)R[$777)R[!444D))***S))***HHHr   c                     G d dt           j                  dfd	}|                     t          |t	          d                     |                      |t	          d                    t	          d                     |                      |t	          d                    t	          d                     |                     t          |t	          d                     |                     t          |t	          d	                     |                     t          |d
           |                                  j        t	          d                     dS )z%test GenericHandler checksum handlingc                   ,    e Zd ZdZdZ ed          ZdS ).SkeletonTest.test_11_norm_checksum.<locals>.d1r"      xzN)r4   r5   r6   r7   r;   r   r:   r   r   r   r"   r      s%        DMQtWWNNNr   r"   Nc                 "     dd| i|j         S )Nrs   r   rr   )rs   kr"   s     r   norm_checksumz9SkeletonTest.test_11_norm_checksum.<locals>.norm_checksum   s!    2--x-1--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   sO   	% 	% 	% 	% 	%" 	% 	% 	%
	7 	7 	7 	7 	7 	7 	*mQuXX>>> 	qyy111V99===qyy111V99=== 	*mQwZZ@@@ 	*mQvYY??? 	)]G<<< 	,aii88888r   c                 .    G d dt           j        t           j                  fd}|                      |d          d           |                     t
          |t          d                     |                                  j        d           dS )z*test GenericHandler + HasRawChecksum mixinc                       e Zd ZdZdZdS )2SkeletonTest.test_12_norm_checksum_raw.<locals>.d1r"   r   N)r4   r5   r6   r7   r;   r   r   r   r"   r      s        DMMMr   r"   c                       | i |j         S r   rr   )r0   r   r"   s     r   r   z=SkeletonTest.test_12_norm_checksum_raw.<locals>.norm_checksum   s    2q;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   s    	 	 	 	 	"B$5 	 	 		( 	( 	( 	( 	( 	w//999 	)]AfII>>> 	,i88888r   c                 r    G d dt           j        t           j                  fd}fd}t          dd          }t          dd          }t          dd          }|                     t
          |           |                     t
          |d	
           |                      |d          |           t          j        d          5 }|                     t          |d
           |                     t          |d
           | 
                    |           |                      |d
          d           |                      |d
          d           |                      |d
          d           | 
                    |           |                     t          |d
           | 
                    |           d	d	d	           n# 1 swxY w Y   t          j        d          5 }|                     t          |d           |                     t          |d           | 
                    |           |                      |d          |           |                      |d          |           |                      |d          |           | 
                    |           |                     t          |d           | 
                    |           |                      |dd          |           | 
                    |dg           d	d	d	           n# 1 swxY w Y   `|                     g           5  |                     t           |d	                    d           |                     t           |d                    d           d	d	d	           d	S # 1 swxY w Y   d	S )z#test GenericHandler + HasSalt mixinc                   &    e Zd ZdZdZdZdZdZdZdS )*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 !JJJr   r"   c                       di | j         S r(   r   r   r"   s    r   	norm_saltz1SkeletonTest.test_20_norm_salt.<locals>.norm_salt   s    27777<r   c                 @      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   s0    .828..b.A..DAAA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 	G 	G 	G 	G 4##4##4## 	)Y///)YT:::iiT222F;;; $D111 	*T j)"===j)#>>>##D))) YYD1114888YYE222E:::YYF333V<<<##D))) j)(CCC##D)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*$ $D111 	NT j(A666j(A666##D))) MM((1++v...MM((1++v...MM((1++v...##D))) j(A666##D)))MM((1d333V<<<##D+K*LMMM%	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N* ##B'' 	2 	2S$00!444S!--q111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s9   C7GGG/D)L$$L(+L(AN,,N03N0c                     G d dt           j        t           j                  fd}|                     t          |           |                     t          |d           |                      |d          d           |                     t          |d	           t          j        d
          5 }|                     t          |d           | 	                    |           |                      |d          d           |                      |d          d           |                      |d          d           | 	                    |           |                     t          |d           | 	                    |           ddd           n# 1 swxY w Y   d_
        |                     t          |d           dS )z%test GenericHandler + HasRounds mixinc                   "    e Zd ZdZdZdZdZdZdS ),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NNNr   r"   c                       di | j         S r(   r   r   s    r   norm_roundsz5SkeletonTest.test_30_init_rounds.<locals>.norm_rounds@  s    27777>!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  s2   	 	 	 	 	r0 	 	 		" 	" 	" 	" 	" 	)[111)[>>>$777;;; 	)[=== $D111 	*Tj+a@@@##D))) [[222A666[[222A666[[222A666##D))) j+a@@@##D)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*  !)[tDDDDDs   4CFF!Fc                 ~    G d dt           j        t           j                  }|                     t          |j                   |                     t          |j                   |                     t          |j        d           |                     t          |j        d           |                     |                                           d|_	         |            }| 
                    |                    d          d           |                    d           |                    d           | 
                    |                    d          d           |                     t          |j        d           |                     |                    d                     |                     |                    d                     d|_        |                     |                                           |                    d           | 
                    |                    d          d           |                     t          |j        d	           |                     t          |j        d	           |                    d            G d
 d|          }|                     t          |j        d           dS )z+test GenericHandler + HasManyBackends mixinc                   Z    e Zd ZdZdZdZdZdZed             Z	ed             Z
d Zd Zd	S )
)SkeletonTest.test_40_backends.<locals>.d1r"   r   r0   r/   Fc                 L    | j         r|                     | j                   dS dS 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233GHHH4 5r   c                 L    | j         r|                     | j                   dS dS r   )	_enable_br   _calc_checksum_br   s    r   _load_backend_bz9SkeletonTest.test_40_backends.<locals>.d1._load_backend_br  r   r   c                     dS Nr0   r   r1   s     r   r   z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_az      sr   c                     dS 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  s        DL!HII! ! [! ! ! [!      r   r"   anydefaultTrB   r/   r0   r@   c                       e Zd ZdZdS ))SkeletonTest.test_40_backends.<locals>.d2TN)r4   r5   r6   _has_backend_ar   r   r   d2r     s        !NNNr   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 	 	 	@ 	-r~>>>-r~>>>-r~uEEE-r~yIII))***  bdd++C00#666 	s
u++C00#666 	-r~sCCCs++,,,,,---  	(()))
s++C00#666 	*bnc:::*bnc::: 	s	" 	" 	" 	" 	" 	" 	" 	".".#>>>>>r   c                 .   t          j        dt          d            G d dt          j        t          j                  }|                     t          |j                   |                     t          |j	                   |                     t          |j	        d           |                     t          |j	        d           | 
                    |                                           d|_         |            }|                     |                    d	          d
           |	                    d
           |	                    d           |                     |                    d	          d
           |                     t          |j	        d           |                     |                    d
                     | 
                    |                    d                     d|_        |                     |                                           |	                    d           |                     |                    d	          d           |                     t"          |j	        d           |                     t"          |j        d           dS )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	dS ))SkeletonTest.test_41_backends.<locals>.d1r"   r   r   Fc                     dS r   r   r1   s     r   r   z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_a  r   r   c                     dS 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     sK        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  sX   'G	 	 	 	
	 	 	 	 	#R%6 	 	 	  	-r~>>>-r~>>>-r~uEEE-r~yIII))*** ! bdd++C00#666 	s
u++C00#666 	-r~sCCCs++,,,,,--- ! 	(()))
s++C00#666 	*bnc:::*bnc:::::r   c                     G d dt           j        t           j                  fd}|                     t          |           |                     t          |d           |                      |d          t          d                     |                      |t          d                    t          d                     |                      |t          d	                    t          d	                     |                     t          |t          d
                     |                      |t          d                    t          d                     |                     t          |t          d                     |                     	                    t          d                               |                     	                    t          d                               | 
                    	                    t          d                               | 
                    	                    t          d                               | 
                    	                    t          d                               |                     t          j	        d           |                     t          j	        d           d_        |                     t          |d           dS )z#test GenericHandler + HasManyIdentsc                       e Zd ZdZdZ ed          Z ed           ed          fZ ed           ed          iZdS )+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     sY        D%LAdGGMAdGGQQtWW-Laffaagg.MMMr   r"   c                       di | j         S r(   r   r   s    r   
norm_identz3SkeletonTest.test_50_norm_ident.<locals>.norm_ident  s    27777= 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 	/ 	/ 	/	! 	! 	! 	! 	! 	)Z000)Zt<<<666$@@@ 	!D''222AdGG<<<!D''222AdGG<<<*j$@@@ 	!C&&1111T77;;; 	*j#??? 	AgJJ//000AgJJ//000QwZZ00111QsVV,,---QrUU++,,,)R[$777)R[!444  .*4HHHHHr   c                    ddl m} |j                            d          }|                     |t          d          t          d          d           d}t          d          }t          d	          }|j                            |          }|                     |t          |d
d|                     |j                            |d          }|                     |t          |d
d                     |j                            |d          }|                     |t          d
dt          d          t          d                               |j                            d          }|                     |t          t          d          t          d          d                     d}|j                            |          }|                     |t          ddd                     |j                            |d          }|                     |t          t          d          dt          d                               d S )!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!PQQQ N !!;<<",,Q//1T6:Q"H "H "H 	I 	I 	I ",,Q,??1T4!P!P!PQQQ ",,Q,>>T4%&&EFF"H "H "H 	I 	I 	I
 ",,-{||DEE%&&"
 "
 "
 	 	 	 P!++B//SC"
 "
 "
 	 	 	 !++B+>>455+,,"
 "
 "
 	 	 	 	 	r   c                    ddl m} |                     |j                                        ddd           |                     |j                                        ddd           |                     |j        dd	           |                     |j                                        d
ddd           |                     |j        dd           |                     |j                                        dddd           dS )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  s6    	!      	//11&("55	7 	7 	7 	,,..&)377	9 	9 	9 	t(*:MJJJ*2244&)RDD	F 	F 	F 	t')9=III)1133&)REE	G 	G 	G 	G 	Gr   N)r4   r5   r6   __doc__rP   rl   r}   r   r   r   r   r   r   r  r  r%  r   r   r   r   r   )   s        ##
,8 ,8 ,8\.@ .@ .@f! ! !F"9 "9 "9H9 9 9*E2 E2 E2R(E (E (ETI? I? I?V8; 8; 8;t(I (I (I\6 6 6pG G G G Gr   r   c                   $    e Zd ZdZd Zd Zd ZdS )dummy_handler_in_registryz6context manager that inserts dummy handler in registryc                 z    || _         t          d|z   t          j        ft	          |d                    | _        d S )Ndummy_r   )r7   r   )r7   typerC   rx   r  dummy)r+   r7   s     r   r*   z"dummy_handler_in_registry.__init__p  sF    	(T/B,=+?B
 B
 B
  


r   c                     ddl m} |                    | j        d           |                    | 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  sp    $$$$$$%%di5%AAA''
333))$)44
BBBBzr   c                 J    ddl m} |                    | j        d           d S r.  )r  r/  r1  r7   )r+   exc_infor/  s      r   __exit__z"dummy_handler_in_registry.__exit__~  s5    $$$$$$%%di5%AAAAAr   N)r4   r5   r6   r&  r*   r4  r7  r   r   r   r(  r(  n  sL        @@    B B B B Br   r(  c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )PrefixWrapperTestztest PrefixWrapper classc                    t          j        ddddd          }|                     |j        d           |                     |j        d           |                     |j        t                     |                     |j        t                     t          d          5 }|                     |j        t                     ddd           dS # 1 swxY w Y   dS )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LL 	):666b)4000 	bj(+++b)8444 'z22 	0eMM"*h///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   !CCCc                 z   t          j        dddd          }|                     |j        d           |                     |j        t                     |                     |j        t                     t          d          5 }|                     |j        t                     ddd           dS # 1 swxY w Y   dS )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A 	):666b)8444bj(+++ 'z22 	0eMM"*h///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   !B00B47B4c                    t          j        dt          dd          }|                     |j        d           |                     |j        t                     |                     |j        t                     t          d          5 }|                     |j        t                     ddd           dS # 1 swxY w Y   dS )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00b)8444bj(+++ 'z22 	0eMM"*h///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   !B55B9<B9c                    t          j        dddd          }|                     |j        d           |                     |j        t          j                   |                     dt          |          v            t          j        ddd          }|                     |j        t          j                   | 
                    dt          |          v            d S )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A$'''box'<===R0111dNG<<bo|'@AAAB/00000r   c                    t          j        dddd          }d}d}|                     |                                d           |                     t
          |j        dd            |                     |                    d|          |           |                     t          |j        d|           |                     |                    d          |           | 	                    |
                    |                     |                     |
                    |                     |                     t          |j        d|           | 	                    |                    d|                     d S )	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  sI   dJAA-- 	)HIII 	)RZTBBBJ44c:::*bj*cBBB 	,,c222 	C(()))S))*** 	*biSAAA		*c2233333r   c                 F   t          j        ddd          }|                     |j        t	          d                     |                     |j        d            t          j        ddd          }|                     |j        d            |                     |j        d            t          j        dddd          }|                     |j        d            |                     |j        d            t          j        dddd	
          }|                     |j        t	          d	                     |                     |j        d            t          j        dddd
          }|                     t          t           j        dddd
           |                     t          t           j        dddd
           t          j        ddd          }|                     |j        d            |                     |j        t	          d          t	          d          f           t          j        dddd
          }|                     |j        t	          d                     |                     |j        d            |                     t          t           j        ddd
           | 	                    d          5  t          j        dddd          }d d d            n# 1 swxY w Y   |                     |j        d            |                     |j        d            d S )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  s)   T:w77!L//222and+++ T;88agt$$$and+++ T:w@@agt$$$and+++ T:wdCCC!D''***and+++ T:whGGG*b&6j! 	 	0 	0 	0*b&6j! 	 	2 	2 	2 T8W55agt$$$!J--:)GHHH T;tDDD!G**---and+++ 	*b&6kQUVVV ##$IJJ 	N 	N xSMMMA	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N...$'''''s   ;K  K$'K$c                 |    t          j        dddd          }|                     t          |          d           dS )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  sJ    T;UKKKa	 	 	 	 	r   c                 v    t          j        ddd          }|                     t          |j        d           dS )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BB*aff55555r   N)r4   r5   r6   r&  rD  rF  rH  rK  rP  r^  rd  rf  r   r   r   r9  r9    s        ""0 0 0 0 0 00 0 01 1 14 4 40-( -( -(^	 	 	6 6 6 6 6r   r9  c                   .    e Zd ZdZdZej        ZdZd Z	dS )UnsaltedHashz!test algorithm which lacks a saltunsalted_test_hashrU   c                     t          |t                    r|                    d          }d|z   }t          t	          j        |                                                    S )Nr\   s   boblious)r]   r   r^   r	   r_   r`   ra   r+   r2   datas      r   r3   zUnsaltedHash._calc_checksum  sS    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dS )
SaltedHashztest algorithm with a saltsalted_test_hashr   r   r   rU   z^@salt[0-9a-f]{42,44}$c                     |                      |          st          j                            |           t	          |t
                    r|                    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sQsUd344j99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)    ~~DM ::T"""r   c                 ,   t          |t                    r|                    d          }| j                            d          |z   | j                            d          z   }t	          t          j        |                                                    S )Nr\   rq   )r]   r   r^   r   r	   r_   r`   ra   rk  s      r   r3   zSaltedHash._calc_checksum<  sx    fg&& 	,]]7++Fy((61DI4D4DW4M4M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4J"*QQ78899K: : [:# # #= = = = =r   ro  u   Ιωαννηςc                   $    e Zd ZeZdedfgZd ZdS )UnsaltedHashTest)rM  (61cfd32684c47de231f1f982c214e884133762c0(96b329d120b97ff81ada770042e44ba87343ad2bc                     |                      t          t          d           |                      t          t          j        d           d S )Nxr   r   r   )rH   rI   rh  rK   )r+   s    r   test_bad_kwdszUnsaltedHashTest.test_bad_kwdsS  sA    )\<<<)\%;AFFFFFr   N)r4   r5   r6   rh  handler
UPASS_TEMPknown_correct_hashesr}  r   r   r   rx  rx  K  sD        G 	A	?@
G G G G Gr   rx  c                   $    e Zd ZeZdedfgZd ZdS )SaltedHashTest)rM  z/@salt77d71f8fe74f314dac946766c1ac4a2a58365482c0z1@salt9f978a9bfe360d069b0c13f2afecd570447407fa7e48c                     t          d          j        }|                     t          t           |d            |                     t          t           |d           d S )NTr   r
  r   )ro  r   rH   rI   rN   )r+   stubs     r   r}  zSaltedHashTest.test_bad_kwds_  sU    t,,,;)Z$TJJJ*j4eLLLLLr   N)r4   r5   r6   ro  r~  r  r  r}  r   r   r   r  r  W  sD        G 	H	HI
M M M M 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 D & % % % % % 				         0 / / / / / / / ? ? ? ? ? ? ? ?8 8 8 8 8 8 8 8 8 8 # # # # # # # # # 5 5 5 5 5 5 5 5 " " " " " "i

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