
    .Ph3                        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__     S/var/www/html/test/jupyter/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//CC~ 	 	 	F 	 s88r>>F    H"233x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#dikk*:*:;;;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^^''lB???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;    	64(((z~899@@BBmmD))FOO,=,==N4/00IbMM
 
 )++ 	 %%k22Y5G5G5I5II
 ##1#>>?  	 "FMOO44	zz||'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;II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2DD8>* 	 	 		  	tAw$t99q==NN4!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    "FMOO44	dsd	HHT#$$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&\
N4/00%)B--
 

)++ 	 %++J77		 2 2 4 44 	 	 		=!:;;DDFF??#344	))+++HH 	 	 		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TY[[)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OOD)T::    Z^^}Q33Ay"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yy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   