o
    C©Zhð  ã                   @  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   ú`/var/www/html/lang_env/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   ZEVP_CIPHER_CTX_newr   ÚgcZEVP_CIPHER_CTX_freeZEVP_CipherInit_exr   r   Ú_ENCRYPTr-   ÚEVP_CIPHER_CTX_ctrlZ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ÚresZ	nonce_ptrZkey_ptrr   r   r   Ú_evp_cipher_aead_setupL   sT   
	

úü
ü
úr?   ÚNonec                 C  s8   | j  |¡}| j || jjt|ƒ|¡}|  |dk¡ d S )Nr   )r   r<   r   r7   r;   r*   r-   )r   r=   r1   Ztag_ptrr>   r   r   r   r9   ƒ   s
   ÿr9   Údata_lenc                 C  s:   | j  d¡}| j || j j|| j j|¡}|  |dk¡ d S ©Núint *r   )r   Únewr   ÚEVP_CipherUpdater   r-   )r   r=   rA   Zintptrr>   r   r   r   Ú_evp_cipher_set_length‹   s
   ÿrF   c                 C  sF   | j  d¡}| j  |¡}| j || j j||t|ƒ¡}|  |dk¡ d S rB   )r   rD   r<   r   rE   r   r*   r-   )r   r=   r   ÚoutlenZ
a_data_ptrr>   r   r   r   Ú_evp_cipher_process_aad“   s   ÿrH   c                 C  sj   | j  d¡}| j  dt|ƒ¡}| j  |¡}| j ||||t|ƒ¡}|  |dk¡ | j  ||d ¡d d … S )NrC   úunsigned char[]r   )r   rD   r*   r<   r   rE   r-   Úbuffer)r   r=   r   rG   ÚbufZdata_ptrr>   r   r   r   Ú_evp_cipher_process_dataž   s   rL   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   rC   rI   é   )r(   r   r   r?   r+   r6   r)   rF   r*   rH   rL   r   rD   r   ÚEVP_CipherFinal_exr-   rJ   r7   ZEVP_CTRL_AEAD_GET_TAG)r   r	   r   r   r   r   r   r   r=   ÚadÚprocessed_datarG   rK   r>   Z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   rM   rC   rI   r%   rN   )r(   r   r*   r   r   r?   r+   r8   r)   rF   rH   r   rD   r<   r   rE   Z_consume_errorsrJ   rL   rO   )r   r	   r   r   r   r   r   r1   r   r=   rP   rG   rK   Zd_ptrr>   rQ   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   r@   )r   r   rA   r   r   r@   )r   r   r   r   r   r@   )r   r   r   r   r   r   )Ú
__future__r   ÚtypingZcryptography.exceptionsr   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r(   r   r   ÚUnionr
   r   r!   r$   r6   r8   r   r/   r?   r9   rF   rH   rL   r   r#   r   r   r   r   Ú<module>   s*   






7



	0