B
    b
,c  ã               @   sR   d Z ddlZdZdd„ eeƒD ƒZdd„ edƒD ƒddd	… Zd
d„ Zdd„ ZdS )zéPython implementation of Z85 85-bit encoding

Z85 encoding is a plaintext encoding for a bytestring interpreted as 32bit integers.
Since the chunks are 32bit, a bytestring must be a multiple of 4 bytes.
See ZMQ RFC 32 for details.


é    NsU   0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#c             C   s   i | ]\}}||“qS © r   )Ú.0ÚidxÚcr   r   ú,lib/python3.7/site-packages/zmq/utils/z85.pyú
<dictcomp>   s    r   c             C   s   g | ]}d | ‘qS )éU   r   )r   Úir   r   r   ú
<listcomp>   s    r
   é   éÿÿÿÿc             C   sv   t | ƒd rtdt | ƒ ƒ‚t | ƒd }t d| | ¡}g }x0|D ](}x"tD ]}| t|| d  ¡ qLW qBW t|ƒS )zencode raw bytes into Z85é   z$length must be multiple of 4, not %iz>%dIr   )ÚlenÚ
ValueErrorÚstructZunpackÚ_85sÚappendÚZ85CHARSÚbytes)ZrawbytesÚnvaluesÚvaluesZencodedÚvÚoffsetr   r   r   Úencode   s    

r   c             C   sÌ   t | tƒr6y|  d¡} W n tk
r4   tdƒ‚Y nX t| ƒd rRtdt| ƒ ƒ‚t| ƒd }g }xTtdt| ƒdƒD ]@}d}x,ttƒD ] \}}|t	| ||   | 7 }q†W | 
|¡ qtW tjd| f|žŽ S )z3decode Z85 bytes to raw bytes, accepts ASCII stringÚasciiz4string argument should contain only ASCII charactersr   z(Z85 length must be multiple of 5, not %ir   z>%dI)Ú
isinstanceÚstrr   ÚUnicodeEncodeErrorr   r   ÚrangeÚ	enumerater   ÚZ85MAPr   r   Zpack)Zz85bytesr   r   r	   ÚvalueÚjr   r   r   r   Údecode(   s    
r#   )	Ú__doc__r   r   r   r    r   r   r   r#   r   r   r   r   Ú<module>   s   