
    _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d3dZd3dZd4dZ	 d5d6dZ	 d5d6dZ	 d5d7dZd8dZd6dZd6d Zd!Zd Zd9d"Zd:d$Zd4d%Zd;d)Zd<d+Zd=d,Z d>d.Z!d?d/Z"d@d0Z#	 d5d6d1Z$	 d5d6d2Z%dS )A    )annotationsN)
InvalidTag)BackendAESCCMAESGCMAESOCB3AESSIVChaCha20Poly1305backendr   cipher
_AEADTypesreturnboolc                F    ddl m} | j        j        o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r   r   r   s      [/var/www/html/env/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/aead.py_is_evp_aead_supported_cipherr      s;     MLLLLL<1 j 7 7     c                   t          | |          rdS t          |          }| j        r|| j        vrdS |                    d          r| j        j        dk    S | j                            |          | j        j	        k    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5 t-f55  	[8J%J%J5 (( 	<CqHH 11+>><$%r   keybytesc                f    t          | |          rt          | ||          S t          | ||          S N)r   _evp_aead_create_ctx_evp_cipher_create_ctx)r   r   r(   s      r   _aead_create_ctxr.   ;   s:    
 %Wf55 <#GVS999%gvs;;;r   noncedataassociated_datatyping.List[bytes]
tag_lengthintctx
typing.Anyc           	     v    t          | |          rt          | ||||||          S t          | ||||||          S r+   )r   _evp_aead_encrypt_evp_cipher_encryptr   r   r/   r0   r1   r3   r5   s          r   _encryptr;   F   Z     %Wf55 
 VUD/:s
 
 	
 #VUD/:s
 
 	
r   c           	     v    t          | |          rt          | ||||||          S t          | ||||||          S r+   )r   _evp_aead_decrypt_evp_cipher_decryptr:   s          r   _decryptr@   Y   r<   r   tag_lentyping.Optional[int]c                f   t          | |          }|J | j                            |          }|| j        j        n|}| j                            ||t          |          |          }|                     || j        j        k               | 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(   rA   aead_cipherkey_ptrr5   s          r   r,   r,   l   s     'w77K"""l&&s++G ? 	00 
 ,
4
4Wc#hh C 3',"33444
,//#w|=
>
>CJr   c                d    ddl m} t          ||          sJ | j                                        S )Nr   r   )r   r   r   r   EVP_aead_chacha20_poly1305r   s      r   rD   rD      sM         
 f./////<22444r   c                   |J t          | |          }|J | j                            d          }t          |          | j                            |          z   }	| j                            d|	          }
| j                            |          }| j                            |          }d                    |          }| j                            |          }| j                            ||
||	|t          |          |t          |          |t          |          
  
        }| 	                    |dk               | j        
                    |
|d                   d d          }|S )Nsize_t *	uint8_t[]r   r   r   )rD   r$   newrH   r   EVP_AEAD_max_overheadrE   joinEVP_AEAD_CTX_sealrI   buffer)r   r   r/   r0   r1   r3   r5   rL   out_lenmax_out_lenout_bufdata_ptr	nonce_ptraadaad_ptrresencrypted_datas                    r   r8   r8      sQ    ???&w77K"""lz**G d))gl@@MMMKl{K88G|''--H((//I
((?
#
#Cl&&s++G
,
(
(E

D		C C 3!8$$$\(('!*==aaa@Nr   c                   t          |          |k     rt          |J | j                            d          }t          |          }| j                            d|          }	| j                            |          }
| j                            |          }d                    |          }| j                            |          }| j                            ||	|||t          |          |
t          |          |t          |          
  
        }|dk    r|                                  t          | j        	                    |	|d                   d d          }|S )NrQ   rR   r   r   )
rH   r   r$   rS   rE   rU   r   EVP_AEAD_CTX_open_consume_errorsrW   )r   r   r/   r0   r1   r3   r5   rX   rY   rZ   r[   r\   r]   r^   r_   decrypted_datas                   r   r>   r>      s?    4yy:???lz**Gd))Kl{K88G|''--H((//I
((?
#
#Cl&&s++G
,
(
(E

D		C C axx!!!\(('!*==aaa@Nr   r   c                <   ddl m}m}m}m}m} t          | |          rdS t          | |          r.dt          | j                  dz   d	                    d          S t          | |          r.dt          | j                  dz   d	                    d          S t          | |          r1dt          | j                  dz  d	z   d
	                    d          S t          | |          sJ dt          | j                  dz   d	                    d          S )Nr   r   s   chacha20-poly1305zaes-   z-ccmasciiz-ocb   z-sivz-gcm)
r   r   r   r	   r
   r   r   rH   _keyencode)r   r   r   r	   r
   r   s         r   r   r      sp                 &*++ 
A##	FF	#	# A0c&+&&*00077@@@	FG	$	$ A0c&+&&*00077@@@	FF	#	# A5c&+&&*a/555<<WEEE&&)))))0c&+&&*00077@@@r   r&   c                   |                      d          ry|j                            |j        j        | |j        j                  }|                    ||j        j        k               |j                            ||j        j                  }n=|j                            |           }|                    ||j        j        k               |S )Nr   )	r!   r   EVP_CIPHER_fetchr$   r%   rI   rJ   EVP_CIPHER_freer#   )r&   r   
evp_ciphers      r   _evp_cipherro      s    G$$ 
@\22LL
 


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

\66{CC
zW\->>???r   c                   | j                                         }|                     || j        j        k               | j                            || j         j                  }t          |          }t          ||           }| j        	                    |          }| j         
                    ||| j        j        || j        j        d          }|                     |dk               |S Nr   )r   EVP_CIPHER_CTX_newrI   r$   r%   rJ   EVP_CIPHER_CTX_freer   ro   rE   EVP_CipherInit_ex)r   r   r(   r5   r&   rn   rM   r_   s           r   r-   r-     s    
 ,
)
)
+
+C3',"33444
,//#w|?
@
@C)&11K['22Jl&&s++G
,
(
(	 C 3!8$$$Jr   tagtyping.Optional[bytes]	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)ro   r   rr   r$   rJ   rs   rt   r%   r4   _ENCRYPTrI   EVP_CIPHER_CTX_ctrlEVP_CTRL_AEAD_SET_IVLENrH   _DECRYPT_evp_cipher_set_tagr!   EVP_CTRL_AEAD_SET_TAGrE   )r   r&   r(   r/   ru   rA   rw   rn   r5   r_   r\   rM   s               r   _evp_cipher_aead_setupr   "  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 rq   )r$   rE   r   rz   r~   rH   rI   )r   r5   ru   tag_ptrr_   s        r   r}   r}   Y  sb    l&&s++G
,
*
*W\/S7 C 3!8$$$$$r   c                   | j                             |          }| j                            || j         j        | j         j        | j         j        |t          |t          k                        }|                     |dk               d S rq   )r$   rE   r   rt   r%   r4   ry   rI   )r   r5   r/   rw   r\   r_   s         r   _evp_cipher_set_nonce_operationr   a  s~     ((//I
,
(
(I!"" C 3!8$$$$$r   data_lenc                    | j                             d          }| j                            || j         j        || j         j        |          }|                     |dk               d S Nint *r   )r$   rS   r   EVP_CipherUpdater%   rI   )r   r5   r   intptrr_   s        r   _evp_cipher_set_lengthr   p  sc    \g&&F
,
'
'W\(98 C 3!8$$$$$r   c           	     
   | j                             d          }| j                             |          }| j                            || j         j        ||t          |                    }|                     |dk               d S r   )r$   rS   rE   r   r   r%   rH   rI   )r   r5   r1   outlen
a_data_ptrr_   s         r   _evp_cipher_process_aadr   x  s}     \g&&F))/::J
,
'
'W\
C4H4H C 3!8$$$$$r   c           	        | j                             d          }| j                             dt          |                    }| j                             |          }| j                            ||||t          |                    }|dk    r|                                  t          | j                             ||d                   d d          S )Nr   unsigned char[]r   )	r$   rS   rH   rE   r   r   rc   r   rW   )r   r5   r0   r   bufr[   r_   s          r   _evp_cipher_process_datar     s    \g&&F
,

,c$ii
8
8C|''--H
,
'
'S&(CII
N
NC
axx!!!<sF1I..qqq11r   c           	        ddl m}m} |/t          |          }	t	          | |	|j        |d |t                    }nt          | ||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          }t          ||          r+|                     t          |          dk               ||z   S ||z   S )Nr   r   r
   r   r      )r   r   r
   r   r   ri   ry   r   r   r   rH   r   r   r$   rS   r   EVP_CipherFinal_exrI   rW   rz   EVP_CTRL_AEAD_GET_TAG)r   r   r/   r0   r1   r3   r5   r   r
   r&   adprocessed_datar   r   r_   tag_bufru   s                    r   r9   r9     s    KJJJJJJJ
{-f55$K
 
 	(eXFFF
 &&!! 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&&!! $ 	s3xx2~...^####r   c           	        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                            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   r   r   r   r   r   )r   r   r
   rH   r   r   r   r   ri   r|   r   r}   r   r   r$   rS   rE   r   r   rc   rW   r   r   )r   r   r/   r0   r1   r3   r5   r   r
   ru   r&   r   r   r   d_ptrr_   r   s                    r   r?   r?     s    KJJJJJJJ
4yy:&&!! " ;J;JKK J;<< Lj[L!
{-f55$K
 
 	(eXFFFGS#...
 &&!! 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)   r0   r)   r1   r2   r3   r4   r5   r6   r   r)   )r   r   r   r   r(   r)   rA   rB   )r   r   r   r   )r   r   r   r)   )r&   r)   r   r   )r   r   r&   r)   r(   r)   r/   r)   ru   rv   rA   r4   rw   r4   )ru   r)   r   r   )r/   r)   rw   r4   r   r   )r   r   r   r4   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.   r;   r@   r,   rD   r8   r>   ry   r|   r   ro   r-   r   r}   r   r   r   r   r9   r?    r   r   <module>r      s  
 # " " " " "  . . . . . .	 DDDDDD              )99J
      &< < < <$ 
 
 
 
 
4 
 
 
 
 
. %)	    ,5 5 5 5& & & &R) ) ) )X A A A A,       .4 4 4 4n% % % %% % % %% % % %% % % %	2 	2 	2 	2& 8$ 8$ 8$ 8$ 8$D E E E E E E Er   