§
    Æ‡tj  ã                  ó   — 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 ej        d¦  «        Z ej        ¦   «         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__© ó    úQ/var/www/html/CA-Chatbot/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 …         | _        t          j	        | j        ¦  «        | _
        d S )Nz4Fernet key must be 32 url-safe base64-encoded bytes.é    é   )Úbase64Úurlsafe_b64decodeÚbinasciiÚErrorÚ
ValueErrorÚlenÚ_signing_keyÚ_encryption_keyr
   ÚAESÚ_aes)Úselfr   r   Úexcs       r   Ú__init__zFernet.__init__!   s²   € ð
	ÝÔ*¨3Ñ/Ô/ˆCˆCøÝŒ~ð 	ð 	ð 	ÝØFñô àðøøøøð	øøøõ ˆs‰8Œ8�rŠ>ˆ>ÝØFñô ð ð     œHˆÔØ" 2 3 3œxˆÔÝ”N 4Ô#7Ñ8Ô8ˆŒ	ˆ	ˆ	s   ‚ —;¦6¶;Úbytesc                óN   — t          j        t          j        d¦  «        ¦  «        S )Nr    )r"   Úurlsafe_b64encodeÚosÚurandom)Úclss    r   Úgenerate_keyzFernet.generate_key5   s   € åÔ'­¬
°2©¬Ñ7Ô7Ð7r   Údatac                ój   — |                       |t          t          j        ¦   «         ¦  «        ¦  «        S ©N©Úencrypt_at_timeÚintÚtime)r,   r6   s     r   ÚencryptzFernet.encrypt9   s&   € Ø×#Ò# D­#­d¬i©k¬kÑ*:Ô*:Ñ;Ô;Ð;r   Úcurrent_timer;   c                óX   — t          j        d¦  «        }|                      |||¦  «        S )Nr!   )r2   r3   Ú_encrypt_from_parts)r,   r6   r>   Úivs       r   r:   zFernet.encrypt_at_time<   s'   € ÝŒZ˜‰^Œ^ˆØ×'Ò'¨¨l¸BÑ?Ô?Ð?r   rA   c                ól  — t          j        d|¦  «         t                               ¦   «         }|                     |¦  «        |                     ¦   «         z   }t          | j        t          j	        |¦  «        ¦  «         
                    ¦   «         }|                     |¦  «        |                     ¦   «         z   }d|                     dd¬¦  «        z   |z   |z   }t          | j        t          ¦  «        }	|	                     |¦  «         |	                     ¦   «         }
t          j        ||
z   ¦  «        S )Nr6   ó   €é   Úbig)ÚlengthÚ	byteorder)r   Ú_check_bytesÚ
_PKCS7_128ÚpadderÚupdateÚfinalizer	   r+   r   ÚCBCÚ	encryptorÚto_bytesr   r(   Ú_SHA256r"   r1   )r,   r6   r>   rA   rJ   Úpadded_datarN   Ú
ciphertextÚbasic_partsÚhÚhmacs              r   r@   zFernet._encrypt_from_parts@   s  € õ 	Ô˜6 4Ñ(Ô(Ð(å×"Ò"Ñ$Ô$ˆØ—m’m DÑ)Ô)¨F¯OªOÑ,=Ô,=Ñ=ˆÝ˜4œ9¥e¤i°¡m¤mÑ4Ô4×>Ò>Ñ@Ô@ˆ	Ø×%Ò% kÑ2Ô2°Y×5GÒ5GÑ5IÔ5IÑIˆ
ð Ø×#Ò#¨1¸Ð#Ñ>Ô>ñ?àñð ñð 	õ �Ô"¥GÑ,Ô,ˆØ	�Š�ÑÔÐØ�zŠz‰|Œ|ˆÝÔ'¨°dÑ(:Ñ;Ô;Ð;r   ÚtokenÚttlú
int | Nonec                ó¸   — t                                |¦  «        \  }}|€d }n"|t          t          j        ¦   «         ¦  «        f}|                      |||¦  «        S r8   )r   Ú_get_unverified_token_datar;   r<   Ú_decrypt_data)r,   rV   rW   Ú	timestampr6   Ú	time_infos         r   ÚdecryptzFernet.decryptV   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   rZ   r[   )r,   rV   rW   r>   r\   r6   s         r   Údecrypt_at_timezFernet.decrypt_at_time^   sT   € ð ˆ;ÝØHñô ð õ !×;Ò;¸EÑBÔB‰ˆ	�4Ø×!Ò! $¨	°C¸Ð3FÑGÔGÐGr   c                ój   — t                                |¦  «        \  }}|                      |¦  «         |S r8   )r   rZ   Ú_verify_signature)r,   rV   r\   r6   s       r   Úextract_timestampzFernet.extract_timestamph   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   r   é	   é   rE   )rG   )Ú
isinstanceÚstrr/   Ú	TypeErrorr"   r#   r$   r%   r   r'   r;   Ú
from_bytes)rV   r6   r\   s      r   rZ   z!Fernet._get_unverified_token_datan   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          ¦  «        }|                     t	          |¦  «        d d…         ¦  «         	 |                     |dd …         ¦  «         d S # t          $ r t          ‚w xY w)Néàÿÿÿ)r   r(   rP   rK   Ú
memoryviewÚverifyr   r   )r,   r6   rT   s      r   rc   zFernet._verify_signature�   s}   € Ý�Ô"¥GÑ,Ô,ˆØ	�Š•˜DÑ!Ô! $ 3 $Ô'Ñ(Ô(Ð(ð	Ø�HŠH�T˜#˜$˜$”ZÑ Ô Ð Ð Ð øÝð 	ð 	ð 	ÝÐð	øøøs   ÁA% Á%A7r\   r]   útuple[int, int] | Nonec                ó~  — |�*|\  }}||z   |k     rt           ‚|t          z   |k     rt           ‚|                      |¦  «         t          |¦  «        }|dd…         }|dd…         }t	          | j        t          j        |¦  «        ¦  «                             ¦   «         }	|	 	                    |¦  «        }
	 |
|	 
                    ¦   «         z  }
n# t          $ r t           ‚w xY wt                               ¦   «         }| 	                    |
¦  «        }	 || 
                    ¦   «         z  }n# t          $ r t           ‚w xY w|S )Nrg   é   rn   )r   Ú_MAX_CLOCK_SKEWrc   ro   r	   r+   r   rM   Ú	decryptorrK   rL   r&   rI   Úunpadder)r,   r6   r\   r]   rW   r>   ÚmvrA   rR   ru   Úplaintext_paddedrv   Úunpaddeds                r   r[   zFernet._decrypt_data‰   sY  € ð Ð Ø )ÑˆC�Ø˜3‰ Ò-Ð-Ý"Ð"à�oÑ-°	Ò9Ð9Ý"Ð"à×Ò˜tÑ$Ô$Ð$å˜ÑÔˆØ�!�B�$ŒZˆØ˜˜3˜”Zˆ
Ý˜4œ9¥e¤i°¡m¤mÑ4Ô4×>Ò>Ñ@Ô@ˆ	Ø$×+Ò+¨JÑ7Ô7Ðð	Ø 	× 2Ò 2Ñ 4Ô 4Ñ4ÐÐøÝð 	ð 	ð 	ÝÐð	øøøå×&Ò&Ñ(Ô(ˆà—?’?Ð#3Ñ4Ô4ˆð	Ø˜×)Ò)Ñ+Ô+Ñ+ˆHˆHøÝð 	ð 	ð 	ÝÐð	øøøàˆs   Â4C ÃCÄD( Ä(D:r8   )r   r   r   r   r   r   )r   r/   )r6   r/   r   r/   )r6   r/   r>   r;   r   r/   )r6   r/   r>   r;   rA   r/   r   r/   )rV   r   rW   rX   r   r/   )rV   r   rW   r;   r>   r;   r   r/   )rV   r   r   r;   )rV   r   r   re   )r6   r/   r   r   )r6   r/   r\   r;   r]   rq   r   r/   )r   r   r   r.   Úclassmethodr5   r=   r:   r@   r^   ra   rd   ÚstaticmethodrZ   rc   r[   r   r   r   r   r       s  € € € € € ð #ð9ð 9ð 9ð 9ð 9ð( ð8ð 8ð 8ñ „[ð8ð<ð <ð <ð <ð@ð @ð @ð @ð<ð <ð <ð <ð,>ð >ð >ð >ð >ð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 r8   r9   )r,   rƒ   s     r   r=   zMultiFernet.encryptµ   s&   € Ø×#Ò# C­­T¬Y©[¬[Ñ)9Ô)9Ñ:Ô:Ð:r   r>   r;   c                óD   — | j         d                              ||¦  «        S )Nr   )r‚   r:   )r,   rƒ   r>   s      r   r:   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   rZ   r‚   r[   r   r2   r3   r@   )r,   rƒ   r\   r6   ÚfÚprA   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NrW   rX   c                óþ   — |€d }n"|t          t          j        ¦   «         ¦  «        f}t                               |¦  «        \  }}| j        D ]+}	 |                     |||¦  «        c S # t          $ r Y Œ(w xY wt          ‚r8   )r;   r<   r   rZ   r‚   r[   r   )r,   rƒ   rW   r]   r\   r6   r‡   s          r   r^   zMultiFernet.decryptÉ   s•   € Øˆ;ØˆIˆIà�c¥$¤)¡+¤+Ñ.Ô.Ð/ˆIå ×;Ò;¸CÑ@Ô@‰ˆ	�4Ø”ð 	ð 	ˆAðØ—’ t¨Y¸	ÑBÔBÐBÐBÐBøÝð ð ð Ø�ðøøøåÐs   ÁA(Á(
A5Á4A5c                óÖ   — |€t          d¦  «        ‚t                               |¦  «        \  }}| j        D ]-}	 |                     ||||f¦  «        c S # t
          $ r Y Œ*w xY wt
          ‚r`   )r&   r   rZ   r‚   r[   r   )r,   rƒ   rW   r>   r\   r6   r‡   s          r   ra   zMultiFernet.decrypt_at_time×   s”   € ð ˆ;ÝØHñô ð õ !×;Ò;¸CÑ@Ô@‰ˆ	�4Ø”ð 	ð 	ˆAðØ—’ t¨Y¸¸lÐ8KÑLÔLÐLÐLÐLøÝð ð ð Ø�ðøøøåÐs   ¹AÁ
A!Á A!c                ó°   — t                                |¦  «        \  }}| j        D ]+}	 |                     |¦  «         |c S # t          $ r Y Œ(w xY wt          ‚r8   )r   rZ   r‚   rc   r   )r,   rƒ   r\   r6   r‡   s        r   rd   zMultiFernet.extract_timestampç   su   € å ×;Ò;¸CÑ@Ô@‰ˆ	�4Ø”ð 	ð 	ˆAðØ×#Ò# DÑ)Ô)Ð)Ø Ð Ð Ð øÝð ð ð Ø�ðøøøåÐs   ¨AÁ
AÁA)r~   r   )rƒ   r/   r   r/   )rƒ   r/   r>   r;   r   r/   )rƒ   r   r   r/   r8   )rƒ   r   rW   rX   r   r/   )rƒ   r   rW   r;   r>   r;   r   r/   )rƒ   r   r   r;   )
r   r   r   r.   r=   r:   r‰   r^   ra   rd   r   r   r   r}   r}   ¬   s­   € € € € € ð ð  ð  ð  ð;ð ;ð ;ð ;ðCð Cð Cð CðFð Fð Fð Fðð ð ð ð ðð ð ð ð 	ð 	ð 	ð 	ð 	ð 	r   r}   )Ú
__future__r   r"   r$   r2   r<   ÚtypingÚcollections.abcr   Úcryptographyr   Úcryptography.exceptionsr   Úcryptography.hazmat.primitivesr   r   Ú&cryptography.hazmat.primitives.ciphersr	   r
   r   Ú#cryptography.hazmat.primitives.hmacr   Ú	Exceptionr   rt   ÚPKCS7rI   ÚSHA256rP   r   r}   r   r   r   ú<module>r˜      s‚  ðð
 #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $à Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ 4Ð 4Ð 4Ð 4Ð 4Ð 4ð	ð 	ð 	ð 	ð 	�9ñ 	ô 	ð 	ð €ð ˆWŒ]˜3ÑÔ€
Ø
ˆ&Œ-‰/Œ/€ðIð Ið Ið Ið Iñ Iô Ið IðXDð Dð Dð Dð Dñ Dô Dð Dð Dð Dr   