o
    �õ±j  ã                   @   s*   d Z ddlZddlmZ G dd„ dƒZdS )z‘

The "lf"-record
===============

Offset	Size	Contents
0x0000	Word	ID: ASCII-"lf" = 0x666C
0x0002	Word	number of keys
0x0004	????	Hash-Records

é    N)ÚNTRegistryHRc                   @   sH   e Zd Zdd„ Zedd„ ƒZdd„ Zedd„ ƒZed	d
„ ƒZdd„ Z	dS )ÚNTRegistryLHc                 C   s   d| _ d | _g | _d S )Ns   lh)ÚmagicÚkeys_cntÚhash_records)Úself© r   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiowinreg/filestruct/lh.pyÚ__init__   s   
zNTRegistryLH.__init__c                 C   s:   d}|   ¡ D ]}|d9 }|t|ƒ7 }q|d jdddd�S )Nr   é%   l        é   ÚlittleF©Úsigned)ÚupperÚordÚto_bytes)Úkey_nameÚresÚbbr   r   r	   Ú	calc_hash   s
   zNTRegistryLH.calc_hashc                 C   s0   g }| j D ]}|jt |¡kr| |j¡ q|S )z©
		Checks all hash-records for match with key_name,
		if there is a match it returns the offset to the key (located in the hash record)
		if no match, it returns None
		)r   Ú	hash_datar   r   ÚappendÚ	offset_nk)r   r   ÚoffsetsÚhrr   r   r	   Úget_key_offsets   s   
€zNTRegistryLH.get_key_offsetsc                 C   s   t  t | ¡¡S )N)r   Úfrom_bufferÚioÚBytesIO)Údatar   r   r	   Ú
from_bytes*   s   zNTRegistryLH.from_bytesc                 C   sT   t ƒ }|  d¡|_tj|  d¡ddd�|_t|jƒD ]}t | ¡}|j	 
|¡ q|S )Né   r   Fr   )r   Úreadr   Úintr!   r   Úranger   r   r   r   )ÚbuffÚlfÚ_r   r   r   r	   r   .   s   
zNTRegistryLH.from_bufferc                 C   sn   d}| j D ]/}t| j | tƒr't| j | ƒD ]\}}|d||t|ƒf 7 }qq|d|t| j | ƒf 7 }q|S )Nz== NT Registry LH Record ==
z   %s: %s: %sz	%s: %s 
)Ú__dict__Ú
isinstanceÚlistÚ	enumerateÚstr)r   ÚtÚkÚiÚitemr   r   r	   Ú__str__8   s   
ÿzNTRegistryLH.__str__N)
Ú__name__Ú
__module__Ú__qualname__r
   Ústaticmethodr   r   r!   r   r2   r   r   r   r	   r      s    


	r   )Ú__doc__r   Úaiowinreg.filestruct.hashrecordr   r   r   r   r   r	   Ú<module>   s   