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 r·t| jtƒdu r™t| jƒdkr˜td| j ƒ‚nt| jtƒr­t| jƒdkr­td| j ƒ‚| j|_| j|_|S | jtj k�rt| jtƒdu rçt| 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 �r˜t| jtƒdu �rzt| jƒd
k�rytd| j ƒ‚nt| jt$ƒdu �r’t| jƒdk�r’td| j ƒ‚| j|_(|S | jtj)k�r¤d|_*|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    