
    _fv(                    ~    d dl mZ d dlZd dlmZmZmZ d dlmZ d dl	m
Z
mZ ej        rd dlmZ  G d d          ZdS )	    )annotationsN)
InvalidTagUnsupportedAlgorithm_Reasons)ciphers)
algorithmsmodes)Backendc                  b    e Zd ZdZdZdZdd
ZddZddZddZ	ddZ
ddZedd            ZdS )_CipherContext   r   i?backendr
   	operationintreturnNonec                |   || _         || _        || _        || _        d | _        t          | j        t          j                  r| j        j        dz  | _	        nd| _	        | j         j
                                        }| j         j                            || j         j
        j                  }| j         j        }	 |t!          |          t!          |          f         }nJ# t"          $ r= t%          d                    |j        |r|j        n|          t*          j                  w xY w || j         ||          }|| j         j        j        k    rdd|j         d}	||	d|j         dz  }	|	d                    | j                                                   z  }	t%          |	t*          j                  t          |t2          j                  r%| j         j                            |j                  }
nt          |t2          j                  r%| j         j                            |j                  }
nt          |t2          j                  r%| j         j                            |j                   }
nPt          |tB          j"                  r%| j         j                            |j                   }
n| j         j        j        }
| j         j
        #                    ||| j         j        j        | j         j        j        | j         j        j        |          }| j         $                    |d	k               | j         j
        %                    |tM          |j'                            }| j         $                    |d	k               t          |t2          j(                  r| j         j
        )                    || j         j
        j*        tM          |
          | j         j        j                  }| j         $                    |d	k               |j+        r| j         j
        )                    || j         j
        j,        tM          |j+                  |j+                  }| j         $                    |d	k               |j+        | _        | j         j
        #                    || j         j        j        | j         j        j        | j         j                            |j'                  |
|          }| j         -                                }| j         j
        }|d	k    ri|j.        s&|d	         /                    |j0        |j1                  s-|j2        r5|d	         /                    |j3        |j4                  rtk          d
          | j         $                    |d	k    |           | j         j
        6                    |d	           || _7        d S )N   r   z6cipher {} in {} mode is not supported by this backend.zcipher  zin z mode z_is not supported by this backend (Your version of OpenSSL may be too old. Current version: {}.)r   z+In XTS mode duplicated keys are not allowederrors)8_backend_cipher_mode
_operation_tag
isinstancer   BlockCipherAlgorithm
block_size_block_size_bytes_libEVP_CIPHER_CTX_new_ffigcEVP_CIPHER_CTX_free_cipher_registrytypeKeyErrorr   formatnamer   UNSUPPORTED_CIPHERNULLopenssl_version_textr	   ModeWithInitializationVectorfrom_bufferinitialization_vectorModeWithTweaktweakModeWithNoncenoncer   ChaCha20EVP_CipherInit_exopenssl_assertEVP_CIPHER_CTX_set_key_lengthlenkeyGCMEVP_CIPHER_CTX_ctrlEVP_CTRL_AEAD_SET_IVLENtagEVP_CTRL_AEAD_SET_TAG_consume_errorsCRYPTOGRAPHY_IS_LIBRESSL_lib_reason_matchERR_LIB_EVPEVP_R_XTS_DUPLICATED_KEYSCryptography_HAS_PROVIDERSERR_LIB_PROVPROV_R_XTS_DUPLICATED_KEYS
ValueErrorEVP_CIPHER_CTX_set_padding_ctx)selfr   ciphermoder   ctxregistryadapter
evp_ciphermsgiv_nonceresr   libs                 ^/var/www/html/env/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/ciphers.py__init__z_CipherContext.__init__   sA   
#,0	dlG$@AA 	'%)\%<%AD""%&D"m 3355m ###7
 
 =1		tF||T$ZZ78GG 	 	 	&##)6Kd!<$ $ +  	 WT]FD99
+000*FK***C.TY....8fT]7799::;C 'sH,GHHHdE>?? 	/})55* HH e122 	/})55djAAHHe122 	/})55djAAHH
 344 	/})55flCCHH}).Hm 22M#M#M#
 
 	$$SAX...m >>VZ
 
 	$$SAX...dEI&& 	%-$88":H"'	 C M((222x#m(<<M&<MMH	  ,,SAX666 H	 m 22M#M#M**6:66
 
 ..00m !880  1I//OS%B   .  1I//$c&D   JKKK$$SAXf$=== 	55c1===			s   9$C AD%databytesc                    t          t          |          | j        z   dz
            }|                     ||          }t	          |d |                   S )Nr   )	bytearrayr9   r    update_intorY   )rK   rX   bufns       rV   updatez_CipherContext.update   sK    D		D$::Q>??T3''S!W~~    r]   c                <   t          |          }t          |          || j        z   dz
  k     r:t          d                    t          |          | j        z   dz
                      d}d}| j        j                            d          }| j        j                            |d          }| j        j                            |          }||k    r||z   }	||z   }
t          | j	        ||z
            }| j        j
                            | j        |	||
|          }|dk    rGt          | j        t          j                  r(| j                                         t          d          | j                            |dk               ||z  }||d         z  }||k    |S )Nr   z1buffer must be at least {} bytes for this payloadr   int *T)require_writablezeIn XTS mode you must supply at least a full block in the first update call. For AES this is 16 bytes.)r9   r    rH   r)   r   r#   newr/   min_MAX_CHUNK_SIZEr!   EVP_CipherUpdaterJ   r   r   r	   XTSr@   r7   )rK   rX   r]   total_data_lendata_processed	total_outoutlen
baseoutbuf	baseinbufoutbufinbufinlenrT   s                rV   r\   z_CipherContext.update_into   s   Ts88~(>>BCC &TT-C!Ca!GHH  
 	#''00]'33C$3OO
M&22488	..)+F.E,n~.MNNE-$55	665% C axxJtz59==x--/// C  
 ,,SAX666e#N"I# ..& r`   c                   | j         | j        k    r5t          | j        t          j                  r| j        t          d          | j        j	        
                    d| j                  }| j        j	        
                    d          }| j        j                            | j        ||          }|dk    r| j                                        }|s&t          | j        t          j                  rt"          | j        j        }| j                            |d                             |j        |j                  pI|j        o%|d                             |j        |j                  p|j        o|d         j        |j        k    |           t          d          t          | j        t          j                  r| j         | j        k    r| j        j	        
                    d| j                  }| j        j                            | j        | j        j        j        | j        |          }| j                            |dk               | j        j	                            |          d d          | _         | j        j        !                    | j                  }| j                            |dk               | j        j	                            |          d |d                  S )Nz4Authentication tag must be provided when decrypting.zunsigned char[]rb   r   r   zFThe length of the provided data is not a multiple of the block length.r   )"r   _DECRYPTr   r   r	   ModeWithAuthenticationTagr>   rH   r   r#   rd   r    r!   EVP_CipherFinal_exrJ   r@   r;   r   r7   rB   rC   'EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTHrE   rF   PROV_R_WRONG_FINAL_BLOCK_LENGTHCRYPTOGRAPHY_IS_BORINGSSLreason*CIPHER_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH_ENCRYPTr<   EVP_CTRL_AEAD_GET_TAGbufferr   EVP_CIPHER_CTX_reset)rK   r]   rl   rT   r   rU   tag_bufs          rV   finalizez_CipherContext.finalize   s   Ot},,4:u'FGG - F   m $$%68NOO#''00m 33DIsFKK!88]2244F !jUY?? !  -$CM((q	++O?  
 2 q	33(;  1 Fq	(EF # )   & $   tz59--	>4=00m(,,!4#9 G -$88	"8&	 C M((222*11'::111=DIm 55di@@$$SAX...}!((--kq	k::r`   r>   c                   t          |          }|| j        j        k     r,t          d                    | j        j                            || j        k    r't          d                    | j                            | j        j                            | j	        | j        j        j
        t          |          |          }| j                            |dk               || _        |                                 S )Nz.Authentication tag must be {} bytes or longer.z0Authentication tag cannot be more than {} bytes.r   )r9   r   _min_tag_lengthrH   r)   r    r   r!   r<   rJ   r?   r7   r   r   )rK   r>   tag_lenrT   s       rV   finalize_with_tagz _CipherContext.finalize_with_tag   s    c((TZ///@GGJ.   
 t---BII*   
 m 44It})?S3
 
 	$$SAX...	}}r`   c           	     B   | j         j                            d          }| j         j                            | j        | j         j        j        || j         j                            |          t          |                    }| j         	                    |dk               d S )Nrb   r   )
r   r#   rd   r!   rg   rJ   r,   r/   r9   r7   )rK   rX   rl   rT   s       rV   authenticate_additional_dataz+_CipherContext.authenticate_additional_data  s    #''00m 11IM#M**400II
 
 	$$SAX.....r`   typing.Optional[bytes]c                    | j         S )N)r   )rK   s    rV   r>   z_CipherContext.tag  s
    yr`   N)r   r
   r   r   r   r   )rX   rY   r   rY   )rX   rY   r]   rY   r   r   )r   rY   )r>   rY   r   rY   )rX   rY   r   r   )r   r   )__name__
__module____qualname__r{   rs   rf   rW   r_   r\   r   r   r   propertyr>    r`   rV   r   r      s        HHOw w w wr   
! ! ! !F>; >; >; >;@   *	/ 	/ 	/ 	/    X  r`   r   )
__future__r   typingcryptography.exceptionsr   r   r   cryptography.hazmat.primitivesr   &cryptography.hazmat.primitives.ciphersr   r	   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr
   r   r   r`   rV   <module>r      s   
 # " " " " "  N N N N N N N N N N 2 2 2 2 2 2 D D D D D D D D	 EDDDDDDH H H H H H H H H Hr`   