
    _f                        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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)utils)InvalidSignature)hashespadding)Cipher
algorithmsmodes)HMACc                      e Zd ZdS )InvalidTokenN)__name__
__module____qualname__     E/var/www/html/env/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typing.Union[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_key/   s    '
2777r   datac                j    |                      |t          t          j                                        S Nencrypt_at_timeinttime)r(   r2   s     r   encryptzFernet.encrypt3   s&    ##D#dikk*:*:;;;r   current_timer7   c                X    t          j        d          }|                     |||          S )Nr   )r.   r/   _encrypt_from_parts)r(   r2   r:   ivs       r   r6   zFernet.encrypt_at_time6   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 )Nr2         big)length	byteorder)r   _check_bytesr   PKCS7r	   AES
block_sizepadderupdatefinalizer   r'   r
   CBC	encryptorto_bytesr   r&   r   SHA256r    r-   )r(   r2   r:   r=   rH   padded_datarL   
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typing.Optional[int]c                    t                               |          \  }}|d }n"|t          t          j                              f}|                     |||          S r4   )r   _get_unverified_token_datar7   r8   _decrypt_data)r(   rT   rU   	timestampr2   	time_infos         r   decryptzFernet.decryptS   sW     !;;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   rX   rY   )r(   rT   rU   r:   rZ   r2   s         r   decrypt_at_timezFernet.decrypt_at_time]   sT     ;H   !;;EBB	4!!$	C3FGGGr   c                j    t                               |          \  }}|                     |           |S r4   )r   rX   _verify_signature)r(   rT   rZ   r2   s       r   extract_timestampzFernet.extract_timestampg   s3     ;;EBB	4t$$$r   typing.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      	      rA   )rC   )
isinstancestrr+   	TypeErrorr    r!   r"   r#   r   r%   r7   
from_bytes)rT   r2   rZ   s      r   rX   z!Fernet._get_unverified_token_datam   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   rN   rI   verifyr   r   )r(   r2   rR   s      r   r`   zFernet._verify_signature   sz    "FMOO44	dsd	HHT#$$Z      	 	 		s   A$ $A6rZ   r[   'typing.Optional[typing.Tuple[int, int]]c                   |*|\  }}||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 )Nre      rl   )r   _MAX_CLOCK_SKEWr`   r   r	   rF   r'   r
   rK   	decryptorrI   rJ   r$   r   rE   rG   unpadder)r(   r2   rZ   r[   rU   r:   r=   rP   rr   plaintext_paddedrs   unpaddeds               r   rY   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r4   )r   r   r   r   r   r   )r   r+   )r2   r+   r   r+   )r2   r+   r:   r7   r   r+   )r2   r+   r:   r7   r=   r+   r   r+   )rT   r   rU   rV   r   r+   )rT   r   rU   r7   r:   r7   r   r+   )rT   r   r   r7   )rT   r   r   rb   )r2   r+   r   r   )r2   r+   rZ   r7   r[   rn   r   r+   )r   r   r   r*   classmethodr1   r9   r6   r<   r\   r^   ra   staticmethodrX   r`   rY   r   r   r   r   r      s&        #( ( ( ( (& 8 8 8 [8< < < <@ @ @ @< < < <4 LP> > > > >H H H H       \(   ! ! ! ! ! !r   r   c                  B    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 )MultiFernetfernetstyping.Iterable[Fernet]c                T    t          |          }|st          d          || _        d S )Nz1MultiFernet requires at least one Fernet instance)listr$   _fernets)r(   rz   s     r   r*   zMultiFernet.__init__   s7    w-- 	C    r   msgr+   r   c                j    |                      |t          t          j                                        S r4   r5   )r(   r   s     r   r9   zMultiFernet.encrypt   s&    ##CTY[[)9)9:::r   r:   r7   c                D    | j         d                             ||          S )Nr   )r~   r6   )r(   r   r:   s      r   r6   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   rX   r~   rY   r   r.   r/   r<   )r(   r   rZ   r2   fpr=   s          r   rotatezMultiFernet.rotate   s     ;;C@@	4 	 	AOOD)T::    Z^^}Q33Ay"EEEs   A
AANrU   rV   c                t    | j         D ]*}	 |                    ||          c S # t          $ r Y 'w xY wt          r4   )r~   r\   r   )r(   r   rU   r   s       r   r\   zMultiFernet.decrypt   sZ      	 	Ayyc*****   s   #
00c                v    | j         D ]+}	 |                    |||          c S # t          $ r Y (w xY wt          r4   )r~   r^   r   )r(   r   rU   r:   r   s        r   r^   zMultiFernet.decrypt_at_time   s^      	 	A((c<@@@@@   s   $
11)rz   r{   )r   r+   r   r+   )r   r+   r:   r7   r   r+   )r   r   r   r+   r4   )r   r   rU   rV   r   r+   )r   r   rU   r7   r:   r7   r   r+   )	r   r   r   r*   r9   r6   r   r\   r^   r   r   r   ry   ry      s               ; ; ; ;C C C CF F F F JN         r   ry   )
__future__r   r    r"   r.   r8   typingcryptographyr   cryptography.exceptionsr   cryptography.hazmat.primitivesr   r   &cryptography.hazmat.primitives.ciphersr   r	   r
   #cryptography.hazmat.primitives.hmacr   	Exceptionr   rq   r   ry   r   r   r   <module>r      sF  
 # " " " " "   				         4 4 4 4 4 4 : : : : : : : : L L L L L L L L L L 4 4 4 4 4 4	 	 	 	 	9 	 	 	 P P P P P P P Pf/ / / / / / / / / /r   