o
    �õ±j  ã                   @   s:   d dl Z d dlmZmZmZmZmZmZ G dd„ dƒZdS )é    N)ÚKRBCREDÚEncKrbCredPartÚKrbCredInfoÚEncryptedDataÚKERB_DMSA_KEY_PACKAGEÚKERB_KEY_LIST_REPc                   @   s²   e Zd Zd$defdd„Z	 edd„ ƒZdd„ Zed	d
„ ƒZdd„ Z	edd„ ƒZ
dd„ Zedd„ ƒZdd„ Zedd„ ƒZed%dd„ƒZd%dd„Zdd„ Zdd„ Zd d!„ Zd"d#„ ZdS )&ÚKirbiNÚkirbiobjc                 C   s   || _ || _d S ©N)r	   Úencpart)Úselfr	   r   © r   úŒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/common/kirbi.pyÚ__init__   s   
zKirbi.__init__c                 C   s<   t | dƒ�}t | ¡ ¡W  d   ƒ S 1 sw   Y  d S )NÚrb)Úopenr   Ú
from_bytesÚread)ÚfpathÚfr   r   r   Ú	from_file   s   $ÿzKirbi.from_filec                 C   s@   t |dƒ�}| | j ¡ ¡ W d   ƒ d S 1 sw   Y  d S )NÚwb)r   Úwriter	   Údump)r   r   r   r   r   r   Úto_file   s   "ÿzKirbi.to_filec                 C   s   t ƒ }t | ¡|_|S r
   )r   r   Úloadr	   )ÚdataÚkr   r   r   r      s   zKirbi.from_bytesc                 C   s
   | j  ¡ S r
   )r	   r   ©r   r   r   r   Úto_bytes%   s   
zKirbi.to_bytesc                 C   ó   t  t | ¡¡S r
   )r   r   Úbase64Ú	b64decode)Úb64r   r   r   Úfrom_b64(   ó   zKirbi.from_b64c                 C   s   t  | j ¡ ¡ ¡ S r
   )r!   Ú	b64encoder	   r   Údecoder   r   r   r   Úto_b64,   ó   zKirbi.to_b64c                 C   r    r
   )r   r   ÚbytesÚfromhex)Úhexdatar   r   r   Úfrom_hex/   r%   zKirbi.from_hexc                 C   s   | j  ¡  ¡ S r
   )r	   r   Úhexr   r   r   r   Úto_hex3   s   zKirbi.to_hexc                 C   sæ   i }|d |d< | d |d< | d |d< |d |d< |d |d< |d |d< |d	 |d	< |d
 |d
< |d |d< |d |d< i }t |ƒg|d< i }d|d< t|ƒ ¡ |d< i }d|d< d|d< t|ƒ|d< | d g|d< tt|ƒ|ƒS )NÚkeyÚcrealmÚprealmÚcnameÚpnameÚflagsÚauthtimeÚ	starttimeÚendtimeú
renew-tillÚsrealmÚsnameúticket-infor   ÚetypeÚcipheré   Úpvnoé   zmsg-typeúenc-partÚticketÚtickets)r   r   r   r   r   r   )Ú
tgt_or_tgsr   ÚciÚtiÚteÚtr   r   r   Úfrom_ticketdata6   s,   zKirbi.from_ticketdataéd   c                    s8   t  | ¡ ¡ ‰ dd ‡ ‡fdd„tdtˆ ƒˆƒD ƒ¡ S )Nz    z
    c                    s   g | ]
}ˆ ||ˆ … ‘qS r   r   )Ú.0Úi©ÚkdÚnr   r   Ú
<listcomp>V   s    z&Kirbi.format_kirbi.<locals>.<listcomp>r   )r!   r&   r'   ÚjoinÚrangeÚlen)r   rP   r   rN   r   Úformat_kirbiS   s   *zKirbi.format_kirbic                 C   s   | j | j ¡ |d�S )N)rP   )rU   r	   r   )r   rP   r   r   r   ÚformatX   r)   zKirbi.formatc                 C   s*  d}| j jd D ]}|d|d  7 }|dd |d d ¡ 7 }q| j jd	 d
 dkr£t | j jd	 d ¡j}|d d }| d¡}|d urLd |d ¡}| d¡}|d urZd |¡}|d| 7 }|d| d¡ 7 }|d| d¡ 7 }|d| d¡ 7 }|d| d¡ 7 }|d| 7 }|d|d d  7 }|dt |d d ¡ ¡  7 }| j	d u�r	|d 7 }d!| j	v �r	| j	d! d u�r	| j	d! D ]H}|d" d#krät
 |d$ ¡}|d%7 }| ¡  d&¡D ]}|d'| 7 }qÚqÀ|d" d(k�rt |d$ ¡}	|d)7 }|	jD ]}
|d*|
d |
d f 7 }qùqÀ|d+7 }||  ¡ 7 }|S ),Nz
rD   zRealm        : %s
ÚrealmzSname        : %s
ú/r;   úname-stringrB   r=   r   r>   r<   r4   r5   z, zUserName     : %s
zUserRealm    : %s
r2   zStartTime    : %s
r7   zEndTime      : %s
r8   zRenewTill    : %s
r9   zFlags        : %s
zKeytype      : %s
r0   ÚkeytypezKey          : %s
ÚkeyvaluezEncryptedPAData:
úencrypted-pa-dataúpadata-typeé«   úpadata-valuez   [171] KeyPackage:
Ú
z
      %s
é¢   z   [162] KeyList:
z      %s: %s
zEncodedKirbi : 

)r	   ÚnativerR   r   r   Úgetr!   r&   r'   r   r   ÚdescribeÚsplitr   rV   )r   rI   rC   ÚcredÚusernamer5   Ú	encpadataÚ
keypackageÚlineÚkeylistr0   r   r   r   rd   [   sP   


ÿ
€zKirbi.describec                 C   s\   | j jd d dkr,t | j jd d ¡j}|d d }| d¡}|d ur,d |d ¡S d S )	NrB   r=   r   r>   r<   r4   rX   rY   )r	   rb   r   r   rc   rR   )r   rf   rg   r   r   r   Úget_username‡   s   
zKirbi.get_usernamec                 C   sˆ   | j d u rg S d| j vs| j d d u rg S g }| j d D ]%}|d dkrAt |d ¡}|d D ]}| |d j|d j ¡ f¡ q/q|S )Nr\   r]   r^   r_   zprevious-keysrZ   r[   )r   r   r   Úappendrb   r.   )r   Úprevkeysrh   ri   Úprevious_keyr   r   r   Údmsa_get_previous_keys�   s   
 €zKirbi.dmsa_get_previous_keysc                 C   s   |   ¡ S r
   )rd   r   r   r   r   Ú__str__�   s   zKirbi.__str__)NN)rK   )Ú__name__Ú
__module__Ú__qualname__r   r   Ústaticmethodr   r   r   r   r$   r(   r-   r/   rJ   rU   rV   rd   rl   rp   rq   r   r   r   r   r      s0    






,	r   )	r!   Ú"minikerberos.protocol.asn1_structsr   r   r   r   r   r   r   r   r   r   r   Ú<module>   s     