Ë
    ýQµi^   ã                  óˆ  — d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZ ej                  rd dlmZ  G d„ dej                   ¬	«      Z G d
„ deej                   ¬	«      Z G d„ deej                   ¬	«      Z G d„ deej                   ¬	«      Z ej*                  dej,                  ej.                     d¬«      Z G d„ dej0                  e   «      Zeej4                  ej6                  ej8                  dej:                  ej<                  f      Z G d„ de«      Z G d„ de«      Z  G d„ de e«      Z! G d„ de e«      Z"y)é    )ÚannotationsN)ÚAlreadyFinalizedÚAlreadyUpdatedÚNotYetFinalized)ÚCipherAlgorithm)Úmodes)Ú_CipherContextc                  ó~   — e Zd Zej                  dd„«       Zej                  dd„«       Zej                  dd„«       Zy)ÚCipherContextc                 ó   — y)zk
        Processes the provided bytes through the cipher and returns the results
        as bytes.
        N© ©ÚselfÚdatas     úM/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/base.pyÚupdatezCipherContext.update   ó   � ó    c                 ó   — y)z“
        Processes the provided bytes and writes the resulting data into the
        provided buffer. Returns the number of bytes written.
        Nr   ©r   r   Úbufs      r   Úupdate_intozCipherContext.update_into    r   r   c                 ó   — y)zM
        Returns the results of processing the final block as bytes.
        Nr   ©r   s    r   ÚfinalizezCipherContext.finalize'   r   r   N©r   ÚbytesÚreturnr   ©r   r   r   r   r   Úint©r   r   )Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   r   r   r   r   r   r   r      sN   „ Ø×Ñòó ðð 	×Ñòó ðð 	×Ñòó ñr   r   )Ú	metaclassc                  ó2   — e Zd Zej                  dd„«       Zy)ÚAEADCipherContextc                 ó   — y)z3
        Authenticates the provided bytes.
        Nr   r   s     r   Úauthenticate_additional_dataz.AEADCipherContext.authenticate_additional_data/   r   r   N©r   r   r   ÚNone)r"   r#   r$   r%   r&   r+   r   r   r   r)   r)   .   s   „ Ø×Ñòó ñr   r)   c                  ó2   — e Zd Zej                  dd„«       Zy)ÚAEADDecryptionContextc                 ó   — y)zŠ
        Returns the results of processing the final block as bytes and allows
        delayed passing of the authentication tag.
        Nr   )r   Útags     r   Úfinalize_with_tagz'AEADDecryptionContext.finalize_with_tag7   r   r   N©r1   r   r   r   )r"   r#   r$   r%   r&   r2   r   r   r   r/   r/   6   s   „ Ø×Ñòó ñr   r/   c                  ó<   — e Zd Zeej
                  dd„«       «       Zy)ÚAEADEncryptionContextc                 ó   — y)zb
        Returns tag bytes. This is only available after encryption is
        finalized.
        Nr   r   s    r   r1   zAEADEncryptionContext.tag@   r   r   Nr!   )r"   r#   r$   Úpropertyr%   r&   r1   r   r   r   r5   r5   ?   s"   „ ØØ×Ñòó ó ñr   r5   ÚModeT)ÚboundÚ	covariantc                  óþ   — e Zd Z	 d
	 	 	 	 	 	 	 dd„Zej
                  	 	 	 	 dd„«       Zej
                  	 	 	 	 dd„«       Zd„ Zej
                  	 	 	 	 dd„«       Zej
                  	 	 	 	 dd„«       Zd„ Z	 	 	 	 	 	 dd	„Zy)ÚCipherNc                ó´   — t        |t        «      st        d«      ‚|�-t        |t        j                  «      sJ ‚|j                  |«       || _        || _        y )Nz&Expected interface of CipherAlgorithm.)Ú
isinstancer   Ú	TypeErrorr   r8   Úvalidate_for_algorithmÚ	algorithmÚmode)r   rA   rB   Úbackends       r   Ú__init__zCipher.__init__O   sR   € ô ˜)¤_Ô5ÜÐDÓEÐEàÐô ˜d¤E§J¡JÔ/Ð/Ð/Ø×'Ñ'¨	Ô2à"ˆŒØˆ�	r   c                 ó   — y ©Nr   r   s    r   Ú	encryptorzCipher.encryptora   ó   € ð 	r   c                 ó   — y rF   r   r   s    r   rG   zCipher.encryptorg   rH   r   c                ó
  — t        | j                  t        j                  «      r!| j                  j                  �t        d«      ‚ddlm} |j                  | j                  | j                  «      }| j                  |d¬«      S )Nz0Authentication tag must be None when encrypting.r   ©rC   T©Úencrypt)r>   rB   r   ÚModeWithAuthenticationTagr1   Ú
ValueErrorÚ,cryptography.hazmat.backends.openssl.backendrC   Úcreate_symmetric_encryption_ctxrA   Ú	_wrap_ctx©r   rC   Úctxs      r   rG   zCipher.encryptorm   sl   € Ü�d—i‘i¤×!@Ñ!@ÔAØ�y‰y�}‰}Ð(Ü ØFóð õ 	Ià×5Ñ5Ø�N‰N˜DŸI™Ió
ˆð �~‰~˜c¨4ˆ~Ó0Ð0r   c                 ó   — y rF   r   r   s    r   Ú	decryptorzCipher.decryptorz   rH   r   c                 ó   — y rF   r   r   s    r   rV   zCipher.decryptor€   rH   r   c                ó€   — ddl m} |j                  | j                  | j                  «      }| j                  |d¬«      S )Nr   rK   FrL   )rP   rC   Úcreate_symmetric_decryption_ctxrA   rB   rR   rS   s      r   rV   zCipher.decryptor†   s7   € ÝHà×5Ñ5Ø�N‰N˜DŸI™Ió
ˆð �~‰~˜c¨5ˆ~Ó1Ð1r   c                ó�   — t        | j                  t        j                  «      r|rt	        |«      S t        |«      S t        |«      S rF   )r>   rB   r   rN   Ú_AEADEncryptionContextÚ_AEADDecryptionContextr	   )r   rT   rM   s      r   rR   zCipher._wrap_ctxŽ   s<   € ô
 �d—i‘i¤×!@Ñ!@ÔAÙÜ-¨cÓ2Ð2ä-¨cÓ2Ð2ä! #Ó&Ð&r   rF   )rA   r   rB   r8   rC   z
typing.Anyr   r-   )r   ú'Cipher[modes.ModeWithAuthenticationTag]r   r5   )r   Ú_CIPHER_TYPEr   r   )r   r]   r   r/   )rT   Ú_BackendCipherContextrM   Úboolr   zItyping.Union[AEADEncryptionContext, AEADDecryptionContext, CipherContext])	r"   r#   r$   rD   ÚtypingÚoverloadrG   rV   rR   r   r   r   r<   r<   N   sû   „ ð
 #ð	à"ðð ðð ð	ð
 
óð$ ‡_�_ðØ5ðà	òó ðð
 ‡_�_ðØðà	òó ðò
1ð ‡_�_ðØ5ðà	òó ðð
 ‡_�_ðØðà	òó ðò
2ð'Ø(ð'Ø37ð'ð
ô'r   r<   c                  ó8   — e Zd ZU ded<   dd„Zd	d„Zd
d„Zdd„Zy)r	   ú&typing.Optional[_BackendCipherContext]Ú_ctxc                ó   — || _         y rF   )re   ©r   rT   s     r   rD   z_CipherContext.__init__ª   s	   € Øˆ�	r   c                óf   — | j                   €t        d«      ‚| j                   j                  |«      S ©NúContext was already finalized.)re   r   r   r   s     r   r   z_CipherContext.update­   s-   € Ø�9‰9ÐÜ"Ð#CÓDÐDØ�y‰y×Ñ Ó%Ð%r   c                óh   — | j                   €t        d«      ‚| j                   j                  ||«      S ri   )re   r   r   r   s      r   r   z_CipherContext.update_into²   s/   € Ø�9‰9ÐÜ"Ð#CÓDÐDØ�y‰y×$Ñ$ T¨3Ó/Ð/r   c                óv   — | j                   €t        d«      ‚| j                   j                  «       }d | _         |S ri   )re   r   r   r   s     r   r   z_CipherContext.finalize·   s6   € Ø�9‰9ÐÜ"Ð#CÓDÐDØ�y‰y×!Ñ!Ó#ˆØˆŒ	Øˆr   N©rT   r_   r   r-   r   r   r!   )r"   r#   r$   Ú__annotations__rD   r   r   r   r   r   r   r	   r	   §   s   … Ø
0Ó0óó&ó
0ô
r   r	   c                  óR   — e Zd ZU ded<   ded<   dd„Zdd„Zdd„Zdd„Zdd	„Zdd
„Z	y)Ú_AEADCipherContextrd   re   ztyping.Optional[bytes]Ú_tagc                óJ   — || _         d| _        d| _        d | _        d| _        y )Nr   F)re   Ú_bytes_processedÚ_aad_bytes_processedrq   Ú_updatedrg   s     r   rD   z_AEADCipherContext.__init__Ã   s'   € ØˆŒ	Ø !ˆÔØ$%ˆÔ!ØˆŒ	Øˆ�r   c                ór  — | j                   €t        d«      ‚d| _        | xj                  |z  c_        | j                  | j                   j                  j
                  kD  rWt        dj                  | j                   j                  j                  | j                   j                  j
                  «      «      ‚y )Nrj   Tz+{} has a maximum encrypted byte limit of {})	re   r   ru   rs   Ú_modeÚ_MAX_ENCRYPTED_BYTESrO   ÚformatÚname)r   Ú	data_sizes     r   Ú_check_limitz_AEADCipherContext._check_limitÊ   sŽ   € Ø�9‰9ÐÜ"Ð#CÓDÐDØˆŒØ×Ò Ñ*ÕØ× Ñ  4§9¡9§?¡?×#GÑ#GÒGÜØ=×DÑDØ—I‘I—O‘O×(Ñ(¨$¯)©)¯/©/×*NÑ*Nóóð ð Hr   c                óˆ   — | j                  t        |«      «       | j                  €J ‚| j                  j                  |«      S rF   )r|   Úlenre   r   r   s     r   r   z_AEADCipherContext.updateÖ   s9   € Ø×Ñœ#˜d›)Ô$à�y‰yÐ$Ð$Ð$Ø�y‰y×Ñ Ó%Ð%r   c                óŠ   — | j                  t        |«      «       | j                  €J ‚| j                  j                  ||«      S rF   )r|   r~   re   r   r   s      r   r   z_AEADCipherContext.update_intoÜ   s;   € Ø×Ñœ#˜d›)Ô$à�y‰yÐ$Ð$Ð$Ø�y‰y×$Ñ$ T¨3Ó/Ð/r   c                ó¬   — | j                   €t        d«      ‚| j                   j                  «       }| j                   j                  | _        d | _         |S ri   )re   r   r   r1   rq   r   s     r   r   z_AEADCipherContext.finalizeâ   sE   € Ø�9‰9ÐÜ"Ð#CÓDÐDØ�y‰y×!Ñ!Ó#ˆØ—I‘I—M‘MˆŒ	ØˆŒ	Øˆr   c                óÚ  — | j                   €t        d«      ‚| j                  rt        d«      ‚| xj                  t        |«      z  c_        | j                  | j                   j                  j                  kD  rWt        dj                  | j                   j                  j                  | j                   j                  j                  «      «      ‚| j                   j                  |«       y )Nrj   z'Update has been called on this context.z%{} has a maximum AAD byte limit of {})re   r   ru   r   rt   r~   rw   Ú_MAX_AAD_BYTESrO   ry   rz   r+   r   s     r   r+   z/_AEADCipherContext.authenticate_additional_dataê   s¬   € Ø�9‰9ÐÜ"Ð#CÓDÐDØ�=Š=Ü Ð!JÓKÐKà×!Ò!¤S¨£YÑ.Õ!Ø×$Ñ$ t§y¡y§¡×'EÑ'EÒEÜØ7×>Ñ>Ø—I‘I—O‘O×(Ñ(¨$¯)©)¯/©/×*HÑ*Hóóð ð 	�	‰	×.Ñ.¨tÕ4r   Nrm   )r{   r    r   r-   r   r   r!   r,   )
r"   r#   r$   rn   rD   r|   r   r   r   r+   r   r   r   rp   rp   ¿   s,   … Ø
0Ó0Ø
 Ó óó
ó&ó0óô5r   rp   c                  ó   — e Zd Zdd„Zy)r\   c                ó®   — | j                   €t        d«      ‚| j                   j                  |«      }| j                   j                  | _        d | _         |S ri   )re   r   r2   r1   rq   )r   r1   r   s      r   r2   z(_AEADDecryptionContext.finalize_with_tagü   sG   € Ø�9‰9ÐÜ"Ð#CÓDÐDØ�y‰y×*Ñ*¨3Ó/ˆØ—I‘I—M‘MˆŒ	ØˆŒ	Øˆr   Nr3   )r"   r#   r$   r2   r   r   r   r\   r\   û   s   „ ôr   r\   c                  ó   — e Zd Zedd„«       Zy)r[   c                ód   — | j                   �t        d«      ‚| j                  €J ‚| j                  S )Nz4You must finalize encryption before getting the tag.)re   r   rq   r   s    r   r1   z_AEADEncryptionContext.tag  s8   € à�9‰9Ð Ü!ØIóð ð �y‰yÐ$Ð$Ð$Ø�y‰yÐr   Nr!   )r"   r#   r$   r7   r1   r   r   r   r[   r[     s   „ Øòó ñr   r[   )#Ú
__future__r   r%   ra   Úcryptography.exceptionsr   r   r   Ú/cryptography.hazmat.primitives._cipheralgorithmr   Ú&cryptography.hazmat.primitives.ciphersr   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.ciphersr	   r_   ÚABCMetar   r)   r/   r5   ÚTypeVarÚOptionalr8   ÚGenericr<   ÚUnionÚModeWithNonceÚModeWithTweakÚECBÚModeWithInitializationVectorr^   rp   r\   r[   r   r   r   ú<module>r–      s3  ðõ
 #ã 
Û ÷ñ õ
 LÝ 8à	×Òõô
˜cŸk™kõ ô,˜°·±õ ôÐ-¸¿¹õ ôÐ-¸¿¹õ ð €v‡~�~Ø
�&—/‘/ %§*¡*Ñ-¸ô€ô
K'ˆV�^‰^˜DÑ!ô K'ð\ Ø
‡L�LØ×ÑØ×ÑØØ�	‰	Ø×*Ñ*ð		,ññ€ô�]ô ô095Ð*ô 95ôxÐ/Ð1Fô ôÐ/Ð1Fõ r   