
    bk                        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c m	c 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	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)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                   b     e Zd ZdZ fdZddZddZd Zd Zd	 Z	d
 Z
d Zd Zd Zd Z xZS )KdcTestszP Port of the tests in source4/torture/krb5/kdc-heimdal.c
        To python.
    c                     t          t          |                                            t          | _        t
          | _        d S N)superr   setUpglobal_asn1_printdo_asn1_printglobal_hexdump
do_hexdump)self	__class__s    </usr/lib/python3/dist-packages/samba/tests/krb5/kdc_tests.pyr   zKdcTests.setUp4   s2    h##%%%.(    Nc                    |                                 }|                                }|                     t          |g          }|                     t          d|g          }|                     d          }d}	|                     |t          |	          |||d |d d|d d           }
|                     |
          }|S )N)	name_typenameskrbtgti  offsetr   i)padatakdc_optionscnamerealmsname	from_time	till_time
renew_timenonceetypes	addressesadditional_tickets)	get_username	get_realmPrincipalName_creater   r   get_KerberosTimeAS_REQ_createstrsend_recv_transaction)r   credsr/   r&   userr)   r(   r*   tillr'   reqreps               r   as_reqzKdcTests.as_req9   s    !!##!!))"& *   ))!U# * % % $$E$22  -0-=-=',',',+/+/,0'1(.+/48 ! : : ((--
r   r   c                    |                      |d         t          j                              }|D ]}|d         t          k    r
|d         } n|                      |t          j                              }|                     ||d                   }|                     |          \  }}	|                     ||	          }
|                     |
t          j	                              }
| 
                    |t          |
          }
|                     |
t          j                              }
|                     t          |
          }
|
S )Nze-data)asn1Speczpadata-typezpadata-valuer   r$   )
der_decode	krb5_asn1METHOD_DATAr   ETYPE_INFO2PasswordKey_from_etype_info2get_KerberosTimeWithUsecPA_ENC_TS_ENC_create
der_encodePA_ENC_TS_ENCEncryptedData_creater   EncryptedDataPA_DATA_creater   )r   r9   r=   skew
rep_padatapaetype_info2keypatimepausecpa_tss              r   get_enc_timestamp_pa_dataz"KdcTests.get_enc_timestamp_pa_dataV   sE   __M*,, % . .
  	 	B- $666 0 7 oo)"7"9"9 & ; ; //{1~FF888EE))&&99	0G0I0IJJ))#/BEJJ	0G0I0IJJ##$8%@@r   c                 <    |                      |t                     dS )zE Check that the kdc response was pre-authentication required
        N)check_error_repr	   )r   r=   s     r   check_pre_authenicationz KdcTests.check_pre_authenicationp   s!     	S":;;;;;r   c                    |                      |           |                     |d         t                     t          |d                   }|                     d|           t          |d         d                   }|                     d|           d|d         v r6t          |d         d                   }|                     d|d	z             d
S 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   ticketztkt-vnokvnoenc-partr   l      N)assertIsNotNoneassertEqualr   int)r   r=   r[   tkt_vnor^   s        r   check_as_replyzKdcTests.check_as_replyu   s     	S!!!Z*555 3v;D!!! c(mI.//G$$$
 S_$$s:v.//DQz 122222 %$r   c                     |                      |           |                     |d         t                     |                     |d         |           dS )zg Check that the reply is an error message, with the expected
            error-code specified.
        rZ   z
error-codeN)r`   ra   r   )r   r=   expecteds      r   rW   zKdcTests.check_error_rep   sS     	S!!!Z)444\*H55555r   c                 n   |                                  }t          f}|                     ||          }|                     |           |                     ||          }|                     |||g          }|                     |           |d         d         }|                     t          |           d S Nr&   r_   etype)get_user_credsr   r>   rX   rU   rd   assertEqualsr   r9   rj   r=   r&   s        r   test_aes256_cts_hmac_sha1_96z%KdcTests.test_aes256_cts_hmac_sha1_96   s    ##%%(*kk%''$$S)))//s;;kk%xk88C   J(1599999r   c                 n   |                                  }t          f}|                     ||          }|                     |           |                     ||          }|                     |||g          }|                     |           |d         d         }|                     t          |           d S rh   )rk   r   r>   rX   rU   rd   rl   rm   s        r   test_arc4_hmac_md5zKdcTests.test_arc4_hmac_md5   s    ##%%!#kk%''$$S)))//s;;kk%xk88C   J(*E22222r   c                 z   |                                  }t          t          f}|                     ||          }|                     |           |                     ||          }|                     |||g          }|                     |           |d         d         }|                     t          |           d S rh   )rk   r   r   r>   rX   rU   rd   rl   rm   s        r   test_aes_rc4zKdcTests.test_aes_rc4   s    ##%%(*:;kk%''$$S)))//s;;kk%xk88C   J(1599999r   c                 8   |                                  }t          t          f}|                     ||          }|                     |           |                     ||d          }|                     |||g          }|                     |t                     d S )Ni  )rM   ri   )rk   r   r   r>   rX   rU   rW   r
   rm   s        r   test_clock_skewzKdcTests.test_clock_skew   s    ##%%(*:;kk%''$$S)))//s/FFkk%xk88S,/////r   c                 z   |                      |                                           }|                    d           t          f}|                     ||          }|                     |           |                     ||          }|                     |||g          }|                     |t                     d S )N)templatezNot the correct passwordri   )	insta_credsrk   set_passwordr   r>   rX   rU   rW   r   rm   s        r   test_invalid_passwordzKdcTests.test_invalid_password   s      $*=*=*?*? @@5666(*kk%''$$S)))//s;;kk%xk88S"899999r   r   )r   )__name__
__module____qualname____doc__r   r>   rU   rX   rd   rW   rn   rp   rr   rt   ry   __classcell__)r   s   @r   r   r   /   s         ) ) ) ) )
   :   4< < <
3 3 3<6 6 6: : :3 3 3: : :
0 
0 
0: : : : : : :r   r   __main__)sysospathinsertenvironsamba.tests.krb5.raw_testcaser   samba.tests.krb5.rfc4120_pyasn1testskrb5rfc4120_pyasn1rB   "samba.tests.krb5.rfc4120_constantsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   rz   unittestmain r   r   <module>r      sx  ( 


 				 <      !$
  9 9 9 9 9 9 3 3 3 3 3 3 3 3 3 3 3 3                             n: n: n: n: n: n: n: n:b zNOOOHMOOOOO	 r   