o
    j|                     @   s   d dl mZ d dlmZ d dlmZmZmZ d dlm	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 G d	d
 d
eZdS )    )List)UniCredential)asyauthSecretasyauthProtocolasyauthSubProtocol)SubProtocol)SubProtocolNative)	UniTarget)KerberosCredential)str_oneint_onebool_oneint_listc                   @   s   e Zd Zdddde ddddf	dededededee de	ded	ed
edefddZ
dd Zdd Zedd Zdd ZdefddZdd ZdS )r
   Nstypetargetaltname	altdomainetypessubprotocolcertdatakeydatacross_targetcross_realmc              	   C   s|   t j| ||||tj|	d || _|| _|| _|| _|
| _|| _	|| _
|| _tdddd| _| jtju r8tj| _|   d S )N)secretusernamedomainr   protocolr     00ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff      )pg)r   __init__r   KERBEROSr   r   r   r   r   r   r   r   int	dh_paramsr   r   NTRC4sanity_check)selfr   r   r   r   r   r   r   r   r   r   r   r   r    r*   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/common/credentials/kerberos.pyr"      s.   	zKerberosCredential.__init__c                 C   sV   | j tjtjtjtjtjfvr| jstdt	|  | j
d u s%| j
jd u r)tdd S )Nz,Kerberos credential must have domain set! %sz/Kerberos credential target must have dc_ip set!)r   r   PFXPFXSTRPFXB64PFXHEXPEMr   	Exceptionstrr   dc_ip)r)   r*   r*   r+   r(   +   s
   $zKerberosCredential.sanity_checkc                 C   sR   ddl m} | jtjkr|j| jjdd | j| j	dS |j
| jj| jj| j| j	dS )Nr   )PKINITMY)certstore_namecert_serialr%   is_azure)r%   r8   )minikerberos.pkinitr4   r   r   	CERTSTOREfrom_windows_certstoresettings
pfx12_filer%   r8   from_pfxpfx12_file_pass)r)   r4   r*   r*   r+   
get_pkinit1   s   zKerberosCredential.get_pkinitc                   C   s   t t tt t t t t t t d
S )N)
r   r   etypedcdccdnsdnscrealmcr   r   )r   r   r*   r*   r*   r+   get_url_params:   s   z!KerberosCredential.get_url_paramsc                 C   sf   | j }d}| j jdrt| j jd d }d}||fS | j jdr/t| j jd d }d}||fS )NfileB64b64HEXhex)r   nameendswithr   )r)   basetypeencodingr*   r*   r+   get_basetype_and_encodingI   s   z,KerberosCredential.get_basetype_and_encodingreturnc                 C   sV  |   \}}|tjkrtj| j| j| j|dS |tjkr$tj	| j|dS |tj
kr5tj| j| j| j|dS |tjkrJtj| j| j| j| j| j|dS |tjkr]t| j| j| j| j| jS t }| j|_| j|_| jtjtjtjfv ry| j|_|S | jtjtjfv rt| jtdu rt| jdkrtd| j nt| jtrt| jdkrtd| j | j|_| j|_|S | jtj krt| jtdu rt| jdkr| j|_!|S t| jdkr| j|_"|S td| j t| jtdu rt| jdkr| j|_!|S t| jdkr| j|_"|S td| j td| j | jtj#krWt| jtdu r9t| jdkr8td| j nt| jt$du rQt| jd	krQtd| j | j|_%|S | jtj&tj'fv rt| jtdu rzt| jd
krytd| j nt| jt$du rt| jdkrtd| j | j|_(|S | jtj)krd|_*|S td| j )N)rQ   T    zIncorrect RC4/NT key! %sr   @   zIncorrect AES key! %szIncorrect DES key! %s      zIncorrect DES3 key! %s   zMissing/unknown stype! %s)+rR   r   KEYTABKCREDfrom_keytabr   r   r   KIRBI
from_kirbiCCACHEfrom_ccacher,   r>   r   r%   r-   from_pfx_stringr   PASSWORDPWPASSpasswordr&   r'   
isinstancer2   lenr1   bytesnt_hashkerberos_key_rc4AESkerberos_key_aes_128kerberos_key_aes_256DES	bytearraykerberos_key_desDES3TDESkerberos_key_des3NONE	nopreauth)r)   rP   rQ   resr*   r*   r+   to_ccredT   s   



 
0'#!zKerberosCredential.to_ccredc                 O   s   | j jtjkrddlm} || S | j jtjkr"ddlm} || S | j jtj	kr3ddl
m} || S | j jtjkrDddlm} || S | j jtjkrUddlm} || S | j jtjkrc| j j| S td| j  )Nr   )KerberosClientNative)KerberosClientSSPI)KerberosClientSSPIProxy)KerberosClientWSNET)KerberosClientWSNETDirectzUnsupported subprotocol "%s")r   typer   NATIVE(asyauth.protocols.kerberos.client.nativerw   SSPI&asyauth.protocols.kerberos.client.sspirx   	SSPIPROXY+asyauth.protocols.kerberos.client.sspiproxyry   WSNET'asyauth.protocols.kerberos.client.wsnetrz   WSNETDIRECT-asyauth.protocols.kerberos.client.wsnetdirectr{   CUSTOM
factoryobjbuild_contextr1   )r)   argskwargsrw   rx   ry   rz   r{   r*   r*   r+   r      s$   z KerberosCredential.build_context)__name__
__module____qualname__r   r   r	   r2   r   r$   r   r"   r(   r@   staticmethodrG   rR   rZ   rv   r   r*   r*   r*   r+   r
      s    L	
Dr
   N)typingr   asyauth.common.credentialsr   asyauth.common.constantsr   r   r   asyauth.common.subprotocolsr   r   asysocks.unicomm.common.targetr	   minikerberos.common.credsr
   rZ   asyauth.utils.paramprocessorr   r   r   r   r*   r*   r*   r+   <module>   s    