a
     {ak                     @   s   d dl Z d dlZe jd d dejd< d dlmZ d dlm  m	  m
Z d dlmZmZmZmZmZmZmZmZmZmZmZmZ dZdZG dd	 d	eZed
krdZdZd dlZe  dS )    Nz
bin/python1ZPYTHONUNBUFFERED)RawKerberosTest)AES256_CTS_HMAC_SHA1_96ARCFOUR_HMAC_MD5KDC_ERR_PREAUTH_FAILEDKDC_ERR_PREAUTH_REQUIREDKDC_ERR_SKEW
KRB_AS_REP	KRB_ERRORKU_PA_ENC_TIMESTAMPPADATA_ENC_TIMESTAMPPADATA_ETYPE_INFO2NT_PRINCIPALNT_SRV_INSTFc                       st   e Zd ZdZ fddZdddZddd	Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Z  ZS )KdcTestszP Port of the tests in source4/torture/krb5/kdc-heimdal.c
        To python.
    c                    s   t t|   t| _t| _d S )N)superr   setUpglobal_asn1_printZdo_asn1_printglobal_hexdumpZ
do_hexdump)self	__class__ </usr/lib/python3/dist-packages/samba/tests/krb5/kdc_tests.pyr   4   s    zKdcTests.setUpNc                 C   sv   |  }| }| jt|gd}| jtd|gd}| jdd}d}	| j|t|	|||d |d d|d d d}
| |
}|S )N)Z	name_typenamesZkrbtgti  offsetr   i)padatakdc_optionscnamerealmsnameZ	from_timeZ	till_timeZ
renew_timeZnonceetypesZ	addressesZadditional_tickets)	Zget_usernameZ	get_realmZPrincipalName_creater   r   Zget_KerberosTimeZAS_REQ_createstrZsend_recv_transaction)r   credsr"   r   userr    r   r!   Ztillr   Zreqrepr   r   r   as_req9   s6    
zKdcTests.as_reqr   c                 C   s   | j |d t d}|D ]}|d tkr|d } q8q| j |t d}| ||d }| j|d\}}	| ||	}
| j|
t	 d}
| 
|t|
}
| j|
t d}
| t|
}
|
S )Nze-data)Zasn1Speczpadata-typezpadata-valuer   r   )Z
der_decode	krb5_asn1ZMETHOD_DATAr   ZETYPE_INFO2ZPasswordKey_from_etype_info2Zget_KerberosTimeWithUsecZPA_ENC_TS_ENC_createZ
der_encodeZPA_ENC_TS_ENCZEncryptedData_creater   ZEncryptedDataZPA_DATA_creater   )r   r$   r&   skewZ
rep_padataZpaZetype_info2keyZpatimeZpausecZpa_tsr   r   r   get_enc_timestamp_pa_dataV   s&    z"KdcTests.get_enc_timestamp_pa_datac                 C   s   |  |t dS )zE Check that the kdc response was pre-authentication required
        N)check_error_repr   )r   r&   r   r   r   check_pre_authenicationp   s    z KdcTests.check_pre_authenicationc                 C   s~   |  | | |d t t|d }| d| t|d d }| d| d|d v rzt|d d }| d|d	@  d
S )z Check that the kdc response is an AS-REP and that the
            values for:
                msg-type
                pvno
                tkt-pvno
                kvno
            match the expected values
        msg-typepvno   Zticketztkt-vnokvnoenc-partr   l      N)assertIsNotNoneassertEqualr	   int)r   r&   r/   Ztkt_vnor1   r   r   r   check_as_replyu   s    
zKdcTests.check_as_replyc                 C   s.   |  | | |d t | |d | dS )zg Check that the reply is an error message, with the expected
            error-code specified.
        r.   z
error-codeN)r3   r4   r
   )r   r&   Zexpectedr   r   r   r,      s    
zKdcTests.check_error_repc                 C   sh   |   }tf}| ||}| | | ||}| j|||gd}| | |d d }| t| d S Nr   r2   etype)get_user_credsr   r'   r-   r+   r6   assertEqualsr   r$   r9   r&   r   r   r   r   test_aes256_cts_hmac_sha1_96   s    

z%KdcTests.test_aes256_cts_hmac_sha1_96c                 C   sh   |   }tf}| ||}| | | ||}| j|||gd}| | |d d }| t| d S r7   )r:   r   r'   r-   r+   r6   r;   r<   r   r   r   test_arc4_hmac_md5   s    

zKdcTests.test_arc4_hmac_md5c                 C   sj   |   }ttf}| ||}| | | ||}| j|||gd}| | |d d }| t| d S r7   )r:   r   r   r'   r-   r+   r6   r;   r<   r   r   r   test_aes_rc4   s    

zKdcTests.test_aes_rc4c                 C   sX   |   }ttf}| ||}| | | j||dd}| j|||gd}| |t d S )Ni  )r)   r8   )r:   r   r   r'   r-   r+   r,   r   r<   r   r   r   test_clock_skew   s    
zKdcTests.test_clock_skewc                 C   sd   | j |  d}|d tf}| ||}| | | ||}| j|||gd}| |t d S )N)templatezNot the correct passwordr8   )	Zinsta_credsr:   Zset_passwordr   r'   r-   r+   r,   r   r<   r   r   r   test_invalid_password   s    

zKdcTests.test_invalid_password)N)r   )__name__
__module____qualname____doc__r   r'   r+   r-   r6   r,   r=   r>   r?   r@   rB   __classcell__r   r   r   r   r   /   s   

r   __main__)sysospathinsertenvironZsamba.tests.krb5.raw_testcaser   Zsamba.tests.krb5.rfc4120_pyasn1ZtestsZkrb5Zrfc4120_pyasn1r(   Z"samba.tests.krb5.rfc4120_constantsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   rC   Zunittestmainr   r   r   r   <module>   s   
8 2