a
     {a,                     @   s&  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	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mZmZmZmZmZmZmZ d dlm   m!  m"Z# d dl$m   m!  m%Z% ej&'d d dej(d< d	Z)d	Z*G d
d de
Z+e,dkr"d	Z)d	Z*d dl-Z-e-.  dS )    N)security)Krb5EncryptionKey)KDCBaseTest)AD_FX_FAST_ARMORAD_FX_FAST_USEDAES256_CTS_HMAC_SHA1_96ARCFOUR_HMAC_MD5FX_FAST_ARMOR_AP_REQUESTKDC_ERR_ETYPE_NOSUPPKDC_ERR_GENERICKDC_ERR_S_PRINCIPAL_UNKNOWNKDC_ERR_NOT_USKDC_ERR_PREAUTH_FAILEDKDC_ERR_PREAUTH_REQUIRED%KDC_ERR_UNKNOWN_CRITICAL_FAST_OPTIONS
KRB_AS_REPKRB_TGS_REPNT_PRINCIPAL
NT_SRV_HSTNT_SRV_INSTPADATA_FX_COOKIEPADATA_FX_FASTz
bin/python1ZPYTHONUNBUFFEREDFc                       sx  e Zd Ze fddZ f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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d'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0d[d\ Z1d]d^ Z2d_d` Z3dadb Z4dcdd Z5dedf Z6dgdh Z7didj Z8dkdl Z9dmdn Z:dodp Z;dqdr Z<dsdt Z=dudv Z>dwdx Z?ddzd{Z@d|d} ZAd~d ZBdd ZCdddZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZN  ZOS )
FAST_Testsc                    s&   t    d | _d | _d | _d | _d S N)super
setUpClassuser_tgtuser_service_ticketmach_tgtmach_service_ticket)cls	__class__ =/usr/lib/python3/dist-packages/samba/tests/krb5/fast_tests.pyr   >   s
    
zFAST_Tests.setUpClassc                    s   t    t| _t| _d S r   )r   setUpglobal_asn1_printZdo_asn1_printglobal_hexdumpZ
do_hexdumpselfr"   r$   r%   r&   H   s    
zFAST_Tests.setUpc                 C   s&   |  ttddtdd| jdg d S )NF)rep_typeexpected_error_modeuse_fastr   )r+   r,   r-   gen_padata_fn)_run_test_sequencer   r   generate_enc_timestamp_padatar)   r$   r$   r%   test_simpleM   s    zFAST_Tests.test_simplec                 C   s   |  tdd| jdg d S Nr   Fr+   r,   r-   
gen_tgt_fnr/   r   get_user_tgtr)   r$   r$   r%   test_simple_tgs\   s    zFAST_Tests.test_simple_tgsc              	   C   s*   |   }| tttfdd |ddg d S )NF)r+   r,   r-   snameexpected_snameexpect_edata)get_krbtgt_snamer/   r   r   r   r*   r9   r$   r$   r%   test_simple_no_snamef   s    zFAST_Tests.test_simple_no_snamec              
   C   s.   |   }| tttfd| jd |ddg d S )NF)r+   r,   r-   r4   r8   r9   r:   r;   r/   r   r   r   r6   r<   r$   r$   r%   test_simple_tgs_no_snamet   s    z#FAST_Tests.test_simple_tgs_no_snamec              
   C   s*   |   }| ttdt| jd |dg d S )NT)r+   r,   r-   
fast_armorgen_armor_tgt_fnr8   r9   )r;   r/   r   r   r	   get_mach_tgtr<   r$   r$   r%   test_fast_no_sname   s    zFAST_Tests.test_fast_no_snamec              
   C   s.   |   }| tttfd| jd d |dg d S )NT)r+   r,   r-   r4   r@   r8   r9   r>   r<   r$   r$   r%   test_fast_tgs_no_sname   s    z!FAST_Tests.test_fast_tgs_no_snamec                 C   s   |  tdd| jdg d S r2   )r/   r   rB   r)   r$   r$   r%   test_simple_tgs_wrong_principal   s    z*FAST_Tests.test_simple_tgs_wrong_principalc                 C   s   |  ttd| jddg d S NF)r+   r,   r-   r4   r:   r/   r   r   get_user_service_ticketr)   r$   r$   r%   test_simple_tgs_service_ticket   s    z)FAST_Tests.test_simple_tgs_service_ticketc                 C   s   |  ttd| jddg d S rF   r/   r   r   get_mach_service_ticketr)   r$   r$   r%   #test_simple_tgs_service_ticket_mach   s    z.FAST_Tests.test_simple_tgs_service_ticket_machc                 C   s6   |  ttdt| jddtdd| jt| jddg d S )NT0)r+   r,   r-   r@   rA   pac_optionsr   )r+   r,   r-   r.   r@   rA   rN   r/   r   r   r	   rB   generate_enc_challenge_padatar)   r$   r$   r%   test_fast_no_claims   s"    	zFAST_Tests.test_fast_no_claimsc              	   C   s    |  tdd| jd ddg d S )Nr   TrM   )r+   r,   r-   r4   r@   rN   r5   r)   r$   r$   r%   test_fast_tgs_no_claims   s    z"FAST_Tests.test_fast_tgs_no_claimsc                 C   s:   |  ttdt| jdddtdd| jt| jdddg d S )NTrM   )r+   r,   r-   r@   rA   rN   kdc_optionsr   )r+   r,   r-   r.   r@   rA   rN   rS   rO   r)   r$   r$   r%   test_fast_no_claims_or_canon   s&    
z'FAST_Tests.test_fast_no_claims_or_canonc              
   C   s"   |  tdd| jd dddg d S )Nr   TrM   )r+   r,   r-   r4   r@   rN   rS   r5   r)   r$   r$   r%    test_fast_tgs_no_claims_or_canon   s    z+FAST_Tests.test_fast_tgs_no_claims_or_canonc                 C   s6   |  ttdt| jddtdd| jt| jddg d S )NTrM   )r+   r,   r-   r@   rA   rS   r   )r+   r,   r-   r.   r@   rA   rS   rO   r)   r$   r$   r%   test_fast_no_canon  s"    	zFAST_Tests.test_fast_no_canonc              	   C   s    |  tdd| jd ddg d S )Nr   TrM   )r+   r,   r-   r4   r@   rS   r5   r)   r$   r$   r%   test_fast_tgs_no_canon  s    z!FAST_Tests.test_fast_tgs_no_canonc              	   C   s    |  ttd| jdddg d S )NFr$   )r+   r,   r-   r4   etypesr:   r/   r   r
   rB   r)   r$   r$   r%   test_simple_tgs_no_etypes'  s    z$FAST_Tests.test_simple_tgs_no_etypesc              	   C   s    |  ttd| jd ddg d S )NTr$   )r+   r,   r-   r4   r@   rX   rY   r)   r$   r$   r%   test_fast_tgs_no_etypes3  s    z"FAST_Tests.test_fast_tgs_no_etypesc                 C   s   |  ttdddg d S )NFr$   )r+   r,   r-   rX   )r/   r   r
   r)   r$   r$   r%   test_simple_no_etypes?  s    z FAST_Tests.test_simple_no_etypesc              	   C   s    |  ttdt| jddg d S )NTr$   )r+   r,   r-   r@   rA   rX   )r/   r   r
   r	   rB   r)   r$   r$   r%   test_simple_fast_no_etypesI  s    z%FAST_Tests.test_simple_fast_no_etypesc              
   C   s$   |  ttd| jd | jddg d S )NTF)r+   r,   r-   gen_fast_fnr@   rA   r:   )r/   r   r   generate_empty_fastrB   r)   r$   r$   r%   test_empty_fastU  s    zFAST_Tests.test_empty_fastc              	   C   s    |  ttddt| jdg d S )NTZ001)r+   r,   r-   fast_optionsr@   rA   )r/   r   r   r	   rB   r)   r$   r$   r%   !test_fast_unknown_critical_optiond  s    z,FAST_Tests.test_fast_unknown_critical_optionc              	   C   s    |  ttdd | jddg d S )NTF)r+   r,   r-   r@   rA   r:   )r/   r   r   rB   r)   r$   r$   r%   test_unarmored_as_reqp  s    z FAST_Tests.test_unarmored_as_reqc                 C   s   |  ttdd| jdg d S )NTr   r+   r,   r-   r@   rA   r/   r   r   rB   r)   r$   r$   r%   test_fast_invalid_armor_type|  s    z'FAST_Tests.test_fast_invalid_armor_typec                 C   s   |  ttdd| jdg d S )NT   rd   re   r)   r$   r$   r%   test_fast_invalid_armor_type2  s    z(FAST_Tests.test_fast_invalid_armor_type2c              
   C   s2   |  ttdt| jdtdd| jt| jdg d S NTrd   r   r+   r,   r-   r.   r@   rA   rO   r)   r$   r$   r%   test_fast_encrypted_challenge  s    z(FAST_Tests.test_fast_encrypted_challengec              
   C   s2   |  ttdt| jdttd| jt| jdg d S NTrd   rj   )r/   r   r   r	   rB   r   'generate_enc_challenge_padata_wrong_keyr)   r$   r$   r%   'test_fast_encrypted_challenge_wrong_key  s    z2FAST_Tests.test_fast_encrypted_challenge_wrong_keyc              
   C   s2   |  ttdt| jdttd| jt| jdg d S rl   )r/   r   r   r	   rB   r   +generate_enc_challenge_padata_wrong_key_kdcr)   r$   r$   r%   +test_fast_encrypted_challenge_wrong_key_kdc  s    z6FAST_Tests.test_fast_encrypted_challenge_wrong_key_kdcc              
   C   s<   |  ttdt| jdtddtj| jddt| jdg d S )NTrd   r   i'  skewrj   )r/   r   r   r	   rB   	functoolspartialrP   r)   r$   r$   r%   (test_fast_encrypted_challenge_clock_skew  s$    z3FAST_Tests.test_fast_encrypted_challenge_clock_skewc              
   C   s2   |  ttdt| jdtdd| jt| jdg d S ri   )r/   r   r   r	   rH   rP   r)   r$   r$   r%   test_fast_invalid_tgt  s    z FAST_Tests.test_fast_invalid_tgtc              
   C   s2   |  ttdt| jdtdd| jt| jdg d S ri   )r/   r   r   r	   rK   rP   r)   r$   r$   r%   test_fast_invalid_tgt_mach  s    z%FAST_Tests.test_fast_invalid_tgt_machc              
   C   s2   |  ttdt| jdttd| jt| jdg d S rl   )r/   r   r   r	   rB   r0   r)   r$   r$   r%   test_fast_enc_timestamp  s    z"FAST_Tests.test_fast_enc_timestampc              
   C   s2   |  ttdt| jdtdd| jt| jdg d S ri   rO   r)   r$   r$   r%   	test_fast'  s    zFAST_Tests.test_fastc                 C   s   |  tdd| jd dg d S )Nr   Tr+   r,   r-   r4   r@   r5   r)   r$   r$   r%   test_fast_tgs:  s    zFAST_Tests.test_fast_tgsc              	   C   s"   |  tdd| j| jtdg d S )Nr   T)r+   r,   r-   r4   rA   r@   )r/   r   r6   rB   r	   r)   r$   r$   r%   test_fast_tgs_armorE  s    zFAST_Tests.test_fast_tgs_armorc                 C   s>   |  ttdt| jddidtdd| jt| jddidg d S )NTrealmTESTr+   r,   r-   r@   rA   	outer_reqr   r+   r,   r-   r.   r@   rA   r   rO   r)   r$   r$   r%   test_fast_outer_wrong_realmQ  s&    z&FAST_Tests.test_fast_outer_wrong_realmc              	   C   s$   |  tdd| jd ddidg d S )Nr   Tr}   r~   r+   r,   r-   r4   r@   r   r5   r)   r$   r$   r%   test_fast_tgs_outer_wrong_realmj  s    z*FAST_Tests.test_fast_tgs_outer_wrong_realmc                 C   s>   |  ttdt| jddidtdd| jt| jddidg d S )NTnonce123r   r   r   rO   r)   r$   r$   r%   test_fast_outer_wrong_noncex  s&    z&FAST_Tests.test_fast_outer_wrong_noncec              	   C   s$   |  tdd| jd ddidg d S )Nr   Tr   r   r   r5   r)   r$   r$   r%   test_fast_tgs_outer_wrong_nonce  s    z*FAST_Tests.test_fast_tgs_outer_wrong_noncec                 C   s>   |  ttdt| jddidtdd| jt| jddidg d S )NTkdc-options11111111111111111r   r   r   rO   r)   r$   r$   r%   test_fast_outer_wrong_flags  s&    z&FAST_Tests.test_fast_outer_wrong_flagsc              	   C   s$   |  tdd| jd ddidg d S )Nr   Tr   r   r   r5   r)   r$   r$   r%   test_fast_tgs_outer_wrong_flags  s    z*FAST_Tests.test_fast_tgs_outer_wrong_flagsc                 C   s>   |  ttdt| jdd idtdd| jt| jdd idg d S )NTr8   r   r   r   rO   r)   r$   r$   r%   test_fast_outer_no_sname  s&    z#FAST_Tests.test_fast_outer_no_snamec              	   C   s$   |  tdd| jd dd idg d S )Nr   Tr8   r   r5   r)   r$   r$   r%   test_fast_tgs_outer_no_sname  s    z'FAST_Tests.test_fast_tgs_outer_no_snamec                 C   s>   |  ttdt| jddidtdd| jt| jddidg d S )NTtill15000101000000Zr   r   r   rO   r)   r$   r$   r%   test_fast_outer_wrong_till  s&    z%FAST_Tests.test_fast_outer_wrong_tillc              	   C   s$   |  tdd| jd ddidg d S )Nr   Tr   r   r   r5   r)   r$   r$   r%   test_fast_tgs_outer_wrong_till  s    z)FAST_Tests.test_fast_tgs_outer_wrong_tillc              	   C   s"   |  tdd| j| jd dg d S )Nr   T)r+   r,   r-   gen_authdata_fnr4   r@   )r/   r   generate_fast_used_auth_datar6   r)   r$   r$   r%   test_fast_authdata_fast_used  s    z'FAST_Tests.test_fast_authdata_fast_usedc              
   C   s0   |  tdd| jdttd| j| jddg d S )Nr   Fr3   )r+   r,   r-   r   r4   r:   )r/   r   r6   r   r   r)   r$   r$   r%    test_fast_authdata_fast_not_used   s    z+FAST_Tests.test_fast_authdata_fast_not_usedc                 C   s>   |   }| tdd| jd dttd| j| jd |ddg d S )Nr   Trz   F)r+   r,   r-   r   r4   r@   r9   r:   )r;   r/   r   r6   r   generate_fast_armor_auth_datar<   r$   r$   r%   test_fast_ad_fx_fast_armor9  s$    	z%FAST_Tests.test_fast_ad_fx_fast_armorc                 C   s6   |  ttdt| jdtdd| j| jt| jdg d S )NTrd   r   )r+   r,   r-   r.   r   r@   rA   )r/   r   r   r	   rB   rP   r   r)   r$   r$   r%   test_fast_ad_fx_fast_armor2U  s     z&FAST_Tests.test_fast_ad_fx_fast_armor2c                 C   s:   |   }| tdd| jd dttd| jd |ddg d S )Nr   Trz   F)r+   r,   r-   r4   r@   r9   r:   )r;   r/   r   r6   r   gen_tgt_fast_armor_auth_datar<   r$   r$   r%   !test_fast_ad_fx_fast_armor_ticketl  s"    
z,FAST_Tests.test_fast_ad_fx_fast_armor_ticketc              
   C   s2   |  ttdt| jdtdd| jt| jdg d S ri   )r/   r   r   r	   rB   rP   r   r)   r$   r$   r%   "test_fast_ad_fx_fast_armor_ticket2  s    z-FAST_Tests.test_fast_ad_fx_fast_armor_ticket2c                 C   s   |  ttd| jd dg d S NTrz   rG   r)   r$   r$   r%   test_fast_tgs_service_ticket  s    z'FAST_Tests.test_fast_tgs_service_ticketc                 C   s   |  ttd| jd dg d S r   rJ   r)   r$   r$   r%   !test_fast_tgs_service_ticket_mach  s    z,FAST_Tests.test_fast_tgs_service_ticket_machc                 C   s   |  tdd| jddg d S )Nr   F)r+   r,   r-   r4   include_subkeyr5   r)   r$   r$   r%   test_simple_tgs_no_subkey  s    z$FAST_Tests.test_simple_tgs_no_subkeyc                 C   s,   |   }| ttd| jd d|ddg d S )NTF)r+   r,   r-   r4   r@   r   r9   r:   )r;   r/   r   r   r6   r<   r$   r$   r%   test_fast_tgs_no_subkey  s    z"FAST_Tests.test_fast_tgs_no_subkeyc                 C   s:   |  ttdt| jdddtdd| jt| jdddg d S )NT01)r+   r,   r-   r@   rA   ra   expected_anonr   )r+   r,   r-   r.   r@   rA   ra   r   rO   r)   r$   r$   r%   test_fast_hide_client_names  s&    
z&FAST_Tests.test_fast_hide_client_namesc              
   C   s"   |  tdd| jd dddg d S )Nr   Tr   )r+   r,   r-   r4   r@   ra   r   r5   r)   r$   r$   r%   test_fast_tgs_hide_client_names  s    z*FAST_Tests.test_fast_tgs_hide_client_namesc                 C   s4   |  ttdt| jdtdd| jt| jddg d S )NTrd   r   rg   )r+   r,   r-   r.   r@   rA   repeat)r/   r   r   r	   rB   $generate_enc_challenge_padata_replayr)   r$   r$   r%   $test_fast_encrypted_challenge_replay  s     z/FAST_Tests.test_fast_encrypted_challenge_replayc                 C   s   |d }|  |}|g|fS Npreauth_key)Z"get_enc_timestamp_pa_data_from_keyr*   kdc_exchange_dictcallback_dictreq_bodykeypadatar$   r$   r%   r0     s    
z(FAST_Tests.generate_enc_timestamp_padatar   c           	      C   s4   |d }|d }|  ||}| j||d}|g|fS )N	armor_keyr   rq   )generate_client_challenge_keyget_challenge_pa_data)	r*   r   r   r   rr   r   r   client_challenge_keyr   r$   r$   r%   rP     s    
z(FAST_Tests.generate_enc_challenge_padatac                 C   s0   |d }|d }|  ||}| |}|g|fS )Nr   r   )Zgenerate_kdc_challenge_keyr   )r*   r   r   r   r   r   Zkdc_challenge_keyr   r$   r$   r%   ro   $  s    

z6FAST_Tests.generate_enc_challenge_padata_wrong_key_kdcc                 C   s   |d }|  |}|g|fS r   )r   r   r$   r$   r%   rm   0  s    
z2FAST_Tests.generate_enc_challenge_padata_wrong_keyc                 C   sJ   | d}|d u r@|d }|d }| ||}| |}||d< |g|fS )NZreplay_padatar   r   )getr   r   )r*   r   r   r   r   r   r   r   r$   r$   r%   r   9  s    


z/FAST_Tests.generate_enc_challenge_padata_replay c           	      C   s   |  td}|S N    )PA_DATA_creater   )	r*   _kdc_exchange_dict_callback_dictZ	_req_bodyZ_fast_padataZ_fast_armorZ	_checksumZ_fast_optionsZfast_padatar$   r$   r%   r_   J  s    zFAST_Tests.generate_empty_fastc           G   $   C   s  | j r|   ttd}|  }|  }|  }| }|	 }| j
t|gd}| }	|	 }
| j
t|	|
gd}| |}|j}| d d }|	 }d}| j
t||gd}| |}|j}d }d }|D ]}|d}| |ttf |d}|dkr
d}nt|tjjs |f}|D ]}| |td	 q$|d
}| t|t |r| d| |d}|d ur| d| nt|vr| d| |dd }|d ur| }nd }|dd}nd }d }| d| d }|tkr|d}| } n| d| d } t|dkr.| j}!d }"n
d }!| j }"|dt!t"f}#|tkrV|nd }$|}%d|v rt|d}&n|tkr|}&n|}&|tkr|
}'n|}'|tkr| j#}(n|}(|dd })|)d ur| $| |d|(}*|dd}+|d|},|d|&}-|d|'}.|% }/| &t'j(j)}0|tkrR|rH| *|0|j+}1|0}2nd }1|0}2nX|d ur| &t'j(j)}2| *|2|j+}3t',|3j-|0j-dd}1t.|1d }1n| *|0| j+}1|0}2|ddsd }0|r|dd }4|4d u rt/j0| j1|d}4nd }4|d ur| j2nd }5dd  }6|d!d"}7|d#|}8|d$d }9|tkrd|9d urd| 3| | 4||d |5 }:nd }:|r|9};|d urt/j0|6|gd%nd }<nd };|9}<|d&d }=|=d ur|= g}>nd }>|s| d'| | d(| |d'd }?|d(d }@|d)d }A|Ad urt6|A}A|d*d }B|Bd ur4t6|B}B|tkr| j7|,|*|+|.|-||A|B||4|5|;||<|!|"| j8i ||#|/|0|:|>|1||2|8|?|@d|7|)d+!}CnL| j9|,|*|+|.|-||A|B||4|5|;||<|!|"| j8|i | |1||2|0|>d |8|?|@d |7|)d, }C|d-d.}Dt|DD ]}E| j:|C|$|%|&|#d/}Ft|dkr*| ;|F| d }d }nB| <|F| d0|Cv rP| =|Cd0 }nd }t>|v rh|Cd1 }nd }q| ?i | qd S )2Nz/forwardable,renewable,canonicalize,renewable-ok)Z	name_typenamesZhostr+   r,   r   r$      r-   r@   rA   ra   r   r4   rX   r8   r:   expected_cnamer   Fexpected_crealmr9   expected_srealms   explicitarmors   tgsarmorr   Tr^   )ra   c                 S   s   t ||fS r   )list)r   r   r   r   r$   r$   r%   _generate_padata_copy  s    z<FAST_Tests._run_test_sequence.<locals>._generate_padata_copyrN   r   rS   r.   )r   r   	inner_reqr   expected_flagsunexpected_flags)!r   r   r   r   r9   expected_supported_etypesr   r   ticket_decryption_keygenerate_fast_fngenerate_fast_armor_fngenerate_fast_padata_fnfast_armor_typegenerate_padata_fncheck_error_fncheck_rep_fncheck_kdc_private_fnr   r,   Zclient_as_etypesexpected_saltauthenticator_subkeyr   	auth_datar   	armor_tgtarmor_subkeyrS   r   r   pac_requestrN   r:   ) r   r   r   r   r9   r   r   r   r   r   r   r   r   r   r   r   r   r,   r   tgtr   r   r   r   r   Zbody_checksum_typerS   r   r   r   rN   r:   r      )cnamer}   r8   rX   fast_cookiepreauth_etype_info2)@strict_checkingcheck_kdc_fast_supportstr	krb5_asn1Z
KDCOptionsget_client_credsget_service_credsZget_krbtgt_credsZget_usernameZ	get_realmZPrincipalName_creater   r   ZTicketDecryptionKey_from_credsZtgs_supported_enctypesr   popZassertInr   r   
isinstancecollectionsabc	ContainerrangeZassertIstypeboolr   ZassertNotInlenZgeneric_check_kdc_errorZgeneric_check_kdc_repr   r   r   
assertTrueZget_saltZ	RandomKeykcryptoZEnctypeZAES256Zgenerate_armor_keyZsession_keyZcf2r   r   rs   rt   Zgenerate_simple_fastZgenerate_ap_reqassertIsNotNoneZPasswordKey_from_etype_info2Zget_kvnoZTicketFlagsZas_exchange_dictZgeneric_check_kdc_privateZtgs_exchange_dictZ_generic_kdc_exchangeZcheck_replyZcheck_error_repcreate_fast_cookier   ZassertEqual)Gr*   Ztest_sequenceZkdc_options_defaultZclient_credsZtarget_credsZkrbtgt_credsZclient_usernameZclient_realmZclient_cnameZkrbtgt_usernameZkrbtgt_realmZkrbtgt_snameZkrbtgt_decryption_keykrbtgt_etypesZtarget_usernameZtarget_realmZtarget_serviceZtarget_snameZtarget_decryption_keyZtarget_etypesr   r   Zkdc_dictr+   r,   errorr-   r   rA   r   ra   r4   r   r   r   rX   r   Zcrealmr8   ZsrealmZ	tgt_cnamer:   r   r   r   r9   r   r   r   r   r   Zexplicit_armor_keyr   r   r   rN   rS   r.   r   r   r   r   r   r   r   r   r   r   r   _Zrepr$   r$   r%   r/   V  s   





























#"

zFAST_Tests._run_test_sequencec                 C   s   |  td}|S r   )AuthorizationData_creater   r*   r   r$   r$   r%   r     s    z(FAST_Tests.generate_fast_armor_auth_datac                 C   s   |  td}|S r   )r   r   r   r$   r$   r%   r     s    z'FAST_Tests.generate_fast_used_auth_datac                    s4   |   }|    fdd}|  }| j|||dS )Nc                    s   | d    | S )Nzauthorization-data)append)Zenc_partr   r$   r%   	modify_fn  s    z:FAST_Tests.gen_tgt_fast_armor_auth_data.<locals>.modify_fn)r   checksum_keys)r6   r   Zget_krbtgt_checksum_keyZmodified_ticket)r*   r   r   r   r$   r   r%   r     s    z'FAST_Tests.gen_tgt_fast_armor_auth_datac                 C   s,   |  | | jr | dt| | t|S )Nr   )r   r   ZassertNotEqualr   r   r   )r*   Zcookier$   r$   r%   r     s    
zFAST_Tests.create_fast_cookiec                 C   s~   |   }tj}d| |f }|jd| tjdgd}t|d d d }| tj	|@  | tj
|@  | tj|@  d S )Nz%s-%dz<SID=%s>zmsDS-SupportedEncryptionTypes)baseZscopeattrsr   )Z	get_samdbr   ZDOMAIN_RID_KRBTGTZget_domain_sidsearchldbZ
SCOPE_BASEintr   ZKERB_ENCTYPE_FAST_SUPPORTEDZ(KERB_ENCTYPE_COMPOUND_IDENTITY_SUPPORTEDZKERB_ENCTYPE_CLAIMS_SUPPORTED)r*   ZsamdbZ
krbtgt_ridZ
krbtgt_sidresr   r$   r$   r%   r     s"    
z!FAST_Tests.check_kdc_fast_supportc                 C   s(   | j d u r"|  }| |t| _ | j S r   )r   Zget_mach_credsget_tgtr   )r*   Z
mach_credsr$   r$   r%   rB     s    
zFAST_Tests.get_mach_tgtc                 C   s(   | j d u r"|  }| |t| _ | j S r   )r   r   r   r   )r*   Z
user_credsr$   r$   r%   r6     s    
zFAST_Tests.get_user_tgtc                 C   s2   | j d u r,|  }|  }| ||t| _ | j S r   )r   r6   r   get_service_ticketr   )r*   r   service_credsr$   r$   r%   rH     s    

z"FAST_Tests.get_user_service_ticketc                 C   s2   | j d u r,|  }|  }| ||t| _ | j S r   )r    rB   r   r   r   )r*   r   r  r$   r$   r%   rK     s    

z"FAST_Tests.get_mach_service_ticket)r   )r   )P__name__
__module____qualname__classmethodr   r&   r1   r7   r=   r?   rC   rD   rE   rI   rL   rQ   rR   rT   rU   rV   rW   rZ   r[   r\   r]   r`   rb   rc   rf   rh   rk   rn   rp   ru   rv   rw   rx   ry   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   rP   ro   rm   r   r_   r/   r   r   r   r   r   rB   r6   rH   rK   __classcell__r$   r$   r"   r%   r   =   s   	


 
	 
  A	r   __main__)/rs   ossysr   r   Zsamba.dcerpcr   Zsamba.tests.krb5.raw_testcaser   Zsamba.tests.krb5.kdc_base_testr   Z"samba.tests.krb5.rfc4120_constantsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsamba.tests.krb5.rfc4120_pyasn1ZtestsZkrb5Zrfc4120_pyasn1r   Zsamba.tests.krb5.kcryptor   pathinsertenvironr'   r(   r   r  Zunittestmainr$   r$   r$   r%   <module>   s>   T
           ;
