ó
l]]c           @` 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   Z d   Z d S(   i    (   t   unicode_literalst   divisiont   absolute_importt   print_functionNi   (   t   unwrap(   t   byte_clst   bytes_to_listt   str_clst	   type_namec         C` s  |  t  t j t j g  k rT t t d t t j  t t j  t |      n  t | t  s t	 t d t
 |     n  |  t j k r d n d } t |  | k rÏ t t d | t |     n  |  t j k rò d t t |   St j d |  } i  } d } d } x t | d  D]w \ } } | d k r| d k	 r| | }	 |	 | k rn| | |	 <n  t | |	  } d } qq'| d k r'| } q'q'Wg  | D] }
 t |
  d
 ^ qİ} | d
 k  rŜd j |  S| | } | | } d j | |   d d j | |  S(   u  
    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
    up   
            address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),
            not %s
            uA   
            packed_ip must be a byte string, not %s
            i   i   uA   
            packed_ip must be %d bytes long - is %d
            u   %d.%d.%d.%ds	   !HHHHHHHHi    i˙˙˙˙i   u   :u   ::N(   i˙˙˙˙(   t   sett   sockett   AF_INETt   AF_INET6t
   ValueErrorR   t   reprt
   isinstanceR   t	   TypeErrorR   t   lent   tupleR   t   structt   unpackt   Nonet	   enumeratet   maxt   hext   join(   t   address_familyt	   packed_ipt   required_lent   octetst   runs_of_zerot   longest_runt
   zero_indext   it   octett   lengtht   ot   hexedt
   zero_startt   zero_end(    (    s/   lib/python2.7/site-packages/asn1crypto/_inet.pyt	   inet_ntop   sL    
#

c         C` s  |  t  t j t j g  k rT t t d t t j  t t j  t |      n  t | t  s t	 t d t
 |     n  |  t j k r@| j d  } t |  d k } | sg  } xL | D]A } t |  } | d k sî | d k  rĝ t } Pn  | j |  qÄ Wn  | r0t t d t |     n  t j d |  St } | j d	  } | d
 k rjt } n | d k r| j d  } t |  d k } nb | j d	  \ } } | j d  }	 | j d  }
 d t |	  t |
  } |	 d g | |
 } | sgg  } xL | D]D } t | d  } | d k s<| d k  rFt } Pn  | j |  qWt j d |  St t d t |     d S(   u  
    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
    up   
            address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),
            not %s
            uD   
            ip_string must be a unicode string, not %s
            u   .i   i˙   i    u   
                ip_string must be a dotted string with four integers in the
                range of 0 to 255, got %s
                s   !BBBBu   ::i   u   :i   u   0i   i˙˙  s	   !HHHHHHHHu?   
        ip_string must be a valid ipv6 string, got %s
        N(   R	   R
   R   R   R   R   R   R   R   R   R   t   splitR   t   intt   Truet   appendR   t   packt   Falset   count(   R   t	   ip_stringR   t   errort   intsR$   t   omittedt   begint   endt   begin_octetst
   end_octetst   missing(    (    s/   lib/python2.7/site-packages/asn1crypto/_inet.pyt	   inet_ptonT   sd    	(   t
   __future__R    R   R   R   R
   R   t   _errorsR   t   _typesR   R   R   R   R(   R9   (    (    (    s/   lib/python2.7/site-packages/asn1crypto/_inet.pyt   <module>   s   ""	I