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_ticketdatad   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rt| 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rt
|d$ }|d%7 }| d&D ]}|d'| 7 }qq|d" d(krt|d$ }	|d)7 }|	jD ]}
|d*|
d |
d f 7 }qq|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     