o
    jH                     @   s   d dl mZmZmZ d dlmZmZ d dlmZ G dd deZ	G dd dZ
G dd	 d	ZG d
d deZG dd de	ZG dd de	Zdde ide idiZdS )    )ULONGPVOIDPOINTER)KatzSystemArchitectureWindowsMinBuild)PackageTemplatec                   @   s,   e Zd Zdd Zedd Zedd ZdS )LsaTemplate_NT5c                 C   s"   d | _ d | _d | _d | _d | _d S N)	signaturefeedbackrandomkey_ptrDESXKey_ptr
key_structself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/alsadecryptor/lsa_template_nt5.py__init__   s
   
zLsaTemplate_NT5.__init__c                 C   s   t d)Nz+Template guessing is not applicable for NT5)	Exceptionsysinfor   r   r   get_template_brute   s   z"LsaTemplate_NT5.get_template_brutec                 C   sh   | j tjkr| jtjjkrtd d d S td| j tj	kr2| jtjjkr.td d d S tdd S )Nnt5x861zNT 6 is in another castle!x64)
architecturer   X86buildnumberr   	WIN_VISTAvalue	templatesr   X64r   r   r   r   get_template   s   zLsaTemplate_NT5.get_templateN)__name__
__module____qualname__r   staticmethodr   r#   r   r   r   r   r      s    
r   c                   @   (   e Zd Zdd Zedd Zdd ZdS )SYMCRYPT_NT5_DES_EXPANDED_KEYc                 C   s
   g | _ d S r	   )roundKeyr   r   r   r   r   (   s   
z&SYMCRYPT_NT5_DES_EXPANDED_KEY.__init__c                    sj   t  }tdD ]*}| dI d H }tj|ddd}| dI d H }tj|ddd}|j||g q|S )N      littleF)signed)r)   rangereadint
from_bytesr*   append)readers_xrlr   r   r   load+   s   z"SYMCRYPT_NT5_DES_EXPANDED_KEY.loadc                 C   s>   d}t | jD ]\}}|d|t|d t|d f 7 }q|S )NzSYMCRYPT_NT5_DES_EXPANDED_KEY
z%s L: %s R: %s
r      )	enumerater*   hex)r   tir7   r   r   r   __str__6   s   $z%SYMCRYPT_NT5_DES_EXPANDED_KEY.__str__Nr$   r%   r&   r   r'   r:   r@   r   r   r   r   r)   '   s
    

r)   c                   @   r(   )SYMCRYPT_NT5_DESX_EXPANDED_KEYc                 C   s   d | _ d | _d | _d S r	   )inputWhiteningoutputWhiteningdesKeyr   r   r   r   r   =   s   
z'SYMCRYPT_NT5_DESX_EXPANDED_KEY.__init__c                    sB   t  }| dI d H |_| dI d H |_t| I d H |_|S )N   )rB   r0   rC   rD   r)   r:   rE   )r4   r5   r   r   r   r:   B   s   z#SYMCRYPT_NT5_DESX_EXPANDED_KEY.loadc                 C   s>   d}|d| j   7 }|d| j  7 }|dt| j 7 }|S )Nz SYMCRYPT_NT5_DESX_EXPANDED_KEY
zinputWhitening : %s
zoutputWhitening : %s
zdesKey : %s
)rC   r=   rD   strrE   )r   r>   r   r   r   r@   J   s
   z&SYMCRYPT_NT5_DESX_EXPANDED_KEY.__str__NrA   r   r   r   r   rB   <   s
    
rB   c                       s(   e Zd Z fddZedd Z  ZS )PSYMCRYPT_NT5_DESX_EXPANDED_KEYc                    s   t    d S r	   )superr   r   	__class__r   r   r   R   s   z(PSYMCRYPT_NT5_DESX_EXPANDED_KEY.__init__c                    s,   t  }|  |_|  I d H |_t|_|S r	   )r   telllocation	read_uintr    rB   	finaltype)r4   pr   r   r   r:   U   s   
z$PSYMCRYPT_NT5_DESX_EXPANDED_KEY.load)r$   r%   r&   r   r'   r:   __classcell__r   r   rJ   r   rH   Q   s    rH   c                   @      e Zd Zdd ZdS )LSA_x64_nt5_1c                 C   >   t |  d| _d| _d| _d| _d| _d| _d| _t	| _
d S )Nr   s
   3ۋH [5iii   )r   r   archr
   nt_majorfeedback_ptr_offsetrandomkey_ptr_offsetdesx_key_ptr_offsetold_feedback_offsetrH   key_struct_ptrr   r   r   r   r   ^      

zLSA_x64_nt5_1.__init__Nr$   r%   r&   r   r   r   r   r   rS   ]       rS   c                   @   rR   )LSA_x86_nt5_1c                 C   rT   )Nr   rU   s	      jP   	   rV   )r   r   rW   rX   r
   rY   rZ   r[   r\   rH   r]   r   r   r   r   r   j   r^   zLSA_x86_nt5_1.__init__Nr_   r   r   r   r   ra   i   r`   ra   r   r   )r   r   N)$pypykatz.alsadecryptor.win_datatypesr   r   r   pypykatz.commons.commonr   r   &pypykatz.alsadecryptor.package_commonsr   r   r)   rB   rH   rS   ra   r!   r   r   r   r   <module>   s    