o
    ‘>Ïeð  ã                   @  sÔ   d dl mZ d dlZd dlmZ ejr(d dlmZ d dlm	Z	m
Z
 eje	e
f Zd4dd„Zd5dd„Zd5dd„ZdZd Zd6dd„Zd7dd„Zd8d$d%„Zd9d'd(„Zd:d*d+„Zd;d,d-„Zd<d.d/„Zd5d0d1„Zd5d2d3„ZdS )=é    )ÚannotationsN)Ú
InvalidTag)ÚBackend©ÚAESCCMÚAESGCMÚbackendr   ÚcipherÚ
_AEADTypesÚreturnÚboolc                 C  s   t |ƒ}| j |¡| jjkS ©N)Ú_evp_cipher_cipher_nameÚ_libÚEVP_get_cipherbynameÚ_ffiÚNULL)r   r	   Úcipher_name© r   új/var/www/html/humari/django-venv/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/aead.pyÚ_aead_cipher_supported   s   r   ÚnonceÚbytesÚdataÚassociated_dataúlist[bytes]Ú
tag_lengthÚintc                 C  ó   t | |||||ƒS r   )Ú_evp_cipher_encrypt©r   r	   r   r   r   r   r   r   r   Ú_encrypt   ó   ÿr!   c                 C  r   r   )Ú_evp_cipher_decryptr    r   r   r   Ú_decrypt(   r"   r$   é   c                 C  s`   ddl m}m} t| |ƒrdt| jƒd › d d¡S t| |ƒs"J ‚dt| jƒd › d d¡S )Nr   r   zaes-é   z-ccmÚasciiz-gcm)Ú+cryptography.hazmat.primitives.ciphers.aeadr   r   Ú
isinstanceÚlenÚ_keyÚencode)r	   r   r   r   r   r   r   9   s
   
r   r   c                 C  s"   |j  | ¡}| ||jjk¡ |S r   )r   r   Úopenssl_assertr   r   )r   r   Ú
evp_cipherr   r   r   Ú_evp_cipherF   s   r/   ÚkeyÚtagúbytes | NoneÚ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rV|d usOJ ‚t| ||ƒ n| d¡ro| 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   ÚEVP_CIPHER_CTX_newr   ÚgcÚEVP_CIPHER_CTX_freeÚEVP_CipherInit_exr   r   Ú_ENCRYPTr-   ÚEVP_CIPHER_CTX_ctrlÚEVP_CTRL_AEAD_SET_IVLENr*   Ú_DECRYPTÚ_evp_cipher_set_tagÚendswithÚEVP_CTRL_AEAD_SET_TAGÚfrom_buffer)r   r   r0   r   r1   r3   r4   r.   ÚctxÚresÚ	nonce_ptrÚkey_ptrr   r   r   Ú_evp_cipher_aead_setupL   sT   
	

úü
ü
úrE   ÚNonec                 C  s8   | j  |¡}| j || jjt|ƒ|¡}|  |dk¡ d S )Nr   )r   r@   r   r:   r?   r*   r-   )r   rA   r1   Útag_ptrrB   r   r   r   r=   ƒ   s
   ÿr=   Údata_lenc                 C  s:   | j  d¡}| j || j j|| j j|¡}|  |dk¡ d S ©Núint *r   )r   Únewr   ÚEVP_CipherUpdater   r-   )r   rA   rH   ÚintptrrB   r   r   r   Ú_evp_cipher_set_length‹   s
   ÿrN   c                 C  sF   | j  d¡}| j  |¡}| j || j j||t|ƒ¡}|  |dk¡ d S rI   )r   rK   r@   r   rL   r   r*   r-   )r   rA   r   ÚoutlenÚ
a_data_ptrrB   r   r   r   Ú_evp_cipher_process_aad“   s   ÿrQ   c                 C  sj   | j  d¡}| j  dt|ƒ¡}| j  |¡}| j ||||t|ƒ¡}|  |dk¡ | j  ||d ¡d d … S )NrJ   úunsigned char[]r   )r   rK   r*   r@   r   rL   r-   Úbuffer)r   rA   r   rO   ÚbufÚdata_ptrrB   r   r   r   Ú_evp_cipher_process_dataž   s   rV   c                 C  s
  ddl m} t|ƒ}t| ||j|d |tƒ}t||ƒr"t| |t|ƒƒ |D ]}	t	| ||	ƒ q$t
| ||ƒ}
| j d¡}| j dd¡}| j |||¡}|  |dk¡ |
| j ||d ¡d d … 7 }
| j d|¡}| j || jj||¡}|  |dk¡ | j |¡d d … }|
| S )Nr   ©r   rJ   rR   é   )r(   r   r   rE   r+   r9   r)   rN   r*   rQ   rV   r   rK   r   ÚEVP_CipherFinal_exr-   rS   r:   ÚEVP_CTRL_AEAD_GET_TAG)r   r	   r   r   r   r   r   r   rA   ÚadÚprocessed_datarO   rT   rB   Útag_bufr1   r   r   r   r   §   s8   ù
ÿr   c                 C  sp  ddl m} t|ƒ|k rt‚|| d … }|d | … }t|ƒ}t| ||j|||tƒ}	t||ƒr8t	| |	t|ƒƒ |D ]}
t
| |	|
ƒ q:t||ƒr‚| j d¡}| j dt|ƒ¡}| j |¡}| j |	|||t|ƒ¡}|dkrs|  ¡  t‚| j ||d ¡d d … }|S t| |	|ƒ}| j d¡}| j dd¡}| j |	||¡}|| j ||d ¡d d … 7 }|dkr¶|  ¡  t‚|S )Nr   rW   rJ   rR   r%   rX   )r(   r   r*   r   r   rE   r+   r<   r)   rN   rQ   r   rK   r@   r   rL   Ú_consume_errorsrS   rV   rY   )r   r	   r   r   r   r   r   r1   r   rA   r[   rO   rT   Úd_ptrrB   r\   r   r   r   r#   ×   sL   ù

ör#   )r   r   r	   r
   r   r   )r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   )r	   r
   r   r   )r   r   r   r   )r   r   r   r   r0   r   r   r   r1   r2   r3   r   r4   r   )r1   r   r   rF   )r   r   rH   r   r   rF   )r   r   r   r   r   rF   )r   r   r   r   r   r   )Ú
__future__r   ÚtypingÚcryptography.exceptionsr   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.backendr   r(   r   r   ÚUnionr
   r   r!   r$   r9   r<   r   r/   rE   r=   rN   rQ   rV   r   r#   r   r   r   r   Ú<module>   s*   






7



	0