Current File : //lib64/python3.9/site-packages/cryptography/__pycache__/fernet.cpython-39.pyc
a

�a�@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZmZddl
mZmZmZddlmZGdd�de�Zd	ZGd
d�de�ZGdd
�d
e�ZdS)�N)�utils)�InvalidSignature)�hashes�padding)�Cipher�
algorithms�modes)�HMACc@seZdZdS)�InvalidTokenN)�__name__�
__module__�__qualname__�rr�9/usr/lib64/python3.9/site-packages/cryptography/fernet.pyr
sr
�<c@seZdZd!ejeefejd�dd�Ze	ed�dd��Z
eed�d	d
�Zeeed�dd
�Z
eeeed�dd�Zd"eejeed�dd�Zeeeed�dd�Zeed�dd�Zeeejeefd�dd��Zedd�dd�Zeeejejeefed�dd �ZdS)#�FernetN)�key�backendcCs>t�|�}t|�dkrtd��|dd�|_|dd�|_dS)N� z4Fernet key must be 32 url-safe base64-encoded bytes.�)�base64�urlsafe_b64decode�len�
ValueError�_signing_key�_encryption_key)�selfrrrrr�__init__s
�zFernet.__init__)�returncCst�t�d��S)Nr)r�urlsafe_b64encode�os�urandom)�clsrrr�generate_key*szFernet.generate_key)�datarcCs|�|tt����S�N��encrypt_at_time�int�time)rr$rrr�encrypt.szFernet.encrypt)r$�current_timercCst�d�}|�|||�S)Nr)r r!�_encrypt_from_parts)rr$r+�ivrrrr'1s
zFernet.encrypt_at_time)r$r+r-rcCs�t�d|�t�tjj���}|�|�|�	�}t
t�|j�t�
|����}|�|�|�	�}dt�d|�||}t|jt���}	|	�|�|	�	�}
t�||
�S)Nr$���>Q)r�_check_bytesr�PKCS7r�AES�
block_size�padder�update�finalizerrr�CBC�	encryptor�struct�packr	rr�SHA256rr)rr$r+r-r4Zpadded_datar8�
ciphertextZbasic_parts�hZhmacrrrr,5s
��
zFernet._encrypt_from_parts)�token�ttlrcCs:t�|�\}}|durd}n|tt���f}|�|||�Sr%)r�_get_unverified_token_datar(r)�
_decrypt_data)rr>r?�	timestampr$�	time_inforrr�decryptKs
zFernet.decrypt)r>r?r+rcCs0|durtd��t�|�\}}|�||||f�S)Nz6decrypt_at_time() can only be used with a non-None ttl)rrr@rA)rr>r?r+rBr$rrr�decrypt_at_timeSs�zFernet.decrypt_at_time)r>rcCst�|�\}}|�|�|Sr%)rr@�_verify_signature)rr>rBr$rrr�extract_timestamp]s
zFernet.extract_timestampc	Cs�t�d|�zt�|�}Wnttjfy6t�Yn0|rH|ddkrLt�zt�	d|dd��\}Wntj
y~t�Yn0||fS)Nr>r�r/��	)rr0rr�	TypeError�binascii�Errorr
r9�unpack�error)r>r$rBrrrr@cs

z!Fernet._get_unverified_token_datacCsTt|jt���}|�|dd��z|�|dd��WntyNt�Yn0dS)N���)r	rrr;r5Zverifyrr
)rr$r=rrrrFtszFernet._verify_signature)r$rBrCrcCs�|dur0|\}}|||kr t�|t|kr0t�|�|�|dd�}|dd�}tt�|j�t�|���	�}|�
|�}	z|	|��7}	Wnty�t�Yn0t
�tjj���}
|
�
|	�}z||
��7}Wnty�t�Yn0|S)NrJ�rP)r
�_MAX_CLOCK_SKEWrFrrr2rrr7�	decryptorr5r6rrr1r3�unpadder)rr$rBrCr?r+r-r<rSZplaintext_paddedrTZunpaddedrrrrA|s0
�



zFernet._decrypt_data)N)N)rrr
�typing�Union�bytes�str�Anyr�classmethodr#r*r(r'r,�OptionalrDrErG�staticmethod�Tupler@rFrArrrrrs2���	�

�rc@s�eZdZejed�dd�Zeed�dd�Zee	ed�dd	�Z
eed�d
d�Zdeeje	ed
�dd�Z
ee	e	ed�dd�ZdS)�MultiFernet)�fernetscCst|�}|std��||_dS)Nz1MultiFernet requires at least one Fernet instance)�listr�_fernets)rr_rrrr�s�zMultiFernet.__init__)�msgrcCs|�|tt����Sr%r&)rrbrrrr*�szMultiFernet.encrypt)rbr+rcCs|jd�||�S)Nr)rar')rrbr+rrrr'�szMultiFernet.encrypt_at_timec	Csht�|�\}}|jD]0}z|�||d�}WqJWqtyBYq0qt�t�d�}|jd�|||�S)Nrr)rr@rarAr
r r!r,)rrbrBr$�f�pr-rrr�rotate�s


zMultiFernet.rotateN)rbr?rc	Cs:|jD]*}z|�||�WSty.Yq0qt�dSr%)rarDr
)rrbr?rcrrrrD�s
zMultiFernet.decrypt)rbr?r+rc	Cs<|jD],}z|�|||�WSty0Yq0qt�dSr%)rarEr
)rrbr?r+rcrrrrE�s
zMultiFernet.decrypt_at_time)N)rrr
rU�IterablerrrWr*r(r'rer[rDrErrrrr^�s	�r^)rrLr r9r)rUZcryptographyrZcryptography.exceptionsrZcryptography.hazmat.primitivesrrZ&cryptography.hazmat.primitives.ciphersrrrZ#cryptography.hazmat.primitives.hmacr	�	Exceptionr
rR�objectrr^rrrr�<module>s