§
    hÝ[fq(  ã                  ó~   — 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        ¦  «        }
nÎt          |t2          j        ¦  «        r%| j         j                             |j        ¦  «        }
n�t          |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/piapp/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/ciphers.pyÚ__init__z_CipherContext.__init__   sA  € ØˆŒØˆŒØˆŒ
Ø#ˆŒØ"&ˆŒ	å�d”l¥GÔ$@ÑAÔAð 	'Ø%)¤\Ô%<ÀÑ%AˆDÔ"Ð"à%&ˆDÔ"àŒmÔ ×3Ò3Ñ5Ô5ˆØŒmÔ ×#Ò#Ø�”Ô#Ô7ñ
ô 
ˆð ”=Ô1ˆð		Ø�t F™|œ|­T°$©Z¬ZÐ7Ô8ˆGˆGøÝð 	ð 	ð 	Ý&ð#ß#)¢6Ø”K¨dÐ!< ¤ ¸ñ$ô $õ Ô+ñô ð ð	øøøð �W˜Tœ]¨F°DÑ9Ô9ˆ
Ø˜œÔ+Ô0Ò0Ð0Ø*˜FœKÐ*Ð*Ð*ˆCØÐØÐ.˜TœYÐ.Ð.Ð.Ñ.�Øð8çŠf�T”]×7Ò7Ñ9Ô9Ñ:Ô:ñ;ˆCõ ' s­HÔ,GÑHÔHÐHå�d�EÔ>Ñ?Ô?ð 	/Ø”}Ô)×5Ò5ØÔ*ñô ˆHˆHõ ˜�eÔ1Ñ2Ô2ð 	/Ø”}Ô)×5Ò5°d´jÑAÔAˆHˆHÝ˜�eÔ1Ñ2Ô2ð 	/Ø”}Ô)×5Ò5°d´jÑAÔAˆHˆHÝ˜¥
Ô 3Ñ4Ô4ð 	/Ø”}Ô)×5Ò5°f´lÑCÔCˆHˆHà”}Ô)Ô.ˆHàŒmÔ ×2Ò2ØØØŒMÔÔ#ØŒMÔÔ#ØŒMÔÔ#Øñ
ô 
ˆð 	Œ×$Ò$ S¨A¢XÑ.Ô.Ð.àŒmÔ ×>Ò>Ø•�V”Z‘”ñ
ô 
ˆð 	Œ×$Ò$ S¨A¢XÑ.Ô.Ð.Ý�d�EœIÑ&Ô&ð 	%Ø”-Ô$×8Ò8ØØ”Ô"Ô:Ý�H‘”Ø”Ô"Ô'ñ	ô ˆCð ŒM×(Ò(¨°ªÑ2Ô2Ð2ØŒxÐ#Ø”mÔ(×<Ò<ØØ”MÔ&Ô<Ý˜œ‘M”MØ”Hñ	ô �ð ”×,Ò,¨S°AªXÑ6Ô6Ð6Ø œH�”	ð ŒmÔ ×2Ò2ØØŒMÔÔ#ØŒMÔÔ#ØŒMÔ×*Ò*¨6¬:Ñ6Ô6ØØñ
ô 
ˆð ”×.Ò.Ñ0Ô0ˆØŒmÔ ˆØ�!Š8ˆ8àÔ0ð ð ˜1”I×/Ò/Ø”O SÔ%Bñô ð ð Ô.ð ð ˜1”I×/Ò/ØÔ$ cÔ&Dñô ð õ ÐJÑKÔKÐKàŒ×$Ò$ S¨A¢X°fÐ$Ñ=Ô=Ð=ð 	ŒÔ×5Ò5°c¸1Ñ=Ô=Ð=ØˆŒ	ˆ	ˆ	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Ñ>Ñ?Ô?ˆØ×Ò˜T 3Ñ'Ô'ˆÝ�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™œˆÝˆs‰8Œ8�~¨Ô(>Ñ>ÀÑBÒCÐCÝØC×JÒJÝ˜‘I”I Ô 6Ñ6¸Ñ:ñô ñô ð ð ˆØˆ	Ø”Ô#×'Ò'¨Ñ0Ô0ˆØ”]Ô'×3Ò3°CÈ$Ð3ÑOÔOˆ
Ø”MÔ&×2Ò2°4Ñ8Ô8ˆ	à Ò.Ð.Ø )Ñ+ˆFØ Ñ.ˆEÝ˜Ô,¨n¸~Ñ.MÑNÔNˆEà”-Ô$×5Ò5Ø”	˜6 6¨5°%ñô ˆCð �aŠxˆx�J t¤zµ5´9Ñ=Ô=ˆxØ”×-Ò-Ñ/Ô/Ð/Ý ðCñô ð ð
 ”×,Ò,¨S°AªXÑ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¸  € àŒO˜tœ}Ò,Ð,Ý˜4œ:¥uÔ'FÑGÔGð -à”Ð åØFñô ð ð ŒmÔ ×$Ò$Ð%6¸Ô8NÑOÔOˆØ”Ô#×'Ò'¨Ñ0Ô0ˆØŒmÔ ×3Ò3°D´I¸sÀFÑKÔKˆØ�!Š8ˆ8Ø”]×2Ò2Ñ4Ô4ˆFàð !�j¨¬µU´YÑ?Ô?ð !Ý Ð à”-Ô$ˆCØŒM×(Ò(Ø�q”	×+Ò+Ø”OØÔ?ñô ð ð
 Ô2ð Ø˜qœ	×3Ò3ØÔ(ØÔ;ñô ðð Ô1ð FØ˜qœ	Ô(ØÔEòFð ð# )ñ ô ð õ& ð$ñô ð õ �t”z¥5¤9Ñ-Ô-ð	>à” 4¤=Ò0Ð0à”mÔ(×,Ò,Ø! 4Ô#9ñô ˆGð ”-Ô$×8Ò8Ø”	Ø”Ô"Ô8ØÔ&Øñ	ô ˆCð ŒM×(Ò(¨°ªÑ2Ô2Ð2ØœÔ*×1Ò1°'Ñ:Ô:¸1¸1¸1Ô=ˆDŒIàŒmÔ ×5Ò5°d´iÑ@Ô@ˆØŒ×$Ò$ S¨A¢XÑ.Ô.Ð.ØŒ}Ô!×(Ò(¨Ñ-Ô-¨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‘(”(ˆØ�T”ZÔ/Ò/Ð/ÝØ@×GÒGØ”JÔ.ñô ñô ð ð
 �tÔ-Ò-Ð-ÝØB×IÒIØÔ*ñô ñô ð ð
 ŒmÔ ×4Ò4ØŒI�t”}Ô)Ô?ÅÀSÁÄÈ3ñ
ô 
ˆð 	Œ×$Ò$ S¨A¢XÑ.Ô.Ð.ØˆŒ	Ø�}Š}‰ŒÐ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Ý�‰IŒIñ
ô 
ˆð 	Œ×$Ò$ S¨A¢XÑ.Ô.Ð.Ð.Ð.r`   úbytes | Nonec                ó   — | 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ð ð ð ð
"ð "ð "ð "ðH>;ð >;ð >;ð >;ð@ð ð ð ð*	/ð 	/ð 	/ð 	/ð ðð ð ñ „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ðIð Ið Ið Ið Iñ Iô Ið Ið Ið Ir`   