3
¥Yði  ã               @   sÊ   d dl Z d dlZd dlZd dlZddlmZ ejee	f Z
de
eee	dœdd„Ze
e	d	œd
d„Ze
e	d	œdd„Zej› ej› d�jdƒZejdƒZejZejdejƒZee	dœdd„Ze	edœdd„ZdS )é    Né   )ÚBadDataúutf-8Ústrict)ÚsÚencodingÚerrorsÚreturnc             C   s   t | tƒr| j||ƒ} | S )N)Ú
isinstanceÚstrÚencode)r   r   r   © r   ú=/tmp/pip-build-8om4l6ph/itsdangerous/itsdangerous/encoding.pyÚ
want_bytes   s    
r   )Ústringr	   c             C   s   t | ƒ} tj| ƒjdƒS )z^Base64 encode a string of bytes or text. The resulting bytes are
    safe to use in URLs.
    ó   =)r   Úbase64Úurlsafe_b64encodeÚrstrip)r   r   r   r   Úbase64_encode   s    r   c             C   sT   t | ddd�} | dt| ƒ d  7 } y
tj| ƒS  ttfk
rN   tdƒ‚Y nX dS )zOBase64 decode a URL-safe string of bytes or text. The result is
    bytes.
    ÚasciiÚignore)r   r   r   é   zInvalid base64-encoded dataN)r   Úlenr   Úurlsafe_b64decodeÚ	TypeErrorÚ
ValueErrorr   )r   r   r   r   Úbase64_decode   s    
r   z-_=r   z>Qz#_t.Callable[[bytes], _t.Tuple[int]])Únumr	   c             C   s   t | ƒjdƒS )Nó    )Ú_int_to_bytesÚlstrip)r   r   r   r   Úint_to_bytes1   s    r"   )Úbytestrr	   c             C   s   t | jddƒƒd S )Né   r   r   )Ú_bytes_to_intÚrjust)r#   r   r   r   Úbytes_to_int5   s    r'   )r   r   )r   r   ÚstructÚtypingZ_tÚexcr   ÚUnionr   ÚbytesZ_t_str_bytesr   r   r   Úascii_lettersÚdigitsr   Z_base64_alphabetÚStructZ_int64_structÚpackr    ÚcastÚunpackr%   Úintr"   r'   r   r   r   r   Ú<module>   s   
