o
    Œõ±j5  ã                   @   s`   d dl mZmZmZmZ d dlZd dlZddlmZ ddl	m
Z
mZmZmZ dd„ Zdd	„ ZdS )
é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )Úunwrap)Úbyte_clsÚbytes_to_listÚstr_clsÚ	type_namec                 C   sh  | t tjtjgƒvrttdttjƒttjƒt| ƒƒƒ‚t|tƒs)t	tdt
|ƒƒƒ‚| tjkr0dnd}t|ƒ|krBttd|t|ƒƒƒ‚| tjkrOdtt|ƒƒ S t d|¡}i }d}d	}t|d
 ƒD ]&\}}|dkr�|d	ur€|| }	|	|vry|||	< t||	ƒ}d	}qa|d	u r‡|}qadd„ |D ƒ}
|dk r˜d |
¡S || }|| }d |
d	|… ¡d d |
|d	… ¡ S )a  
    Windows compatibility shim for socket.inet_ntop().

    :param address_family:
        socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6

    :param packed_ip:
        A byte string of the network form of an IP address

    :return:
        A unicode string of the IP address
    úp
            address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),
            not %s
            zA
            packed_ip must be a byte string, not %s
            é   é   zA
            packed_ip must be %d bytes long - is %d
            z%d.%d.%d.%dó	   !HHHHHHHHr   N)éÿÿÿÿc                 S   s   g | ]
}t |ƒd d… ‘qS )é   N)Úhex)Ú.0Úo© r   úƒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asn1crypto/_inet.pyÚ
<listcomp>I   s    zinet_ntop.<locals>.<listcomp>r   ú:ú::)ÚsetÚsocketÚAF_INETÚAF_INET6Ú
ValueErrorr   ÚreprÚ
isinstancer   Ú	TypeErrorr   ÚlenÚtupler	   ÚstructÚunpackÚ	enumerateÚmaxÚjoin)Úaddress_familyÚ	packed_ipÚrequired_lenÚoctetsÚruns_of_zeroÚlongest_runÚ
zero_indexÚiÚoctetÚlengthÚhexedÚ
zero_startÚzero_endr   r   r   Ú	inet_ntop   sV   ù

üû

€€
(r6   c                 C   s¼  | t tjtjgƒvrttdttjƒttjƒt| ƒƒƒ‚t|tƒs)t	tdt
|ƒƒƒ‚| tjkrk| d¡}t|ƒdk}|sWg }|D ]}t|ƒ}|dksM|dk rQd} n| |¡ q?|rbttdt|ƒƒƒ‚tjd	g|¢R Ž S d
}| d¡}|dkryd}n4|dkr‰| d¡}t|ƒdk}n$| d¡\}}| d¡}	| d¡}
dt|	ƒ t|
ƒ }|	dg|  |
 }|sÕg }|D ]}t|dƒ}|dksÂ|dk rÆd} n| |¡ q³tjdg|¢R Ž S ttdt|ƒƒƒ‚)a  
    Windows compatibility shim for socket.inet_ntop().

    :param address_family:
        socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6

    :param ip_string:
        A unicode string of an IP address

    :return:
        A byte string of the network form of the IP address
    r   zD
            ip_string must be a unicode string, not %s
            Ú.r   éÿ   r   Tz‡
                ip_string must be a dotted string with four integers in the
                range of 0 to 255, got %s
                s   !BBBBFr   r   r   é   Ú0r   iÿÿ  r   z?
        ip_string must be a valid ipv6 string, got %s
        )r   r   r   r   r   r   r   r    r
   r!   r   Úsplitr"   ÚintÚappendr$   ÚpackÚcount)r)   Ú	ip_stringr,   ÚerrorÚintsr   ÚomittedÚbeginÚendÚbegin_octetsÚ
end_octetsÚmissingr   r   r   Ú	inet_ptonT   sl   ù

ü

û




ürI   )Ú
__future__r   r   r   r   r   r$   Ú_errorsr   Ú_typesr   r	   r
   r   r6   rI   r   r   r   r   Ú<module>   s   I