§
    ¥”j3  ã                  óâ   — 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dS )é    )ÚannotationsN)ÚIterable)Úutils)ÚInvalidSignature)ÚhashesÚpadding)ÚCipherÚ
algorithmsÚmodes)ÚHMACc                  ó   — e Zd ZdS )ÚInvalidTokenN)Ú__name__Ú
__module__Ú__qualname__© ó    úb/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/cryptography/fernet.pyr   r      s   € € € € € Ø€Dr   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dS )+ÚFernetNÚkeyúbytes | strÚbackendú
typing.AnyÚreturnÚNonec                ó   — 	 t          j        |¦  «        }n'# t          j        $ r}t	          d¦  «        |‚d }~ww xY wt          |¦  «        dk    rt	          d¦  «        ‚|d d…         | _        |dd …         | _        d S )Nz4Fernet key must be 32 url-safe base64-encoded bytes.é    é   )Úbase64Úurlsafe_b64decodeÚbinasciiÚErrorÚ
ValueErrorÚlenÚ_signing_keyÚ_encryption_key)Úselfr   r   Úexcs       r   Ú__init__zFernet.__init__   s    € ð
	ÝÔ*¨3Ñ/Ô/ˆCˆCøÝŒ~ð 	ð 	ð 	ÝØFñô àðøøøøð	øøøõ ˆs‰8Œ8�rŠ>ˆ>ÝØFñô ð ð     œHˆÔØ" 2 3 3œxˆÔÐÐs   ‚ —;¦6¶;Úbytesc                óN   — t          j        t          j        d¦  «        ¦  «        S )Nr   )r!   Úurlsafe_b64encodeÚosÚurandom)Úclss    r   Úgenerate_keyzFernet.generate_key0   s   € åÔ'­¬
°2©¬Ñ7Ô7Ð7r   Údatac                ój   — |                       |t          t          j        ¦   «         ¦  «        ¦  «        S ©N©Úencrypt_at_timeÚintÚtime)r)   r3   s     r   ÚencryptzFernet.encrypt4   s&   € Ø×#Ò# D­#­d¬i©k¬kÑ*:Ô*:Ñ;Ô;Ð;r   Úcurrent_timer8   c                óX   — t          j        d¦  «        }|                      |||¦  «        S )Nr    )r/   r0   Ú_encrypt_from_parts)r)   r3   r;   Úivs       r   r7   zFernet.encrypt_at_time7   s'   € ÝŒZ˜‰^Œ^ˆØ×'Ò'¨¨l¸BÑ?Ô?Ð?r   r>   c                óà  — t          j        d|¦  «         t          j        t          j        j        ¦  «                             ¦   «         }|                     |¦  «        | 	                    ¦   «         z   }t          t	          j        | j        ¦  «        t          j        |¦  «        ¦  «                             ¦   «         }|                     |¦  «        | 	                    ¦   «         z   }d|                     dd¬¦  «        z   |z   |z   }t!          | j        t%          j        ¦   «         ¦  «        }	|	                     |¦  «         |	 	                    ¦   «         }
t)          j        ||
z   ¦  «        S )Nr3   ó   €é   Úbig)ÚlengthÚ	byteorder)r   Ú_check_bytesr   ÚPKCS7r
   ÚAESÚ
block_sizeÚpadderÚupdateÚfinalizer	   r(   r   ÚCBCÚ	encryptorÚto_bytesr   r'   r   ÚSHA256r!   r.   )r)   r3   r;   r>   rI   Úpadded_datarM   Ú
ciphertextÚbasic_partsÚhÚhmacs              r   r=   zFernet._encrypt_from_parts;   s;  € õ 	Ô˜6 4Ñ(Ô(Ð(å”�zœ~Ô8Ñ9Ô9×@Ò@ÑBÔBˆØ—m’m DÑ)Ô)¨F¯OªOÑ,=Ô,=Ñ=ˆÝÝŒN˜4Ô/Ñ0Ô0ÝŒI�b‰MŒMñ
ô 
÷ Š)‰+Œ+ð 	ð ×%Ò% kÑ2Ô2°Y×5GÒ5GÑ5IÔ5IÑIˆ
ð Ø×#Ò#¨1¸Ð#Ñ>Ô>ñ?àñð ñð 	õ �Ô"¥F¤M¡O¤OÑ4Ô4ˆØ	�Š�ÑÔÐØ�zŠz‰|Œ|ˆÝÔ'¨°dÑ(:Ñ;Ô;Ð;r   ÚtokenÚttlú
int | Nonec                ó¸   — t                                |¦  «        \  }}|€d }n"|t          t          j        ¦   «         ¦  «        f}|                      |||¦  «        S r5   )r   Ú_get_unverified_token_datar8   r9   Ú_decrypt_data)r)   rU   rV   Ú	timestampr3   Ú	time_infos         r   ÚdecryptzFernet.decryptT   sU   € Ý ×;Ò;¸EÑBÔB‰ˆ	�4Øˆ;ØˆIˆIà�c¥$¤)¡+¤+Ñ.Ô.Ð/ˆIØ×!Ò! $¨	°9Ñ=Ô=Ð=r   c                ó�   — |€t          d¦  «        ‚t                               |¦  «        \  }}|                      ||||f¦  «        S )Nz6decrypt_at_time() can only be used with a non-None ttl)r%   r   rY   rZ   )r)   rU   rV   r;   r[   r3   s         r   Údecrypt_at_timezFernet.decrypt_at_time\   sT   € ð ˆ;ÝØHñô ð õ !×;Ò;¸EÑBÔB‰ˆ	�4Ø×!Ò! $¨	°C¸Ð3FÑGÔGÐGr   c                ój   — t                                |¦  «        \  }}|                      |¦  «         |S r5   )r   rY   Ú_verify_signature)r)   rU   r[   r3   s       r   Úextract_timestampzFernet.extract_timestampf   s3   € Ý ×;Ò;¸EÑBÔB‰ˆ	�4à×Ò˜tÑ$Ô$Ð$ØÐr   útuple[int, bytes]c                ót  — t          | t          t          f¦  «        st          d¦  «        ‚	 t	          j        | ¦  «        }n!# t          t          j        f$ r t          ‚w xY w|r|d         dk    rt          ‚t          |¦  «        dk     rt          ‚t                               |dd…         d¬¦  «        }||fS )Nztoken must be bytes or strr   é€   é	   é   rB   )rD   )Ú
isinstanceÚstrr,   Ú	TypeErrorr!   r"   r#   r$   r   r&   r8   Ú
from_bytes)rU   r3   r[   s      r   rY   z!Fernet._get_unverified_token_datal   s¾   € å˜%¥#¥u Ñ.Ô.ð 	:ÝÐ8Ñ9Ô9Ð9ð	ÝÔ+¨EÑ2Ô2ˆDˆDøÝ�8œ>Ð*ð 	ð 	ð 	ÝÐð	øøøð ð 	�t˜A”w $’�ÝÐåˆt‰9Œ9�qŠ=ˆ=ÝÐå—N’N 4¨¨!¨¤9¸�NÑ>Ô>ˆ	Ø˜$ˆÐs   ­A ÁA c                óò   — t          | j        t          j        ¦   «         ¦  «        }|                     |d d…         ¦  «         	 |                     |dd …         ¦  «         d S # t          $ r t          ‚w xY w)Néàÿÿÿ)r   r'   r   rO   rJ   Úverifyr   r   )r)   r3   rS   s      r   ra   zFernet._verify_signature   sz   € Ý�Ô"¥F¤M¡O¤OÑ4Ô4ˆØ	�Š��d�s�d”ÑÔÐð	Ø�HŠH�T˜#˜$˜$”ZÑ Ô Ð Ð Ð øÝð 	ð 	ð 	ÝÐð	øøøs   ÁA$ Á$A6r[   r\   útuple[int, int] | Nonec                ó¼  — |�*|\  }}||z   |k     rt           ‚|t          z   |k     rt           ‚|                      |¦  «         |dd…         }|dd…         }t          t	          j        | j        ¦  «        t          j        |¦  «        ¦  «         	                    ¦   «         }| 
                    |¦  «        }		 |	|                     ¦   «         z  }	n# t          $ r t           ‚w xY wt          j        t          j        j        ¦  «                             ¦   «         }
|
 
                    |	¦  «        }	 ||
                     ¦   «         z  }n# t          $ r t           ‚w xY w|S )Nrf   é   rm   )r   Ú_MAX_CLOCK_SKEWra   r	   r
   rG   r(   r   rL   Ú	decryptorrJ   rK   r%   r   rF   rH   Úunpadder)r)   r3   r[   r\   rV   r;   r>   rQ   rs   Úplaintext_paddedrt   Úunpaddeds               r   rZ   zFernet._decrypt_data‡   sm  € ð Ð Ø )ÑˆC�Ø˜3‰ Ò-Ð-Ý"Ð"à�oÑ-°	Ò9Ð9Ý"Ð"à×Ò˜tÑ$Ô$Ð$à�!�B�$ŒZˆØ˜"˜S˜&”\ˆ
ÝÝŒN˜4Ô/Ñ0Ô0µ%´)¸B±-´-ñ
ô 
ç
Š)‰+Œ+ð 	ð %×+Ò+¨JÑ7Ô7Ðð	Ø 	× 2Ò 2Ñ 4Ô 4Ñ4ÐÐøÝð 	ð 	ð 	ÝÐð	øøøå”=¥¤Ô!:Ñ;Ô;×DÒDÑFÔFˆà—?’?Ð#3Ñ4Ô4ˆð	Ø˜×)Ò)Ñ+Ô+Ñ+ˆHˆHøÝð 	ð 	ð 	ÝÐð	øøøàˆs   Â7C ÃC!Ä/E ÅEr5   )r   r   r   r   r   r   )r   r,   )r3   r,   r   r,   )r3   r,   r;   r8   r   r,   )r3   r,   r;   r8   r>   r,   r   r,   )rU   r   rV   rW   r   r,   )rU   r   rV   r8   r;   r8   r   r,   )rU   r   r   r8   )rU   r   r   rc   )r3   r,   r   r   )r3   r,   r[   r8   r\   ro   r   r,   )r   r   r   r+   Úclassmethodr2   r:   r7   r=   r]   r_   rb   ÚstaticmethodrY   ra   rZ   r   r   r   r   r      s  € € € € € ð #ð(ð (ð (ð (ð (ð& ð8ð 8ð 8ñ „[ð8ð<ð <ð <ð <ð@ð @ð @ð @ð<ð <ð <ð <ð2>ð >ð >ð >ð >ðHð Hð Hð Hðð ð ð ð ðð ð ñ „\ðð$ð ð ð ð!ð !ð !ð !ð !ð !r   r   c                  óH   — 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	dS )ÚMultiFernetÚfernetsúIterable[Fernet]c                óT   — t          |¦  «        }|st          d¦  «        ‚|| _        d S )Nz1MultiFernet requires at least one Fernet instance)Úlistr%   Ú_fernets)r)   r{   s     r   r+   zMultiFernet.__init__¬   s7   € Ý�w‘-”-ˆØð 	ÝØCñô ð ð  ˆŒˆˆr   Úmsgr,   r   c                ój   — |                       |t          t          j        ¦   «         ¦  «        ¦  «        S r5   r6   )r)   r€   s     r   r:   zMultiFernet.encrypt´   s&   € Ø×#Ò# C­­T¬Y©[¬[Ñ)9Ô)9Ñ:Ô:Ð:r   r;   r8   c                óD   — | j         d                              ||¦  «        S )Nr   )r   r7   )r)   r€   r;   s      r   r7   zMultiFernet.encrypt_at_time·   s   € ØŒ}˜QÔ×/Ò/°°\ÑBÔBÐBr   r   c                ó  — t                                |¦  «        \  }}| j        D ]+}	 |                     ||d ¦  «        } n# t          $ r Y Œ(w xY wt          ‚t          j        d¦  «        }| j        d                              |||¦  «        S )Nr    r   )r   rY   r   rZ   r   r/   r0   r=   )r)   r€   r[   r3   ÚfÚpr>   s          r   ÚrotatezMultiFernet.rotateº   s�   € Ý ×;Ò;¸CÑ@Ô@‰ˆ	�4Ø”ð 	ð 	ˆAðØ—O’O D¨)°TÑ:Ô:�Ø�øÝð ð ð Ø�ðøøøõ ÐåŒZ˜‰^Œ^ˆØŒ}˜QÔ×3Ò3°A°yÀ"ÑEÔEÐEs   ¨AÁ
AÁANrV   rW   c                ót   — | j         D ]*}	 |                     ||¦  «        c S # t          $ r Y Œ'w xY wt          ‚r5   )r   r]   r   )r)   r€   rV   r„   s       r   r]   zMultiFernet.decryptÈ   sX   € Ø”ð 	ð 	ˆAðØ—y’y  cÑ*Ô*Ð*Ð*Ð*øÝð ð ð Ø�ðøøøåÐs   ‹#£
0¯0c                óv   — | j         D ]+}	 |                     |||¦  «        c S # t          $ r Y Œ(w xY wt          ‚r5   )r   r_   r   )r)   r€   rV   r;   r„   s        r   r_   zMultiFernet.decrypt_at_timeÐ   s^   € ð ”ð 	ð 	ˆAðØ×(Ò(¨¨c°<Ñ@Ô@Ð@Ð@Ð@øÝð ð ð Ø�ðøøøåÐs   ‹$¤
1°1c                ór   — | j         D ])}	 |                     |¦  «        c S # t          $ r Y Œ&w xY wt          ‚r5   )r   rb   r   )r)   r€   r„   s      r   rb   zMultiFernet.extract_timestampÚ   sX   € Ø”ð 	ð 	ˆAðØ×*Ò*¨3Ñ/Ô/Ð/Ð/Ð/øÝð ð ð Ø�ðøøøåÐs   ‹"¢
/®/)r{   r|   )r€   r,   r   r,   )r€   r,   r;   r8   r   r,   )r€   r   r   r,   r5   )r€   r   rV   rW   r   r,   )r€   r   rV   r8   r;   r8   r   r,   )r€   r   r   r8   )
r   r   r   r+   r:   r7   r†   r]   r_   rb   r   r   r   rz   rz   «   s­   € € € € € ð ð  ð  ð  ð;ð ;ð ;ð ;ðCð Cð Cð CðFð Fð Fð Fðð ð ð ð ðð ð ð ðð ð ð ð ð r   rz   )Ú
__future__r   r!   r#   r/   r9   ÚtypingÚcollections.abcr   Úcryptographyr   Úcryptography.exceptionsr   Úcryptography.hazmat.primitivesr   r   Ú&cryptography.hazmat.primitives.ciphersr	   r
   r   Ú#cryptography.hazmat.primitives.hmacr   Ú	Exceptionr   rr   r   rz   r   r   r   ú<module>r“      sX  ðð
 #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $à Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ 4Ð 4Ð 4Ð 4Ð 4Ð 4ð	ð 	ð 	ð 	ð 	�9ñ 	ô 	ð 	ð €ðLð Lð Lð Lð Lñ Lô Lð Lð^5ð 5ð 5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5r   