o
    àý°j•  ã                   @   sŒ   d dl mZ d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	 dZ
dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    )Úabsolute_import)Úprint_functionN)Ú	randrange)ÚpackÚunpacks                   c                  C   s$   d} t dt| ƒt| ƒt| ƒt| ƒƒS )NiÿÿÿÚIIII)r   r   )Útop© r	   ú€/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/uuid.pyÚgenerate   s    r   c                 C   sD   t d| d d… ƒ\}}}t d| dd… ƒ\}}}d||||||f S )Nú<LHHé   ú>HHLé   z%08X-%04X-%04X-%04X-%04X%08X)r   )ÚuuidÚuuid1Úuuid2Úuuid3Úuuid4Úuuid5Úuuid6r	   r	   r
   Úbin_to_string$   s   r   c                 C   s`   d| vr	t  | ¡S t d| ¡}dd„ | ¡ D ƒ\}}}}}}td|||ƒ} | td|||ƒ7 } | S )Nú-z^([\dA-Fa-f]{8})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})([\dA-Fa-f]{8})c                 S   s   g | ]}t |d ƒ‘qS )r   )Úint)Ú.0Úxr	   r	   r
   Ú
<listcomp>3   s    z!string_to_bin.<locals>.<listcomp>r   r   )ÚbinasciiÚ	unhexlifyÚreÚmatchÚgroupsr   )r   Úmatchesr   r   r   r   r   r   r	   r	   r
   Ústring_to_bin*   s   
ÿr#   c                 C   s*   |   d¡\}}tdt|ƒƒtdt|ƒƒ S )NÚ.z<H)Úsplitr   r   )ÚsÚmajÚminr	   r	   r
   Ústringver_to_bin9   s   r)   c                 C   s(   t | ƒdkrd S t| d ƒt| d ƒ S )Né   r   é   )Úlenr#   r)   )Útupr	   r	   r
   Úuuidtup_to_bin>   s   r.   c                 C   sF   t | ƒdksJ ‚t| d d… ƒ}td| dd … ƒ\}}|d||f fS )Né   r   z<HHz%d.%d)r,   r   r   )ÚbinÚuuidstrr'   r(   r	   r	   r
   Úbin_to_uuidtupD   s   r2   c                 C   s,   t  d| d ¡}|r| ¡ \}}||fS dS )aS  
    if version is not found in the input string "1.0"  is returned
    example:
              "00000000-0000-0000-0000-000000000000 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')
              "10000000-2000-3000-4000-500000000000 version 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')
              "10000000-2000-3000-4000-500000000000 v 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')
              "10000000-2000-3000-4000-500000000000" returns ('00000000-0000-0000-0000-000000000000','1.0')

    :param s: string
    :return: tuple (uuid,version)
    zh([A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}).*?([0-9]{1,5}\.[0-9]{1,5})z 1.0N)r   Úsearchr!   )r&   ÚgÚuÚvr	   r	   r
   Ústring_to_uuidtupK   s   ÿr7   c                 C   s   | \}\}}d|||f S )Nz	%s v%d.%dr	   )r-   r   r'   r(   r	   r	   r
   Úuuidtup_to_string_   s   r8   )Ú
__future__r   r   r   r   Úrandomr   Ústructr   r   Ú
EMPTY_UUIDr   r   r#   r)   r.   r2   r7   r8   r	   r	   r	   r
   Ú<module>   s   