File: //lib/python3/dist-packages/pymacaroons/serializers/__pycache__/binary_serializer.cpython-38.pyc
U
�%�Y01 � @ s� d dl mZ d dlZd dlmZ d dlZd dlZd dlZd dlm Z d dl
mZmZm
Z
d dlmZ d dlmZ edd d
g�ZG dd� de�Zd
d� Zejjdkr�dd� Zndd� Zdd� ZdS )� )�unicode_literalsN)�
namedtuple)�urlsafe_b64encode)�convert_to_bytes�convert_to_string�
raw_b64decode)�BaseSerializer)�MacaroonSerializationException�PacketV2�
field_type�datac @ s� e Zd ZdZdZdZdZdZdZdd� Z dd � Z
d
d� Zdd
� Zdd� Z
dd� Zdd� Zdd� Zdd� Zdd� Zd!dd�Zdd� Zdd � ZdS )"�BinarySerializer� � � � r c C s t | �|���d��d�S )N�ascii�=)r �
serialize_raw�decode�rstrip)�self�macaroon� r �K/usr/lib/python3/dist-packages/pymacaroons/serializers/binary_serializer.py� serialize s ���zBinarySerializer.serializec C s* ddl m} |j|kr | �|�S | �|�S )Nr )�MACAROON_V1)�pymacaroons.macaroonr �version�
_serialize_v1�
_serialize_v2)r r r r r r r # s
zBinarySerializer.serialize_rawc C s� | � d|j�}|| � d|j�7 }|jD ]F}|| � d|j�7 }|jr&|jr&|| � d|j�7 }|| � d|j�7 }q&|| � dt�|j ��7 }|S )N� location�
identifier� cid� vid� cl� signature)
�
_packetize�location�
identifier�caveatsZ
_caveat_idZ_verification_key_idZ _location�binascii� unhexlify�signature_bytes)r r ZcombinedZcaveatr r r r ) s
�
�zBinarySerializer._serialize_v1c C s� ddl m} t� }|�|� |jd k rN| �|| jt|j�� | �|| j|j � | �|| j
� |jD ]d}|jd k r�| �|| jt|j�� | �|| j|j� |j
d k r�| �|| jt|j
�� | �|| j
� qb| �|| j
� | �|| jt�|j�� t|�S )Nr ��MACAROON_V2)r r/ � bytearray�appendr( �_append_packet� _LOCATIONr �_IDENTIFIERZidentifier_bytes�_EOSr* Zcaveat_id_bytes�verification_key_id�_VID�
_SIGNATUREr+ r, r- �bytes)r r r/ r �cr r r r ; s6
�
�
�
��zBinarySerializer._serialize_v2c C s. t |�dkrtd��t|�}t|�}| �|�S )Nr zempty macaroon)�len�
ValueErrorr r �deserialize_raw)r �
serialized�decodedr r r �deserializeU s
zBinarySerializer.deserializec C sZ ddl m} ddlm} t�|d d� �}||kr<| �|�S t|�rN| �|�S |d��d S )Nr r. �� MacaroonDeserializationExceptionr z7cannot determine data format of binary-encoded macaroon) r r/ �pymacaroons.exceptionsrB �sixZbyte2int�_deserialize_v2�
_is_ascii_hex�_deserialize_v1)r r>