U
    öEZh)'  ã                
   @   sX  d dl Z d dlmZ e jrVd dlmZ d dlmZmZm	Z	m
Z
mZ e jeee	e
ef ZdZd Zdedœdd	„Zed
dœdd„Zd
dedœdd„Zd
eeee je eedœdd„Zeddœdd„Zeeddœdd„Zd
eddœdd„Zd
eddœdd„Zd
eed œd!d"„Zd(d
deee je ee jed#œd$d%„Zd)d
deee je ee jed#œd&d'„ZdS )*é    N)Ú
InvalidTag)ÚBackend©ÚAESCCMÚAESGCMÚAESOCB3ÚAESSIVÚChaCha20Poly1305é   Ú
_AEADTypes)ÚcipherÚreturnc                 C   sÎ   ddl m}m}m}m}m} t| |ƒr*dS t| |ƒrPdt| jƒd › d 	d¡S t| |ƒrvdt| jƒd › d 	d¡S t| |ƒr dt| jƒd d	 › d
 	d¡S t| |ƒs®t
‚dt| jƒd › d 	d¡S d S )Nr   r   s   chacha20-poly1305zaes-é   z-ccmÚasciiz-ocbé   z-sivz-gcm)Ú+cryptography.hazmat.primitives.ciphers.aeadr   r   r   r   r	   Ú
isinstanceÚlenÚ_keyÚencodeÚAssertionError)r   r   r   r   r   r	   © r   úp/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/aead.pyÚ_aead_cipher_name   s    



 r   r   )Úcipher_nameÚbackendc                 C   sj   |   d¡rH|j |jj| |jj¡}| ||jjk¡ |j ||jj¡}n|j | ¡}| ||jjk¡ |S )Ns   -siv)	ÚendswithÚ_libZEVP_CIPHER_fetchÚ_ffiÚNULLÚopenssl_assertÚgcZEVP_CIPHER_freeZEVP_get_cipherbyname)r   r   Ú
evp_cipherr   r   r   Ú_evp_cipher1   s    
ýr#   )r   r   Úkeyc                 C   s|   | j  ¡ }|  || jjk¡ | j || j j¡}t|ƒ}t|| ƒ}| j 	|¡}| j  
||| jj|| jjd¡}|  |dk¡ |S ©Nr   )r   ÚEVP_CIPHER_CTX_newr    r   r   r!   ÚEVP_CIPHER_CTX_freer   r#   Úfrom_bufferÚEVP_CipherInit_ex)r   r   r$   Úctxr   r"   Úkey_ptrÚresr   r   r   Ú_aead_create_ctxA   s     

úr-   )r   r   r$   ÚnonceÚtagÚtag_lenÚ	operationc              
   C   s.  t || ƒ}| j ¡ }| j || jj¡}| j ||| jj| jj| jjt|t	kƒ¡}	|  
|	dk¡ | j || jjt|ƒ| jj¡}	|  
|	dk¡ |tkr¬|d k	sžt‚t| ||ƒ n2| d¡rÞ| j || jj|| jj¡}	|  
|	dk¡ | j |¡}
| j |¡}| j || jj| jj||
t|t	kƒ¡}	|  
|	dk¡ |S )Nr   s   -ccm)r#   r   r&   r   r!   r'   r)   r   ÚintÚ_ENCRYPTr    ÚEVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENr   Ú_DECRYPTr   Ú_set_tagr   ÚEVP_CTRL_AEAD_SET_TAGr(   )r   r   r$   r.   r/   r0   r1   r"   r*   r,   Ú	nonce_ptrr+   r   r   r   Ú_aead_setupX   sT    	


úü
   ÿ
úr9   )r/   r   c                 C   s8   | j  |¡}| j || jjt|ƒ|¡}|  |dk¡ d S r%   )r   r(   r   r4   r7   r   r    )r   r*   r/   Ztag_ptrr,   r   r   r   r6   Œ   s       ÿr6   )r.   r1   r   c              
   C   sH   | j  |¡}| j || j j| j j| j j|t|tkƒ¡}|  |dk¡ d S r%   )r   r(   r   r)   r   r2   r3   r    )r   r*   r.   r1   r8   r,   r   r   r   Ú_set_nonce_operation”   s    
úr:   )r   Údata_lenr   c                 C   s:   | j  d¡}| j || j j|| j j|¡}|  |dk¡ d S ©Núint *r   )r   Únewr   ÚEVP_CipherUpdater   r    )r   r*   r;   Zintptrr,   r   r   r   Ú_set_length¡   s        ÿr@   )r   Úassociated_datar   c                 C   sF   | j  d¡}| j  |¡}| j || j j||t|ƒ¡}|  |dk¡ d S r<   )r   r>   r(   r   r?   r   r   r    )r   r*   rA   ÚoutlenZ
a_data_ptrr,   r   r   r   Ú_process_aad©   s        ÿrC   )r   Údatar   c                 C   sp   | j  d¡}| j  dt|ƒ¡}| j  |¡}| j ||||t|ƒ¡}|dkrV|  ¡  t‚| j  ||d ¡d d … S )Nr=   úunsigned char[]r   )	r   r>   r   r(   r   r?   Ú_consume_errorsr   Úbuffer)r   r*   rD   rB   ÚbufZdata_ptrr,   r   r   r   Ú_process_data²   s    rI   )r   r   r.   rD   rA   Ú
tag_lengthr*   r   c                 C   sP  ddl m}m} |d kr8t|ƒ}	t| |	|j|d |tƒ}nt| ||tƒ t||ƒr`t	| |t
|ƒƒ |D ]}
t| ||
ƒ qdt| ||ƒ}| j d¡}| j dd¡}| j |||¡}|  |dk¡ || j ||d ¡d d … 7 }| j d|¡}| j || jj||¡}|  |dk¡ | j |¡d d … }t||ƒrD|  t
|ƒdk¡ || S || S d S )Nr   ©r   r   r=   rE   é   )r   r   r   r   r9   r   r3   r:   r   r@   r   rC   rI   r   r>   r   ÚEVP_CipherFinal_exr    rG   r4   ZEVP_CTRL_AEAD_GET_TAG)r   r   r.   rD   rA   rJ   r*   r   r   r   ÚadÚprocessed_datarB   rH   r,   Ztag_bufr/   r   r   r   Ú_encrypt¾   sH    	ù

   ÿrP   c                 C   sÀ  ddl m}m} t|ƒ|k r t‚t||ƒrD|d |… }	||d … }n|| d … }	|d | … }|d krˆt|ƒ}
t| |
|j||	|t	ƒ}nt
| ||t	ƒ t| ||	ƒ t||ƒr¼t| |t|ƒƒ |D ]}t| ||ƒ qÀt||ƒrR| j d¡}| j dt|ƒ¡}| j |¡}| j ||||t|ƒ¡}|dkr6|  ¡  t‚| j ||d ¡d d … }njt| ||ƒ}| j d¡}| j dd¡}| j |||¡}|| j ||d ¡d d … 7 }|dkr¼|  ¡  t‚|S )Nr   rK   r=   rE   r
   rL   )r   r   r   r   r   r   r   r9   r   r5   r:   r6   r@   rC   r   r>   r(   r   r?   rF   rG   rI   rM   )r   r   r.   rD   rA   rJ   r*   r   r   r/   r   rN   rB   rH   Zd_ptrr,   rO   r   r   r   Ú_decryptø   sV    	
      ÿ


rQ   )N)N) ÚtypingZcryptography.exceptionsr   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r   r   r   r   r   r	   ÚUnionr   r3   r5   Úbytesr   r#   r-   ÚOptionalr2   r9   r6   r:   r@   rC   rI   ÚListÚAnyrP   rQ   r   r   r   r   Ú<module>   sd   ÿýù4	 ùøA ùø