o
    ›¨Êh˜  ã                   @   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    úO/var/www/html/env/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þ