Ë
    ùmxi3  ã                  óÎ   — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ  G d	„ d
e«      ZdZ G d„ d«      Z G d„ d«      Zy)é    )ÚannotationsN)ÚIterable)Úutils)ÚInvalidSignature)ÚhashesÚpadding)ÚCipherÚ
algorithmsÚmodes)ÚHMACc                  ó   — e Zd Zy)ÚInvalidTokenN)Ú__name__Ú
__module__Ú__qualname__© ó    úJ/home/htdocs/ttos/venv/lib/python3.12/site-packages/cryptography/fernet.pyr   r      s   „ Ør   r   é<   c                  ó¸   — e Zd Z	 d	 	 	 	 	 dd„Zedd„«       Zdd„Zdd„Z	 	 	 	 	 	 	 	 dd„Zddd„Z		 	 	 	 	 	 	 	 dd„Z
dd	„Zedd
„«       Zdd„Z	 	 	 	 	 	 	 	 dd„Zy)ÚFernetNc                óØ   — 	 t        j                  |«      }t        |«      dk7  rt	        d«      ‚|d d | _        |dd  | _        y # t        j                  $ r}t	        d«      |‚d }~ww xY w)Nz4Fernet key must be 32 url-safe base64-encoded bytes.é    é   )Úbase64Úurlsafe_b64decodeÚbinasciiÚErrorÚ
ValueErrorÚlenÚ_signing_keyÚ_encryption_key)ÚselfÚkeyÚbackendÚexcs       r   Ú__init__zFernet.__init__   s{   € ð
	Ü×*Ñ*¨3Ó/ˆCô
 ˆs‹8�rŠ>ÜØFóð ð    ˜HˆÔØ" 2 3˜xˆÕøô �~‰~ò 	ÜØFóàðûð	ús   ‚A ÁA)ÁA$Á$A)c                óR   — t        j                  t        j                  d«      «      S )Nr   )r   Úurlsafe_b64encodeÚosÚurandom)Úclss    r   Úgenerate_keyzFernet.generate_key0   s   € ä×'Ñ'¬¯
©
°2«Ó7Ð7r   c                ó\   — | j                  |t        t        j                  «       «      «      S ©N©Úencrypt_at_timeÚintÚtime)r#   Údatas     r   ÚencryptzFernet.encrypt4   s    € Ø×#Ñ# D¬#¬d¯i©i«kÓ*:Ó;Ð;r   c                óR   — t        j                  d«      }| j                  |||«      S )Nr   )r*   r+   Ú_encrypt_from_parts)r#   r4   Úcurrent_timeÚivs       r   r1   zFernet.encrypt_at_time7   s$   € Ü�Z‰Z˜‹^ˆØ×'Ñ'¨¨l¸BÓ?Ð?r   c                óº  — t        j                  d|«       t        j                  t        j
                  j                  «      j                  «       }|j                  |«      |j                  «       z   }t        t	        j
                  | j                  «      t        j                  |«      «      j                  «       }|j                  |«      |j                  «       z   }d|j                  dd¬«      z   |z   |z   }t!        | j"                  t%        j&                  «       «      }	|	j                  |«       |	j                  «       }
t)        j*                  ||
z   «      S )Nr4   ó   €é   Úbig)ÚlengthÚ	byteorder)r   Ú_check_bytesr   ÚPKCS7r
   ÚAESÚ
block_sizeÚpadderÚupdateÚfinalizer	   r"   r   ÚCBCÚ	encryptorÚto_bytesr   r!   r   ÚSHA256r   r)   )r#   r4   r8   r9   rD   Úpadded_datarH   Ú
ciphertextÚbasic_partsÚhÚhmacs              r   r7   zFernet._encrypt_from_parts;   s  € ô 	×Ñ˜6 4Ô(ä—‘œzŸ~™~×8Ñ8Ó9×@Ñ@ÓBˆØ—m‘m DÓ)¨F¯O©OÓ,=Ñ=ˆÜÜ�N‰N˜4×/Ñ/Ó0Ü�I‰I�b‹Mó
÷ ‰)‹+ð 	ð ×%Ñ% kÓ2°Y×5GÑ5GÓ5IÑIˆ
ð Ø×#Ñ#¨1¸Ð#Ó>ñ?àñð ñð 	ô �×"Ñ"¤F§M¡M£OÓ4ˆØ	�‰�ÔØ�z‰z‹|ˆÜ×'Ñ'¨°dÑ(:Ó;Ð;r   c                ó    — t         j                  |«      \  }}|€d }n|t        t        j                  «       «      f}| j	                  |||«      S r/   )r   Ú_get_unverified_token_datar2   r3   Ú_decrypt_data)r#   ÚtokenÚttlÚ	timestampr4   Ú	time_infos         r   ÚdecryptzFernet.decryptT   sJ   € Ü ×;Ñ;¸EÓB‰ˆ	�4Øˆ;Ø‰Iàœc¤$§)¡)£+Ó.Ð/ˆIØ×!Ñ! $¨	°9Ó=Ð=r   c                óv   — |€t        d«      ‚t        j                  |«      \  }}| j                  ||||f«      S )Nz6decrypt_at_time() can only be used with a non-None ttl)r   r   rQ   rR   )r#   rS   rT   r8   rU   r4   s         r   Údecrypt_at_timezFernet.decrypt_at_time\   sI   € ð ˆ;ÜØHóð ô !×;Ñ;¸EÓB‰ˆ	�4Ø×!Ñ! $¨	°C¸Ð3FÓGÐGr   c                óX   — t         j                  |«      \  }}| j                  |«       |S r/   )r   rQ   Ú_verify_signature)r#   rS   rU   r4   s       r   Úextract_timestampzFernet.extract_timestampf   s*   € Ü ×;Ñ;¸EÓB‰ˆ	�4à×Ñ˜tÔ$ØÐr   c                ó:  — t        | t        t        f«      st        d«      ‚	 t	        j
                  | «      }|r|d   dk7  rt        ‚t        |«      dk  rt        ‚t        j                  |dd d¬«      }||fS # t        t        j                  f$ r t        ‚w xY w)Nztoken must be bytes or strr   é€   é	   é   r=   )r?   )Ú
isinstanceÚstrÚbytesÚ	TypeErrorr   r   r   r   r   r    r2   Ú
from_bytes)rS   r4   rU   s      r   rQ   z!Fernet._get_unverified_token_datal   s™   € ä˜%¤#¤u Ô.ÜÐ8Ó9Ð9ð	Ü×+Ñ+¨EÓ2ˆDñ �t˜A‘w $’ÜÐäˆt‹9�qŠ=ÜÐä—N‘N 4¨¨! 9¸�NÓ>ˆ	Ø˜$ˆÐøô œ8Ÿ>™>Ð*ò 	ÜÐð	ús   £A: Á: Bc                óÌ   — t        | j                  t        j                  «       «      }|j	                  |d d «       	 |j                  |dd  «       y # t        $ r t        ‚w xY w)Néàÿÿÿ)r   r!   r   rJ   rE   Úverifyr   r   )r#   r4   rN   s      r   r[   zFernet._verify_signature   sX   € Ü�×"Ñ"¤F§M¡M£OÓ4ˆØ	�‰��d�s�Ôð	Ø�H‰H�T˜#˜$�ZÕ øÜò 	ÜÐð	ús   ¾A ÁA#c                ót  — |�%|\  }}||z   |k  rt         ‚|t        z   |k  rt         ‚| j                  |«       |dd }|dd }t        t	        j
                  | j                  «      t        j                  |«      «      j                  «       }|j                  |«      }		 |	|j                  «       z  }	t        j                  t        j
                  j                  «      j!                  «       }
|
j                  |	«      }	 ||
j                  «       z  }|S # t        $ r t         ‚w xY w# t        $ r t         ‚w xY w)Nr_   é   rg   )r   Ú_MAX_CLOCK_SKEWr[   r	   r
   rB   r"   r   rG   Ú	decryptorrE   rF   r   r   rA   rC   Úunpadder)r#   r4   rU   rV   rT   r8   r9   rL   rl   Úplaintext_paddedrm   Úunpaddeds               r   rR   zFernet._decrypt_data‡   s7  € ð Ð Ø )ÑˆC�Ø˜3‰ Ò-Ü"Ð"àœoÑ-°	Ò9Ü"Ð"à×Ñ˜tÔ$à�!�BˆZˆØ˜"˜S�\ˆ
ÜÜ�N‰N˜4×/Ñ/Ó0´%·)±)¸B³-ó
ç
‰)‹+ð 	ð %×+Ñ+¨JÓ7Ðð	Ø 	× 2Ñ 2Ó 4Ñ4Ðô —=‘=¤§¡×!:Ñ!:Ó;×DÑDÓFˆà—?‘?Ð#3Ó4ˆð	Ø˜×)Ñ)Ó+Ñ+ˆHð ˆøô ò 	ÜÐð	ûô ò 	ÜÐð	ús   ÂD Ã?D' ÄD$Ä'D7r/   )r$   úbytes | strr%   z
typing.AnyÚreturnÚNone)rq   rc   )r4   rc   rq   rc   )r4   rc   r8   r2   rq   rc   )r4   rc   r8   r2   r9   rc   rq   rc   )rS   rp   rT   ú
int | Nonerq   rc   )rS   rp   rT   r2   r8   r2   rq   rc   )rS   rp   rq   r2   )rS   rp   rq   ztuple[int, bytes])r4   rc   rq   rr   )r4   rc   rU   r2   rV   ztuple[int, int] | Nonerq   rc   )r   r   r   r'   Úclassmethodr-   r5   r1   r7   rW   rY   r\   ÚstaticmethodrQ   r[   rR   r   r   r   r   r      sä   „ ð #ð(àð(ð ð(ð 
ó	(ð& ò8ó ð8ó<ó@ð<Øð<Ø),ð<Ø27ð<à	ó<ô2>ðHØ ðHØ'*ðHØ:=ðHà	óHóð òó ðó$ð!àð!ð ð!ð *ð	!ð
 
ô!r   r   c                  óV   — e Zd Zd	d„Zd
d„Zdd„Zdd„Zddd„Z	 	 	 	 	 	 	 	 dd„Zdd„Z	y)ÚMultiFernetc                óB   — t        |«      }|st        d«      ‚|| _        y )Nz1MultiFernet requires at least one Fernet instance)Úlistr   Ú_fernets)r#   Úfernetss     r   r'   zMultiFernet.__init__¬   s'   € Ü�w“-ˆÙÜØCóð ð  ˆ�r   c                ó\   — | j                  |t        t        j                  «       «      «      S r/   r0   )r#   Úmsgs     r   r5   zMultiFernet.encrypt´   s    € Ø×#Ñ# C¬¬T¯Y©Y«[Ó)9Ó:Ð:r   c                ó@   — | j                   d   j                  ||«      S )Nr   )rz   r1   )r#   r}   r8   s      r   r1   zMultiFernet.encrypt_at_time·   s   € Ø�}‰}˜QÑ×/Ñ/°°\ÓBÐBr   c                ó  — t         j                  |«      \  }}| j                  D ]  }	 |j                  ||d «      } n t        ‚t        j                  d«      }| j                  d   j                  |||«      S # t        $ r Y Œ`w xY w)Nr   r   )r   rQ   rz   rR   r   r*   r+   r7   )r#   r}   rU   r4   ÚfÚpr9   s          r   ÚrotatezMultiFernet.rotateº   sŠ   € Ü ×;Ñ;¸CÓ@‰ˆ	�4Ø—‘ò 	ˆAðØ—O‘O D¨)°TÓ:�Ùð	ô Ðä�Z‰Z˜‹^ˆØ�}‰}˜QÑ×3Ñ3°A°yÀ"ÓEÐEøô  ò Ùðús   ©A:Á:	BÂBNc                óv   — | j                   D ]  }	 |j                  ||«      c S  t        ‚# t        $ r Y Œ*w xY wr/   )rz   rW   r   )r#   r}   rT   r€   s       r   rW   zMultiFernet.decryptÈ   sG   € Ø—‘ò 	ˆAðØ—y‘y  cÓ*Ò*ð	ô
 Ðøô  ò Ùðús   ‘,¬	8·8c                óx   — | j                   D ]  }	 |j                  |||«      c S  t        ‚# t        $ r Y Œ+w xY wr/   )rz   rY   r   )r#   r}   rT   r8   r€   s        r   rY   zMultiFernet.decrypt_at_timeÐ   sM   € ð —‘ò 	ˆAðØ×(Ñ(¨¨c°<Ó@Ò@ð	ô
 Ðøô  ò Ùðús   ‘-­	9¸9c                ót   — | j                   D ]  }	 |j                  |«      c S  t        ‚# t        $ r Y Œ)w xY wr/   )rz   r\   r   )r#   r}   r€   s      r   r\   zMultiFernet.extract_timestampÚ   sG   € Ø—‘ò 	ˆAðØ×*Ñ*¨3Ó/Ò/ð	ô
 Ðøô  ò Ùðús   ‘+«	7¶7)r{   zIterable[Fernet])r}   rc   rq   rc   )r}   rc   r8   r2   rq   rc   )r}   rp   rq   rc   r/   )r}   rp   rT   rs   rq   rc   )r}   rp   rT   r2   r8   r2   rq   rc   )r}   rp   rq   r2   )
r   r   r   r'   r5   r1   r‚   rW   rY   r\   r   r   r   rw   rw   «   sG   „ ó ó;óCóFôðØðØ%(ðØ8;ðà	óôr   rw   )Ú
__future__r   r   r   r*   r3   ÚtypingÚcollections.abcr   Úcryptographyr   Úcryptography.exceptionsr   Úcryptography.hazmat.primitivesr   r   Ú&cryptography.hazmat.primitives.ciphersr	   r
   r   Ú#cryptography.hazmat.primitives.hmacr   Ú	Exceptionr   rk   r   rw   r   r   r   ú<module>r�      sX   ðõ
 #ã Û Û 	Û Û Ý $å Ý 4ß :ß LÑ LÝ 4ô	�9ô 	ð €÷Lñ L÷^5ò 5r   