
    )Jf                        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d(dZd)dZd)dZdZd Zd*dZd+dZd,dZd-d!Zd.d#Zd/d$Zd0d%Zd)d&Zd)d'ZdS )1    )annotationsN)
InvalidTag)BackendAESCCMAESGCMbackendr   cipher
_AEADTypesreturnboolc                p    t          |          }| j                            |          | j        j        k    S N)_evp_cipher_cipher_name_libEVP_get_cipherbyname_ffiNULL)r	   r
   cipher_names      l/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/aead.py_aead_cipher_supportedr      s/    )&11K<,,[99W\=NNN    noncebytesdataassociated_datalist[bytes]
tag_lengthintc                *    t          | |||||          S r   )_evp_cipher_encryptr	   r
   r   r   r   r   s         r   _encryptr#      #     oz  r   c                *    t          | |||||          S r   )_evp_cipher_decryptr"   s         r   _decryptr'   (   r$   r      c                   ddl m}m} t          | |          r.dt	          | j                  dz   d                    d          S t          | |          sJ dt	          | j                  dz   d                    d          S )Nr   r   zaes-   z-ccmasciiz-gcm)+cryptography.hazmat.primitives.ciphers.aeadr   r   
isinstancelen_keyencode)r
   r   r   s      r   r   r   9   s           
 &&!! A0c&+&&*00077@@@&&)))))0c&+&&*00077@@@r   r   c                    |j                             |           }|                    ||j        j        k               |S r   )r   r   openssl_assertr   r   )r   r	   
evp_ciphers      r   _evp_cipherr4   F   s;    22;??J:)::;;;r   keytagbytes | Nonetag_len	operationc                T   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|J t          | ||           n_|                    d          rJ| j                            || j        j        || j        j                  }	| 
                    |	dk               | j                            |          }
| j                            |          }| j                            || j        j        | j        j        ||
t          |t          k                        }	| 
                    |	dk               |S )Nr   s   -ccm)r4   r   EVP_CIPHER_CTX_newr   gcEVP_CIPHER_CTX_freeEVP_CipherInit_exr   r   _ENCRYPTr2   EVP_CIPHER_CTX_ctrlEVP_CTRL_AEAD_SET_IVLENr.   _DECRYPT_evp_cipher_set_tagendswithEVP_CTRL_AEAD_SET_TAGfrom_buffer)r	   r   r5   r   r6   r8   r9   r3   ctxres	nonce_ptrkey_ptrs               r   _evp_cipher_aead_setuprK   L   s    ['22J
,
)
)
+
+C
,//#w|?
@
@C
,
(
(I!"" C 3!8$$$
,
*
*,E

	 C 3!8$$$HGS#....			g	&	& )l..L.L	
 
 	sax(((((//Il&&s++G
,
(
(I!"" C 3!8$$$Jr   Nonec                    | j                             |          }| j                            || j        j        t          |          |          }|                     |dk               d S )Nr   )r   rF   r   r@   rE   r.   r2   )r	   rG   r6   tag_ptrrH   s        r   rC   rC      sb    l&&s++G
,
*
*W\/S7 C 3!8$$$$$r   data_lenc                    | j                             d          }| j                            || j         j        || j         j        |          }|                     |dk               d S Nint *r   )r   newr   EVP_CipherUpdater   r2   )r	   rG   rO   intptrrH   s        r   _evp_cipher_set_lengthrV      sc    \g&&F
,
'
'W\(98 C 3!8$$$$$r   c           	     
   | j                             d          }| j                             |          }| j                            || j         j        ||t          |                    }|                     |dk               d S rQ   )r   rS   rF   r   rT   r   r.   r2   )r	   rG   r   outlen
a_data_ptrrH   s         r   _evp_cipher_process_aadrZ      s}     \g&&F))/::J
,
'
'W\
C4H4H C 3!8$$$$$r   c           	        | j                             d          }| j                             dt          |                    }| j                             |          }| j                            ||||t          |                    }|                     |dk               | j                             ||d                   d d          S )NrR   unsigned char[]r   )r   rS   r.   rF   r   rT   r2   buffer)r	   rG   r   rX   bufdata_ptrrH   s          r   _evp_cipher_process_datar`      s    \g&&F
,

,c$ii
8
8C|''--H
,
'
'S&(CII
N
NC3!8$$$<sF1I..qqq11r   c           	     D   ddl m} t          |          }t          | ||j        |d |t
                    }t          ||          rt          | |t          |                     |D ]}	t          | ||	           t          | ||          }
| j                            d          }| j                            dd          }| j                            |||          }|                     |dk               |
| j                            ||d                   d d          z  }
| j                            d|          }| j                            || j        j        ||          }|                     |dk               | j                            |          d d          }|
|z   S )Nr   r   rR   r\      )r,   r   r   rK   r/   r?   r-   rV   r.   rZ   r`   r   rS   r   EVP_CipherFinal_exr2   r]   r@   EVP_CTRL_AEAD_GET_TAG)r	   r
   r   r   r   r   r   r   rG   adprocessed_datarX   r^   rH   tag_bufr6   s                   r   r!   r!      s    CBBBBB)&11K
  C &&!! 8wSYY777 2 2b1111-gsDAAN\g&&F ,

,b
1
1C
,
)
)#sF
;
;C3!8$$$gl))#vay99!!!<<Nl0*==G
,
*
*W\/W C 3!8$$$
,

g
&
&qqq
)CCr   c           	     x   ddl m} t          |          |k     rt          || d          }|d |          }t	          |          }t          | ||j        |||t                    }	t          ||          rt          | |	t          |                     |D ]}
t          | |	|
           t          ||          r| j                            d          }| j                            dt          |                    }| j                            |          }| j                            |	|||t          |                    }|dk    r|                                  t          | j                            ||d                   d d          }nt%          | |	|          }| j                            d          }| j                            dd          }| j                            |	||          }|| j                            ||d                   d d          z  }|dk    r|                                  t          |S )Nr   rb   rR   r\   r(   rc   )r,   r   r.   r   r   rK   r/   rB   r-   rV   rZ   r   rS   rF   r   rT   _consume_errorsr]   r`   rd   )r	   r
   r   r   r   r   r   r6   r   rG   rf   rX   r^   d_ptrrH   rg   s                   r   r&   r&      s>    CBBBBB
4yy:

{||
C*D)&11K
  C &&!! 8wSYY777 2 2b1111 &&!! !!'**l0#d))<<((..l++CfeSYYOO!88##%%% ,,S&)<<QQQ?1'3EE!!'**l0"55l--c3??',--c6!9==aaa@@!88##%%%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   r5   r   r   r   r6   r7   r8   r   r9   r   )r6   r   r   rL   )r	   r   rO   r   r   rL   )r	   r   r   r   r   rL   )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'   r?   rB   r   r4   rK   rC   rV   rZ   r`   r!   r&    r   r   <module>rs      s  
 # " " " " "  . . . . . .	 .DDDDDD       
 ffn-JO O O O
 
 
 

 
 
 
 
A 
A 
A 
A   4 4 4 4n% % % %% % % %% % % %2 2 2 2-  -  -  - `9 9 9 9 9 9r   