509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
lá˜_\  ã               @   sÐ   d dl mZmZ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	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
„ d
eƒZdZG dd„ deƒZG dd„ deƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚInvalidSignature)Ú_get_backend)ÚhashesÚpadding)ÚCipherÚ
algorithmsÚmodes)ÚHMACc               @   s   e Zd ZdS )ÚInvalidTokenN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/usr/lib64/python3.6/fernet.pyr      s   r   é<   c               @   sp   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 )ÚFernetNc             C   sL   t |ƒ}tj|ƒ}t|ƒdkr&tdƒ‚|d d… | _|dd … | _|| _d S )Né    z4Fernet key must be 32 url-safe base64-encoded bytes.é   )r   Úbase64Úurlsafe_b64decodeÚlenÚ
ValueErrorÚ_signing_keyÚ_encryption_keyÚ_backend)ÚselfÚkeyÚbackendr   r   r   Ú__init__   s    
zFernet.__init__c             C   s   t jtjdƒƒS )Nr   )r   Úurlsafe_b64encodeÚosÚurandom)Úclsr   r   r   Úgenerate_key,   s    zFernet.generate_keyc             C   s   | j |ttjƒ ƒƒS )N)Úencrypt_at_timeÚintÚtime)r   Údatar   r   r   Úencrypt0   s    zFernet.encryptc             C   s   t jdƒ}| j|||ƒS )Nr   )r$   r%   Ú_encrypt_from_parts)r   r+   Úcurrent_timeÚivr   r   r   r(   3   s    
zFernet.encrypt_at_timec             C   s°   t jd|ƒ tjtjjƒjƒ }|j|ƒ|j	ƒ  }t
tj| jƒtj|ƒ| jƒjƒ }|j|ƒ|j	ƒ  }dtjd|ƒ | | }t| jtjƒ | jd�}	|	j|ƒ |	j	ƒ }
tj||
 ƒS )Nr+   ó   €z>Q)r!   )r   Ú_check_bytesr	   ÚPKCS7r   ÚAESÚ
block_sizeÚpadderÚupdateÚfinalizer
   r   r   ÚCBCr   Ú	encryptorÚstructÚpackr   r   r   ÚSHA256r   r#   )r   r+   r.   r/   r5   Zpadded_datar9   Ú
ciphertextZbasic_partsÚhZhmacr   r   r   r-   7   s    
zFernet._encrypt_from_partsc             C   s&   t j|ƒ\}}| j|||ttjƒ ƒƒS )N)r   Ú_get_unverified_token_dataÚ_decrypt_datar)   r*   )r   ÚtokenÚttlÚ	timestampr+   r   r   r   ÚdecryptJ   s    zFernet.decryptc             C   s.   |d krt dƒ‚tj|ƒ\}}| j||||ƒS )Nz6decrypt_at_time() can only be used with a non-None ttl)r   r   r?   r@   )r   rA   rB   r.   rC   r+   r   r   r   Údecrypt_at_timeN   s
    zFernet.decrypt_at_timec             C   s   t j|ƒ\}}| j|ƒ |S )N)r   r?   Ú_verify_signature)r   rA   rC   r+   r   r   r   Úextract_timestampV   s    
zFernet.extract_timestampc             C   s’   t jd| ƒ ytj| ƒ}W n ttjfk
r8   t‚Y nX | sPtj	|dƒdkrTt‚yt
jd|dd… ƒ\}W n t
jk
rˆ   t‚Y nX ||fS )NrA   r   é€   z>Qé   é	   )r   r1   r   r   Ú	TypeErrorÚbinasciiÚErrorr   ÚsixZ
indexbytesr:   ÚunpackÚerror)rA   r+   rC   r   r   r   r?   \   s    

z!Fernet._get_unverified_token_datac             C   s\   t | jtjƒ | jd�}|j|d d… ƒ y|j|dd … ƒ W n tk
rV   t‚Y nX d S )N)r!   r   iàÿÿÿiàÿÿÿ)	r   r   r   r<   r   r6   Zverifyr   r   )r   r+   r>   r   r   r   rF   m   s    zFernet._verify_signaturec             C   sè   |d k	r(|| |k rt ‚|t |k r(t ‚| j|ƒ |dd… }|dd… }ttj| jƒtj|ƒ| j	ƒj
ƒ }|j|ƒ}y||jƒ 7 }W n tk
rœ   t ‚Y nX tjtjjƒjƒ }	|	j|ƒ}
y|
|	jƒ 7 }
W n tk
râ   t ‚Y nX |
S )NrJ   é   r   iàÿÿÿ)r   Ú_MAX_CLOCK_SKEWrF   r
   r   r3   r   r   r8   r   Ú	decryptorr6   r7   r   r	   r2   r4   Úunpadder)r   r+   rC   rB   r.   r/   r=   rS   Zplaintext_paddedrT   Zunpaddedr   r   r   r@   u   s,    




zFernet._decrypt_data)N)N)r   r   r   r"   Úclassmethodr'   r,   r(   r-   rD   rE   rG   Ústaticmethodr?   rF   r@   r   r   r   r   r      s   

r   c               @   s>   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zd	S )ÚMultiFernetc             C   s   t |ƒ}|stdƒ‚|| _d S )Nz1MultiFernet requires at least one Fernet instance)Úlistr   Ú_fernets)r   Zfernetsr   r   r   r"   ”   s
    zMultiFernet.__init__c             C   s   | j |ttjƒ ƒƒS )N)r(   r)   r*   )r   Úmsgr   r   r   r,   œ   s    zMultiFernet.encryptc             C   s   | j d j||ƒS )Nr   )rY   r(   )r   rZ   r.   r   r   r   r(   Ÿ   s    zMultiFernet.encrypt_at_timec             C   sl   t j|ƒ\}}x>| jD ]0}y|j||d d ƒ}P W q tk
rD   Y qX qW t‚tjdƒ}| jd j|||ƒS )Nr   r   )r   r?   rY   r@   r   r$   r%   r-   )r   rZ   rC   r+   ÚfÚpr/   r   r   r   Úrotate¢   s    

zMultiFernet.rotateNc             C   s:   x0| j D ]&}y|j||ƒS  tk
r,   Y qX qW t‚d S )N)rY   rD   r   )r   rZ   rB   r[   r   r   r   rD   °   s    
zMultiFernet.decryptc             C   s<   x2| j D ](}y|j|||ƒS  tk
r.   Y qX qW t‚d S )N)rY   rE   r   )r   rZ   rB   r.   r[   r   r   r   rE   ¸   s    
zMultiFernet.decrypt_at_time)N)	r   r   r   r"   r,   r(   r]   rD   rE   r   r   r   r   rW   “   s   
rW   )Z
__future__r   r   r   r   rL   r$   r:   r*   rN   Zcryptographyr   Zcryptography.exceptionsr   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   r	   Z&cryptography.hazmat.primitives.ciphersr
   r   r   Z#cryptography.hazmat.primitives.hmacr   Ú	Exceptionr   rR   Úobjectr   rW   r   r   r   r   Ú<module>   s    u