
íÂÐZà  ã               @   s:   d  Z  d d l Z d d l Z d d „  Z d d „  Z d S)a  `JOSE Base64`_ is defined as:

  - URL-safe Base64
  - padding stripped

.. _`JOSE Base64`:
    https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-37#appendix-C

.. Do NOT try to call this module "base64", as it will "shadow" the
   standard library.

é    Nc             C   s@   t  |  t j ƒ s* t d j t j ƒ ƒ ‚ t j |  ƒ j d ƒ S)zÃJOSE Base64 encode.

    :param data: Data to be encoded.
    :type data: bytes

    :returns: JOSE Base64 string.
    :rtype: bytes

    :raises TypeError: if ``data`` is of incorrect type

    zargument should be {0}ó   =)Ú
isinstanceÚsixÚbinary_typeÚ	TypeErrorÚformatÚbase64Zurlsafe_b64encodeÚrstrip)Údata© r   ú,/usr/lib/python3/dist-packages/josepy/b64.pyÚ	b64encode   s    r   c             C   sŠ   t  |  t j ƒ rI y |  j d ƒ }  Wqg t k
 rE t d ƒ ‚ Yqg Xn t  |  t j ƒ sg t d ƒ ‚ t j	 |  d d t
 |  ƒ d ƒ S)a^  JOSE Base64 decode.

    :param data: Base64 string to be decoded. If it's unicode, then
                 only ASCII characters are allowed.
    :type data: bytes or unicode

    :returns: Decoded data.
    :rtype: bytes

    :raises TypeError: if input is of incorrect type
    :raises ValueError: if input is unicode with non-ASCII characters

    Úasciiz5unicode argument should contain only ASCII charactersz#argument should be a str or unicoder   é   )r   r   Zstring_typesÚencodeÚUnicodeEncodeErrorÚ
ValueErrorr   r   r   Zurlsafe_b64decodeÚlen)r
   r   r   r   Ú	b64decode#   s    r   )Ú__doc__r   r   r   r   r   r   r   r   Ú<module>   s   