o
    Df                     @   s   d Z ddlmZmZmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZmZ ddlmZ dd	lmZmZ d
ZG dd dZdddde
dfddZdS )zSecure serializer.    )dumpsloadsregistry)bytes_to_strensure_bytesstr_to_bytes)DEFAULT_SECURITY_DIGEST)	b64decode	b64encode   )CertificateFSCertStore)
PrivateKey)get_digest_algorithmreraise_errors)SecureSerializerregister_authc                   @   sT   e Zd ZdZdddedfddZdd Zdd	 Zed
fddZ	ed
fddZ
dS )r   zSigned serializer.Njsonc                 C   s&   || _ || _|| _t|| _|| _d S N)_key_cert_cert_storer   _digest_serializer)selfkeycert
cert_storedigest
serializer r    V/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/security/serialization.py__init__   s
   

zSecureSerializer.__init__c              	   C   s   | j dusJ | jdusJ tdtf+ tt|| jd\}}}t|}| j|||| j 	|| j
| j dW  d   S 1 sBw   Y  dS )z%Serialize data structure into string.NzUnable to serialize: {0!r}r   )	signaturesigner)r   r   r   	Exceptionr   r   r   r   _packsignr   get_id)r   datacontent_typecontent_encodingbodyr    r    r!   	serialize   s   

$zSecureSerializer.serializec                 C   s   | j dusJ tdtf& | |}|d |d |d }}}| j | ||| j W d   n1 s6w   Y  tt||d |d dd	S )
z'Deserialize data structure from string.NzUnable to deserialize: {0!r}r$   r%   r-   r+   r,   T)force)r   r   r&   _unpackverifyr   r   r   )r   r*   payloadr$   r%   r-   r    r    r!   deserialize*   s   

zSecureSerializer.deserializez c                 C   s&   | dd |||||fD }t|S )Nc                 s   s    | ]}t |V  qd S r   )r   ).0sr    r    r!   	<genexpr>8   s    
z)SecureSerializer._pack.<locals>.<genexpr>)joinr
   )r   r-   r+   r,   r%   r$   sepfieldsr    r    r!   r'   6   s   
zSecureSerializer._packc                 C   s   t t|}||}|d | }| j| }| jd? }t|}|| }	|	| }
||	|
 }||
| d  |}||t|d t|d t|d dS )N   r   r      )r%   r$   r+   r,   r-   )	r	   r   findr   
get_pubkeykey_sizelensplitr   )r   r2   r8   raw_payload	first_sepr%   signer_certsig_lensep_lensignature_start_positionsignature_end_positionr$   vr    r    r!   r0   >   s$   




zSecureSerializer._unpack)__name__
__module____qualname____doc__r   r"   r.   r3   r   r'   r0   r    r    r    r!   r      s    

r   Nr   c                 C   sJ   t | ot| |d|ot||ot|||d}tjd|j|jddd dS )zRegister security serializer.)passwordr#   authzapplication/datazutf-8)r+   r,   N)r   r   r   r   r   registerr.   r3   )r   key_passwordr   storer   r   r5   r    r    r!   r   [   s   


r   )rL   kombu.serializationr   r   r   kombu.utils.encodingr   r   r   celery.app.defaultsr   celery.utils.serializationr	   r
   certificater   r   r   r   utilsr   r   __all__r   r   r    r    r    r!   <module>   s    L