
    FcL                         d dl Z d dlZe j                            d d           dej        d<   d dlZd dlmZmZ d dl	m
Z
mZ d dlmZ dZdZ G d	 d
e          Zedk    rdZdZd dlZ ej                     dS dS )    Nz
bin/python1PYTHONUNBUFFERED)generate_random_passwordnet)drsuapimisc)KDCBaseTestFc                   *     e Zd Z fdZd Zd Z xZS )NtHashTestsc                 x    t                                                       t          | _        t          | _        d S N)supersetUpglobal_asn1_printdo_asn1_printglobal_hexdump
do_hexdump)self	__class__s    @/usr/lib/python3/dist-packages/samba/tests/krb5/nt_hash_tests.pyr   zNtHashTests.setUp&   s'    .(    c                 `    t          t          t          j                            dd                              }                                 }                                 }                     ||t          j	        |
                                          t          j	                              \  }}|j                                        d         t          j        |           fdd }d }	t          d t!          ||          D                       }
t          fd	t!          |	|          D                       }|r                     d|
d
           n                     d|
d           |r                     ||d           d S                      d|d           d S )NEXPECT_NT_HASHr   )destination_dsa_guidsource_dsa_invocation_id   c                     | j         j        dS                     |            t          d | j         j        D                       }                    d|dz             |dz  S )Nr   c              3   >   K   | ]}t          |j                  V  d S r   )lenblob).0values     r   	<genexpr>zANtHashTests._check_nt_hash.<locals>.num_hashes.<locals>.<genexpr>A   s*      LLUUZLLLLLLr         )	value_ctrvaluesreplicate_decryptsumassertEqual)attrlengthbindnet_ctxridr   s     r   
num_hashesz.NtHashTests._check_nt_hash.<locals>.num_hashes;   sp    ~$,q%%dD#666LLdn6KLLLLLFQ---R<r   c                 ,    | j         t          j        k    S r   )attidr   DRSUAPI_ATTID_unicodePwdr+   s    r   is_unicodePwdz1NtHashTests._check_nt_hash.<locals>.is_unicodePwdE   s    :!AAAr   c                 ,    | j         t          j        k    S r   )r2   r   DRSUAPI_ATTID_ntPwdHistoryr4   s    r   is_ntPwdHistoryz3NtHashTests._check_nt_hash.<locals>.is_ntPwdHistoryH   s    :!CCCr   c              3   .   K   | ]}|j         j        V  d S r   )r&   
num_values)r!   r+   s     r   r#   z-NtHashTests._check_nt_hash.<locals>.<genexpr>K   sC        O  O$( !% 9  O  O  O  O  O  Or   c              3   .   K   | ]} |          V  d S r    )r!   r+   r0   s     r   r#   z-NtHashTests._check_nt_hash.<locals>.<genexpr>N   sI       P P#'  *z$// P P P P P Pr   zexpected to find NT hashr   zgot unexpected NT hashz$expected to find NT password historyz"got unexpected NT password history)boolintosenvironget	get_samdbget_admin_credsget_secretsr   GUIDget_ntds_GUIDsidsplitr   Netr)   filterr*   )r   dnhistory_lenexpect_nt_hashsamdbadmin_creds
identifier
attributesr5   r8   unicode_pwd_countnt_history_countr-   r.   r0   r/   s   `           @@@@r   _check_nt_hashzNtHashTests._check_nt_hash+   sQ   c"*..1A3"G"GHHII  **,,'+'7'7!%5+>+>+@+@!A!A%)Y[[	 (8 (2 (2$j* n""$$Q''+&&	  	  	  	  	  	  	  	 	B 	B 	B	D 	D 	D    O  O,2=*,M,M O  O  O O O  P P P P+1/:+N+NP P P P P  	7Q 179 9 9 9 Q 157 7 7  	C[*:CE E E E E Q 0AC C C C Cr   c                 j   |                                  }|                                 }|                     ||t          j        j                  \  }}|                     |d           |                                }|                     |j	        |           |	                    d           d|
                                 d                    d          }d}t          |dz
            D ]}t          dd          }	d|	 d                    d          }
t          j        t          j        ||                    }t          j        |t          j        d	          |d<   t          j        |
t          j        d	          |d
<   |                    |           |
}|                     ||           d S )N)account_typer   )rL   0"z	utf-16-le       
unicodePwdr   )rB   get_new_usernamecreate_accountr	   AccountTypeUSERrT   get_minPwdAge
addCleanupset_minPwdAgeget_passwordencoderanger   ldbMessageDnMessageElementFLAG_MOD_DELETEFLAG_MOD_ADDmodify)r   rN   	user_nameclient_creds	client_dn	minPwdAgeold_utf16pwrL   _passwordutf16pwmsgs               r   test_nt_hashzNtHashTests.test_nt_hasha   s     ))++	"&"5"59$05 #6 #7 #7i 	I1555
 ''))	 	+Y777 	C   8,3355888??LL{Q'' 	" 	"A/B77H%(ooo,,[99G+cfUI6677C)+*-*=*68 8CH )'*-*:*68 8CH LL!KKI{33333r   )__name__
__module____qualname__r   rT   rv   __classcell__)r   s   @r   r   r   $   sZ        ) ) ) ) )
2C 2C 2Cl'4 '4 '4 '4 '4 '4 '4r   r   __main__)sysr?   pathinsertr@   rf   sambar   r   samba.dcerpcr   r   samba.tests.krb5.kdc_base_testr	   r   r   r   rw   unittestmainr<   r   r   <module>r      s   & 


 				 <      !$
  



 / / / / / / / / & & & & & & & & 6 6 6 6 6 6 d4 d4 d4 d4 d4+ d4 d4 d4N zNOOOHMOOOOO	 r   