o
    j                     @   sT   d dl mZ d dlZd dlZg dZd dlZd dlZG dd dZG dd dZdS )    )
AVPAIRTypeN)

domainnamecomputernamednsforestnamednscomputernamednsdomainname
local_timeos_major_versionos_minor_versionos_buildos_guessc                   @   sT   e Zd Zdd Zedd Zedd Zdd Zd	d
 Zedd Z	edd Z
dS )FILETIMEc                 C   s   d | _ d | _d | _d S N)dwLowDateTimedwHighDateTimedatetimeself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/ntlm/structures/serverinfo.py__init__   s   
zFILETIME.__init__c                 C   s   t t| S r   )r   from_bufferioBytesIO)datar   r   r   
from_bytes   s   zFILETIME.from_bytesc                 C   sB   t  }t|  }|d d }|d@ |_|d? d@ |_|  |S )N逖      }*{G        )r   int	timestampr   r   calc_dt)dttunix_timestampfiletime_valuer   r   r   from_datetime   s   
zFILETIME.from_datetimec                 C   s8   | j d u s
| jd u rtd| j dd| jdd S )Nz0FILETIME values cannot be None for serialization   little)r   r   
ValueErrorto_bytesr   r   r   r   r+   $   s   zFILETIME.to_bytesc                 C   sv   | j dkr| jdkrtddddd| _d S | j d> | j }|dkr.tddddd| _d S tj|d d | _d S )	Nr   i     r   r   i  r   r   )r   r   r   utcfromtimestamp)r   ftr   r   r   r"   )   s   zFILETIME.calc_dtc                 C   s&   t  }| d |_| d |_|  |S )Nr   r   )r   r   r   r"   )dr$   r   r   r   	from_dict3   s
   

zFILETIME.from_dictc                 C   sB   t  }tj| dddd|_tj| dddd|_|  |S )Nr(   r)   F)	byteordersigned)r   r    r   readr   r   r"   )buffr$   r   r   r   r   ;   s
   zFILETIME.from_bufferN)__name__
__module____qualname__r   staticmethodr   r'   r+   r"   r0   r   r   r   r   r   r      s    



r   c                   @   sJ   e Zd Zdd Zedd Zdd Zddd	Zd
d Zdd Z	dd Z
dS )NTLMServerInfoc                 C   sF   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d S r   )r   r   r   r   r   r   r	   r
   r   r   credsr   r   r   r   r   F   s   
zNTLMServerInfo.__init__c                 C   s.  t  }| j}|D ][}|tjkr|| |_q|tjkr || |_q|tjkr+|| |_q|tj	kr6|| |_
q|tjkrA|| |_q|tjkrct|| trWt|| j|_qt|| trc|| |_q| jd ur| jjd urt| jj|_| jjd ur| jj|_| jjd ur| jj|_| jjd ur| jj|_|S r   )r9   
TargetInfor   MsvAvNbDomainNamer   MsvAvNbComputerNamer   MsvAvDnsDomainNamer   MsvAvDnsComputerNamer   MsvAvDnsTreeNamer   MsvAvTimestamp
isinstancebytesr   r   r   r   VersionProductMajorVersionr	   ProductMinorVersionr
   ProductBuildr   WindowsProductr   )	challengesitikr   r   r   from_challengeS   s:   











zNTLMServerInfo.from_challengec                 C   sr   | j | j| j| j| j| j| j| jd d d
}| jd ur | jj	|d< | j
d ur+| j
j	|d< | jd ur7| j |d< |S )N)
r   r   r   r   r   r   r   r   r	   r
   r	   r
   r:   )r   r   r   r   r   r   r   r   r	   namer
   r:   to_dictr   r$   r   r   r   rO   t   s$   


zNTLMServerInfo.to_dict	c                    s*   dd |    | fddtD S )Nc                 S   s   | d u rdS t | S )N )str)xr   r   r   vn   s   z!NTLMServerInfo.to_tsv.<locals>.vnc                    s   g | ]} | qS r   r   ).0rT   r/   rU   r   r   
<listcomp>   s    z)NTLMServerInfo.to_tsv.<locals>.<listcomp>)rO   joinNTLMSERVERINFO_TSV_HDR)r   	separatorr   rW   r   to_tsv   s   zNTLMServerInfo.to_tsvc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nz=== Server Info ====
z%s: %s
)__dict__)r   r$   rL   r   r   r   __str__   s   
zNTLMServerInfo.__str__c                 C   s   t |  S r   )jsondumpsrO   r   r   r   r   to_json   s   zNTLMServerInfo.to_jsonc                 C   s   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }| jd urA|d	| j  7 }| j	d urN|d
| j	j
 7 }| jd ur[|d| jj
 7 }|S )NrR   z[domainname,%s]z[computername,%s]z[dnscomputername,%s]z[dnsdomainname,%s]z[dnsforestname,%s]z[os_build,%s]z[os_guess,%s]z[local_time,%s]z[os_major,%s]z[os_minor,%s])r   r   r   r   r   r   r   r   	isoformatr	   valuer
   rP   r   r   r   to_grep   s   


zNTLMServerInfo.to_grepN)rQ   )r5   r6   r7   r   r8   rM   rO   r\   r^   ra   rd   r   r   r   r   r9   E   s    
 
	r9   )(asyauth.protocols.ntlm.structures.avpairr   r   r_   rZ   r   r   r9   r   r   r   r   <module>   s   8