
    b1                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlZddlZddlZddlmZ ddlZdZ ej        dd          ZdZd Zd Z G d de          Z dS )zI
Base class for tests for source4/dsdb/samdb/ldb_modules/password_hash.c
    )Credentials)SamDB)system_session)TestCase)
ndr_unpack)drsblobs)DOMAIN_PASSWORD_STORE_CLEARTEXT)"UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED)delete_force)PasswordCommonN)md5PasswordHashTestUser    zPWHash@User.Principlec                 \    | d S d}| j         j        D ]}|dz  }||j        k    r||fc S d S )Nr      )subpackagesname)scr   idxps       ;/usr/lib/python3/dist-packages/samba/tests/password_hash.pyget_packager   1   sQ    	zt
CV_  q16>>8OOO  4    c                     | d|d|}t          |t                    r|                    d          }t          |                                          S )N:utf8)
isinstancestrencoder   	hexdigest)userrealmpassworddatas       r   calc_digestr&   A   sS    uuuhh/D$ #{{6""t99   r   c                   J     e Zd Z fdZd ZddZd Zd Zd Zd	 Z	d
 Z
 xZS )PassWordHashTestsc                     t           j                                        | _        t	          t
          |                                            d S N)sambatestsenv_loadparmlpsuperr(   setUp)self	__class__s    r   r0   zPassWordHashTests.setUpL   s;    +**,,&&,,.....r   c                     | j                                         }t          |          }|r|t          z  }n|t           z  }| j                             t          |                     d S r*   )ldbget_pwdPropertiesintr	   set_pwdPropertiesr   )r1   	cleartextpwdPropertiespropss       r   set_store_cleartextz%PassWordHashTests.set_store_cleartextP   sg    2244M"" 	644EE555E""3u::.....r   NFc           
      &   |#|D ] \  }}| j                             ||           !|t                      | _        t	                      | _        | j                            | j                    t	                      | _        t          | j        | j        | j                   | _        n|| _        | j        	                    | j        
                                d| j                                        z  dg          }t          |d         d         d                   | _        | j                                        | _        | j                                        }| j        
                                                                }t%          j        | | j                   | j                                        | _        d}	|rX| j                                        }
|                     | j        j        |
           |                     |           |	t2          z  }	t5          | j        dt6          z   dz   | j        z              | j                            dt6          z   dz   | j        z   dt6          t:          t<          t          |	          d	           d S )
N)session_infocredentialsr.   z	ncName=%snETBIOSName)base
expressionattrsr   cn=
,cn=users,r"   )dnobjectclasssAMAccountNameuserPassworduserPrincipalNameuserAccountControl)r.   setr   credsr   sessionguessr   r4   searchget_config_basednget_default_basednr   netbios_domaindomain_dns_name
dns_domain	domain_dnget_linearizedr   allow_password_changesbase_dnr5   
addCleanupr7   r;   r
   r   	USER_NAMEadd	USER_PASSUPN)r1   options
clear_textr4   optionvalueresrX   configuration_dnaccount_controlr9   s              r   add_userzPassWordHashTests.add_user]   sW   #* + +FE****;$DJ)++DLJTW%%%)++DL$,)- $) ) )DHH DHhoo48#=#=#?#?)4tx7R7R7T7T)T%2O  5 5 "#a&"7":;;(2244 ($$&&  85577FFHH 	-dDH===x))++ 	B H6688MOODH6FFF$$Z000AAO 	TXuy0<?$,NOOO9$|3dlB"(&"%#&#7#7
 
 	 	 	 	 	r   c                 .   dt           z   dz   | j        z   }| j                            t          j        |dg          }|                     dt          |          dk               |d         }|d         d         }t          t          j	        |          }|S )NrC   rD   supplementalCredentials)scoper@   rB   Tr   )
rZ   rX   r4   rO   
SCOPE_BASEassertIslenr   r   supplementalCredentialsBlob)r1   r@   rb   objsc_blobr   s         r   get_supplemental_credsz(PassWordHashTests.get_supplemental_creds   s    y </$,>hooCN#'%>$?  A A 	dCHHqL)))!f/03<gFF	r   c                     t          |||          }t          j        t          |                                        d          }d|d|d|d|d|d}|                     |||           d S )Nr   zDigest expected[z
], actual[z], user[z	], realm[z], pass[])r&   binasciihexlify	bytearraydecodeassertEqual)r1   r"   r#   r$   digestexpectedactualerrors           r   check_digestzPassWordHashTests.check_digest   s    tUH55!)F"3"344;;FCC 666444: 	6511111r   c                 t   |                      d|j                   |                     t          | j        t
          |j        d         j                   |                     t                                          | j                                        t
          |j        d         j                   |                     t          	                                | j        	                                t
          |j        d         j                   |                     t          | j        	                                t
          |j        d         j                   |                     t          | j                                        t
          |j        d         j                   |                     t          	                                | j                                        t
          |j        d         j                   |                     t                                          | j        	                                t
          |j        d         j                   |                     t          | j
        t
          |j        d	         j                   |                     t                                          | j
                                        t
          |j        d
         j                   |                     t          	                                | j
        	                                t
          |j        d         j                   |                     t          | j
        	                                t
          |j        d         j                   |                     t          | j
                                        t
          |j        d         j                   |                     t          	                                | j
                                        t
          |j        d         j                   |                     t                                          | j
        	                                t
          |j        d         j                   |                     t          dt
          |j        d         j                   |                     t                                          dt
          |j        d         j                   |                     t          	                                dt
          |j        d         j                   | j        dt          }|                     |dt
          |j        d         j                   | j                                        dt                                          }|                     |dt
          |j        d         j                   | j        	                                dt          	                                }|                     |dt
          |j        d         j                   |                     t          dt
          |j        d         j                   |                     t                                          dt
          |j        d         j                   |                     t          	                                dt
          |j        d         j                   |                     t          dt
          |j        d         j                   |                     t                                          dt
          |j        d         j                   |                     t          	                                dt
          |j        d         j                   | j        dt          }|                     |dt
          |j        d         j                   | j                                        dt                                          }|                     |dt
          |j        d          j                   | j        	                                dt          	                                }|                     |dt
          |j        d!         j                   d S )"N   r   r                        	   
                      \         Digest                           )rv   
num_hashesr{   rZ   rR   r\   hasheshashlowerupperrT   r]   )r1   digestsr   s      r   check_wdigestsz PassWordHashTests.check_wdigests   s   W/000 	)-#!./4	6 	6 	6 	)//++-3355#!./4	6 	6 	6 	)//++-3355#!./4	6 	6 	6 	)-3355#!./4	6 	6 	6 	)-3355#!./4	6 	6 	6 	)//++-3355#!./4	6 	6 	6 	)//++-3355#!./4	6 	6 	6 	)/#!./4	6 	6 	6 	)//++///11#!./4	6 	6 	6 	)//++///11#!.05	7 	7 	7 	)///11#!.05	7 	7 	7 	)///11#!.05	7 	7 	7 	)//++///11#!.05	7 	7 	7 	)//++///11#!.05	7 	7 	7 	##!.05	7 	7 	7 	#))++#!.05	7 	7 	7 	#))++#!.05	7 	7 	7
  ...		:$#!.05	7 	7 	7
  .446666	8I8I8IJ$#!.05	7 	7 	7
  .446666	8I8I8IJ$#!.05	7 	7 	7 	)"#!.05	7 	7 	7 	)//++"#!.05	7 	7 	7 	)//++"#!.05	7 	7 	7 	#"#!.05	7 	7 	7 	#))++"#!.05	7 	7 	7 	#))++"#!.05	7 	7 	7  ...		:$"#!.05	7 	7 	7
  .446666	8I8I8IJ$"#!.05	7 	7 	7
  .446666	8I8I8IJ$"#!.05	7 	7 	7 	7 	7r   c                 N   |                      t          |          |j                   d}|D ]\  }}}|                      ||j        |         j                   |j        |         j                            d                              d          }|                      ||d                    |d|d|d         }nd|||d         fz  }t          j        t          |          }|                      ||j        |         j                            d                     |dz  }d S )Nr   r   $r   r~   z$%s$rounds=%d$%sr   )
rv   rk   r   r   schemera   ru   splitcryptr\   )	r1   uprx   itagalgroundsr%   cmds	            r   checkUserPasswordz#PassWordHashTests.checkUserPassword1  s'    	X666"* 	 	S#vS")A,"56669Q<%,,V44::3??DS$q'***~~"%##tAww/(Ca+AA {9c22HXry|'9'@'@'H'HIIIFAA	 	r   c                     t                      }|                                 |                    |           |                                }t	          |          }|                     ||           d S r*   )r   set_anonymousset_passwordget_nt_hashrt   rv   )r1   r$   nt_hashrL   rx   ry   s         r   checkNtHashzPassWordHashTests.checkNtHashI  sk    8$$$$$&&7##6*****r   )NFN)__name__
__module____qualname__r0   r;   re   ro   r{   r   r   r   __classcell__)r2   s   @r   r(   r(   J   s        / / / / /	/ 	/ 	/5 5 5 5p	 	 	2 2 2D7 D7 D7L  0+ + + + + + +r   r(   )!__doc__samba.credentialsr   samba.samdbr   
samba.authr   samba.testsr   	samba.ndrr   samba.dcerpcr   samba.dcerpc.samrr	   
samba.dsdbr
   r   samba.tests.password_testr   r4   r+   rr   hashlibr   r   rZ   generate_random_passwordr\   r]   r   r&   r(    r   r   <module>r      sw  &  * ) ) ) ) )       % % % % % %                         ! ! ! ! ! ! = = = = = = 9 9 9 9 9 9 $ $ $ $ $ $ 4 4 4 4 4 4 



          #	*E*2r22	#
 
 
 ! ! !E+ E+ E+ E+ E+ E+ E+ E+ E+ E+r   