
    +h_>                    f   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
mZmZmZ ej                  e	e
eeef   Z	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
Z	 d	 	 	 	 	 	 	 dd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 d&dZ!	 	 	 	 	 	 d'dZ"d(dZ#	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ$	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ%y))    )annotationsN)
InvalidTag)BackendAESCCMAESGCMAESOCB3AESSIVChaCha20Poly1305c                V    ddl m} | j                  j                  xr t	        ||      S )zz
    Checks whether the given cipher is supported through
    EVP_AEAD rather than the normal OpenSSL EVP_CIPHER API.
    r   r   )+cryptography.hazmat.primitives.ciphers.aeadr   _libCryptography_HAS_EVP_AEAD
isinstancebackendcipherr   s      \/var/www/html/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/aead.py_is_evp_aead_supported_cipherr      s,     M<<11 j 7     c                    t        | |      ryt        |      }| j                  r|| j                  vry|j	                  d      r| j
                  j                  dk(  S | j
                  j                  |      | j                  j                  k7  S )NTF   -siv   )
r   _evp_cipher_cipher_name_fips_enabled
_fips_aeadendswithr   #CRYPTOGRAPHY_OPENSSL_300_OR_GREATEREVP_get_cipherbyname_ffiNULL)r   r   cipher_names      r   _aead_cipher_supportedr$   (   s    $Wf5-f5  [8J8J%J (<<CCqHH 11+><<$$%r   c                N    t        | |      rt        | ||      S t        | ||      S N)r   _evp_aead_create_ctx_evp_cipher_create_ctx)r   r   keys      r   _aead_create_ctxr*   ;   s,    
 %Wf5#GVS99%gvs;;r   c           	     ^    t        | |      rt        | ||||||      S t        | ||||||      S r&   )r   _evp_aead_encrypt_evp_cipher_encryptr   r   noncedataassociated_data
tag_lengthctxs          r   _encryptr4   F   H     %Wf5 VUD/:s
 	
 #VUD/:s
 	
r   c           	     ^    t        | |      rt        | ||||||      S t        | ||||||      S r&   )r   _evp_aead_decrypt_evp_cipher_decryptr.   s          r   _decryptr9   Y   r5   r   c                   t        | |      }|J | j                  j                  |      }|| j                  j                  n|}| j                  j                  ||t        |      |      }| j                  || j                  j                  k7         | j                  j                  || j                  j                        }|S r&   )_evp_aead_get_cipherr!   from_bufferr   EVP_AEAD_DEFAULT_TAG_LENGTHCryptography_EVP_AEAD_CTX_newlenopenssl_assertr"   gcEVP_AEAD_CTX_free)r   r   r)   tag_lenaead_cipherkey_ptrr3   s          r   r'   r'   l   s     'w7K"""ll&&s+G ? 	00 
 ,,
4
4Wc#hC 3',,"3"334
,,//#w||==
>CJr   c                ^    ddl m} t        ||      sJ | j                  j	                         S )Nr   r   )r   r   r   r   EVP_aead_chacha20_poly1305r   s      r   r;   r;      s-    
 f.///<<2244r   c                   |J t        | |      }|J | j                  j                  d      }t        |      | j                  j                  |      z   }	| j                  j                  d|	      }
| j                  j                  |      }| j                  j                  |      }dj                  |      }| j                  j                  |      }| j                  j                  ||
||	|t        |      |t        |      |t        |      
      }| j                  |dk(         | j                  j                  |
|d         d d  }|S )Nsize_t *	uint8_t[]r   r   r   )r;   r!   newr?   r   EVP_AEAD_max_overheadr<   joinEVP_AEAD_CTX_sealr@   buffer)r   r   r/   r0   r1   r2   r3   rD   out_lenmax_out_lenout_bufdata_ptr	nonce_ptraadaad_ptrresencrypted_datas                    r   r,   r,      s0    ??&w7K"""llz*G d)gll@@MMKll{K8G||''-H((/I
((?
#Cll&&s+G
,,
(
(E
D	CC 3!8$\\(('!*=a@Nr   c                v   t        |      |k  rt        |J | j                  j                  d      }t        |      }| j                  j                  d|      }	| j                  j	                  |      }
| j                  j	                  |      }dj                  |      }| j                  j	                  |      }| j                  j                  ||	|||t        |      |
t        |      |t        |      
      }|dk(  r| j                          t        | j                  j                  |	|d         d d  }|S )NrI   rJ   r   r   )
r?   r   r!   rK   r<   rM   r   EVP_AEAD_CTX_open_consume_errorsrO   )r   r   r/   r0   r1   r2   r3   rP   rQ   rR   rS   rT   rU   rV   rW   decrypted_datas                   r   r7   r7      s    4y:??llz*Gd)Kll{K8G||''-H((/I
((?
#Cll&&s+G
,,
(
(E
D	CC ax!\\(('!*=a@Nr   r   c                   ddl m}m}m}m}m} t        | |      ryt        | |      r+dt        | j                        dz   dj                  d      S t        | |      r+dt        | j                        dz   dj                  d      S t        | |      r.dt        | j                        dz  d	z   d
j                  d      S t        | |      sJ dt        | j                        dz   dj                  d      S )Nr   r   s   chacha20-poly1305zaes-   z-ccmasciiz-ocb   z-sivz-gcm)
r   r   r   r	   r
   r   r   r?   _keyencode)r   r   r   r	   r
   r   s         r   r   r      s      &*+#	FF	#c&++&*+4077@@	FG	$c&++&*+4077@@	FF	#c&++&*a/05<<WEE&&)))c&++&*+4077@@r   c                   | j                  d      r|j                  j                  |j                  j                  | |j                  j                        }|j                  ||j                  j                  k7         |j                  j                  ||j                  j                        }|S |j                  j                  |       }|j                  ||j                  j                  k7         |S )Nr   )	r   r   EVP_CIPHER_fetchr!   r"   r@   rA   EVP_CIPHER_freer    )r#   r   
evp_ciphers      r   _evp_cipherrg      s    G$\\22LLLL


 	zW\\->->>?\\__Z1M1MN

  \\66{C
zW\\->->>?r   c                   | j                   j                         }| j                  || j                  j                  k7         | j                  j                  || j                   j                        }t        |      }t        ||       }| j                  j                  |      }| j                   j                  ||| j                  j                  || j                  j                  d      }| j                  |dk7         |S Nr   )r   EVP_CIPHER_CTX_newr@   r!   r"   rA   EVP_CIPHER_CTX_freer   rg   r<   EVP_CipherInit_ex)r   r   r)   r3   r#   rf   rE   rW   s           r   r(   r(     s    
 ,,
)
)
+C3',,"3"334
,,//#w||??
@C)&1K['2Jll&&s+G
,,
(
(	C 3!8$Jr   c                   t        ||       }| j                  j                         }| j                  j	                  || j                  j
                        }| j                  j                  ||| j                  j                  | j                  j                  | j                  j                  t        |t        k(              }	| j                  |	dk7         | j                  j                  || j                  j                  t        |      | j                  j                        }	| j                  |	dk7         |t        k(  r|J t        | ||       nk|j!                  d      rZ| j                  j                  || j                  j"                  || j                  j                        }	| j                  |	dk7         | j                  j%                  |      }
| j                  j%                  |      }| j                  j                  || j                  j                  | j                  j                  ||
t        |t        k(              }	| j                  |	dk7         |S )Nr   s   -ccm)rg   r   rj   r!   rA   rk   rl   r"   int_ENCRYPTr@   EVP_CIPHER_CTX_ctrlEVP_CTRL_AEAD_SET_IVLENr?   _DECRYPT_evp_cipher_set_tagr   EVP_CTRL_AEAD_SET_TAGr<   )r   r#   r)   r/   tagrC   	operationrf   r3   rW   rT   rE   s               r   _evp_cipher_aead_setuprw   "  s    ['2J
,,
)
)
+C
,,//#w||??
@C
,,
(
(I!"C 3!8$
,,
*
*,,E
	C 3!8$HGS#.			g	&ll..LL..LL	
 	sax(((/Ill&&s+G
,,
(
(I!"C 3!8$Jr   c                    | j                   j                  |      }| j                  j                  || j                  j                  t        |      |      }| j                  |dk7         y ri   )r!   r<   r   rp   rt   r?   r@   )r   r3   ru   tag_ptrrW   s        r   rs   rs   Y  sU    ll&&s+G
,,
*
*W\\//S7C 3!8$r   c                :   | j                   j                  |      }| j                  j                  || j                   j                  | j                   j                  | j                   j                  |t        |t        k(              }| j                  |dk7         y ri   )r!   r<   r   rl   r"   rn   ro   r@   )r   r3   r/   rv   rT   rW   s         r   _evp_cipher_set_nonce_operationr{   a  sz     ((/I
,,
(
(I!"C 3!8$r   c                    | j                   j                  d      }| j                  j                  || j                   j                  || j                   j                  |      }| j                  |dk7         y Nint *r   )r!   rK   r   EVP_CipherUpdater"   r@   )r   r3   data_lenintptrrW   s        r   _evp_cipher_set_lengthr   p  s]    \\g&F
,,
'
'W\\(9(98C 3!8$r   c           	        | j                   j                  d      }| j                   j                  |      }| j                  j	                  || j                   j
                  ||t        |            }| j                  |dk7         y r}   )r!   rK   r<   r   r   r"   r?   r@   )r   r3   r1   outlen
a_data_ptrrW   s         r   _evp_cipher_process_aadr   x  sn     \\g&F))/:J
,,
'
'W\\
C4HC 3!8$r   c           	        | j                   j                  d      }| j                   j                  dt        |            }| j                   j                  |      }| j                  j                  ||||t        |            }|dk(  r| j                          t        | j                   j                  ||d         d d  S )Nr~   unsigned char[]r   )	r!   rK   r?   r<   r   r   r[   r   rO   )r   r3   r0   r   bufrS   rW   s          r   _evp_cipher_process_datar     s    \\g&F
,,

,c$i
8C||''-H
,,
'
'S&(CI
NC
ax!<<sF1I.q11r   c           	        ddl m}m} |+t        |      }	t	        | |	|j
                  |d |t              }nt        | ||t               t        ||      rt        | |t        |             |D ]  }
t        | ||
        t        | ||      }| j                  j                  d      }| j                  j                  dd      }| j                  j!                  |||      }| j#                  |dk7         || j                  j%                  ||d         d d  z  }| j                  j                  d|      }| j                  j'                  || j                  j(                  ||      }| j#                  |dk7         | j                  j%                  |      d d  }t        ||      r"| j#                  t        |      dk(         ||z   S ||z   S )Nr   r   r
   r~   r      )r   r   r
   r   rw   ra   ro   r{   r   r   r?   r   r   r!   rK   r   EVP_CipherFinal_exr@   rO   rp   EVP_CTRL_AEAD_GET_TAG)r   r   r/   r0   r1   r2   r3   r   r
   r#   adprocessed_datar   r   rW   tag_bufru   s                    r   r-   r-     s    K
{-f5$KK
 	(eXF
 &&!wSY7 2b12-gsDAN\\g&F ,,

,b
1C
,,
)
)#sF
;C3!8$gll))#vay9!<<Nll0*=G
,,
*
*W\\//WC 3!8$
,,

g
&q
)C&&! 	s3x2~.^####r   c           	     f   ddl m}m} t        |      |k  rt        t        ||      r|d | }	||d  }n|| d  }	|d |  }|+t        |      }
t        | |
|j                  ||	|t              }nt        | ||t               t        | ||	       t        ||      rt        | |t        |             |D ]  }t        | ||        t        ||      r| j                  j                  d      }| j                  j                  dt        |            }| j                  j!                  |      }| j"                  j%                  ||||t        |            }|dk7  r| j'                          t        | j                  j)                  ||d         d d  }|S t+        | ||      }| j                  j                  d      }| j                  j                  dd      }| j"                  j-                  |||      }|| j                  j)                  ||d         d d  z  }|dk(  r| j'                          t        |S )Nr   r   r~   r   r   r   )r   r   r
   r?   r   r   r   rw   ra   rr   r{   rs   r   r   r!   rK   r<   r   r   r[   rO   r   r   )r   r   r/   r0   r1   r2   r3   r   r
   ru   r#   r   r   r   d_ptrrW   r   s                    r   r8   r8     s$    K
4y:&&! ;JJK J;< Lj[!
{-f5$KK
 	(eXFGS#.
 &&!wSY7 2b12 &&!!!'*ll0#d)<((.ll++CfeSYO!8##% ,,S&)<Q?  2'3E!!'*ll0"5ll--c3?',,--c6!9=a@@!8##%r   )r   r   r   
_AEADTypesreturnbool)r   r   r   r   r)   bytesr&   )r   r   r   r   r/   r   r0   r   r1   ztyping.List[bytes]r2   rn   r3   z
typing.Anyr   r   )r   r   r   r   r)   r   rC   ztyping.Optional[int])r   r   r   r   )r   r   r   r   )r#   r   r   r   )r   r   r#   r   r)   r   r/   r   ru   ztyping.Optional[bytes]rC   rn   rv   rn   )ru   r   r   None)r/   r   rv   rn   r   r   )r   r   r   rn   r   r   )r   r   r1   r   r   r   )r   r   r0   r   r   r   )&
__future__r   typingcryptography.exceptionsr   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr   r   r   r   r	   r
   r   Unionr   r   r$   r*   r4   r9   r'   r;   r,   r7   ro   rr   r   rg   r(   rw   rs   r{   r   r   r   r-   r8    r   r   <module>r      s  
 #  .	D  )99J
(	&<<< 
<$ 


 
 	

 (
 
 

 
4 


 
 	

 (
 
 

 
. %)	 
 "	,5&&& & 	&
 (& & 
& &R))) ) 	)
 () ) 
) )X A,  
.444 
4 	4
 
 4 4 4n%%%+.%	%%%%,1%	%	2& 8$8$8$ 8$ 	8$
 (8$ 8$ 
8$ 8$D EEE E 	E
 (E E 
E Er   