o
    j                  
   @   sj   d dl Z d dlZd dlmZmZ G dd dejZddddd	d
dddd	ZG dd dZG dd dZ	dS )    N)EncKrbPrivPartKRB_PRIVc                   @   s$   e Zd ZdZdZdZdZdZdZdS )KRB5PasswordPolicyFlags                   N)	__name__
__module____qualname__ComplexNoAnonChangeNoClearChangeLockoutAdminsStoreCleartextRefusePasswordChange r   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/protocol/rfc3244.pyr      s    r   OkzBad requestzServer errorzClient not foundRejectedzAccess deniedzProtocol version mismatchzProtocol errorUnknown error)	r   r   r      r            i  c                   @   s\   e Zd ZddededefddZdd Zed	d
 Zedej	fddZ
dd Zdd ZdS )KRB5ChangePasswordNappriverrc                 C   s   || _ || _|| _d| _d S )Ns   )r   r   r    version)selfr   r   r    r   r   r   __init__   s   
zKRB5ChangePassword.__init__c                 C   s`   dt | j t | j }|jdddd}|| j7 }|t | jjdddd7 }|| j| j 7 }|S )Nr   r   bigF	byteordersigned)lenr   r   to_bytesr!   )r"   message_lengthmessager   r   r   r)   "   s   
zKRB5ChangePassword.to_bytesc                 C   s   t t| S N)r   from_bufferioBytesIO)datar   r   r   
from_bytes*   s   zKRB5ChangePassword.from_bytesbuffc                 C   s\   t j| dddd}| d}t j| dddd}| |}| || d }t||S )Nr   r$   Fr%   r   )intr1   readr   )r2   r*   r!   ap_lenr   r   r   r   r   r-   .   s   


zKRB5ChangePassword.from_bufferc                 C   s4   t | jj}||d|d d }t|j}|S )N   zenc-partcipher)r   loadr   nativedecryptr   )r"   subkey_ciphersubkeyprivrepprivdataprivdecr   r   r   decrypt_priv7   s   zKRB5ChangePassword.decrypt_privc                 C   s   |  ||}t|d S )Nz	user-data)r@   KRB5CHPWReplyr1   )r"   r;   r<   privresponser   r   r   parse_reply=   s   zKRB5ChangePassword.parse_replyr,   )r   r   r   bytesr#   r)   staticmethodr1   r.   r/   r-   r@   rC   r   r   r   r   r      s    
r   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )rA   c                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S r,   )result_coderesult_messagepw_min_length
pw_history
pw_max_age
pw_min_agepw_flags)r"   r   r   r   r#   D   s   
zKRB5CHPWReply.__init__c                 C   s   d}t  }ztj| d d ddd|_W n   tj| d d ddd|_Y t| dkr.|S tj| dd ddd|_tj| dd ddd|_tj| d	d
 ddd| |_tj| d
d ddd| |_t	tj| dd	 ddd|_
|S )Nl    @T$r   r$   Fr%   r   r      r	      r
   )rA   r3   r1   rF   r(   rH   rI   rJ   rK   r   rL   )r0   ticksresr   r   r   r1   O   s   zKRB5CHPWReply.from_bytesc                 C   sx   d}|d| j t| j df 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d	| j 7 }|S )
Nz=== KRB5CHPWReply ===
zResult code: %s %s 
r   zResult message: %s
zPassword minimum length: %s
zPassword history: %s
zPassword maximum age: %s
zPassword minimum age: %s
zPassword flags: %s
)	rF   KRB5CHPWResultCodegetrG   rH   rI   rJ   rK   rL   )r"   tr   r   r   __str__b   s   zKRB5CHPWReply.__str__N)r   r   r   r#   rE   r1   rT   r   r   r   r   rA   C   s
    
rA   )
r.   enum"minikerberos.protocol.asn1_structsr   r   IntFlagr   rQ   r   rA   r   r   r   r   <module>   s    	(