a
    xdn                     @   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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certZ
cert_storedigest
serializer r   U/var/www/html/Ranjet/env/lib/python3.9/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V tt|| jd\}}}t|}| j|||| j 	|| j
| j dW  d   S 1 s0    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   Z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L | |}|d |d |d   }}}| j | ||| j W d   n1 sl0    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    

4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   Z
get_pubkeyZkey_sizelensplitr   )r   r0   r6   Zraw_payloadZ	first_sepr$   Zsigner_certZsig_lenZsep_lenZsignature_start_positionZsignature_end_positionr#   vr   r   r    r.   >   s$    




zSecureSerializer._unpack)__name__
__module____qualname____doc__r   r!   r,   r1   r   r&   r.   r   r   r   r    r      s   

r   Nr   c                 C   sF   t | ot| |ot||o t|||d}tjd|j|jddd dS )zRegister security serializer.r"   authzapplication/datazutf-8)r)   r*   N)r   r   r   r   r   registerr,   r1   )r   r   storer   r   r3   r   r   r    r   [   s    

r   )rA   Zkombu.serializationr   r   r   Zkombu.utils.encodingr   r   r   Zcelery.app.defaultsr   Zcelery.utils.serializationr	   r
   Zcertificater   r   r   r   utilsr   r   __all__r   r   r   r   r   r    <module>   s   L