
    @wj                       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j2                  d      Z ej6                         Z G d d      Z G d d      Zy)    )annotationsN)Iterable)utils)InvalidSignature)hashespadding)Cipher
algorithmsmodes)HMACc                      e Zd Zy)InvalidTokenN)__name__
__module____qualname__     Q/root/dashboard-youtube/.venv/lib/python3.12/site-packages/cryptography/fernet.pyr   r      s    r   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y)FernetNc                    	 t        j                  |      }t        |      dk7  rt	        d      |d d | _        |dd  | _        t        j                  | j                        | _
        y # t        j                  $ r}t	        d      |d }~ww xY w)Nz4Fernet key must be 32 url-safe base64-encoded bytes.       )base64urlsafe_b64decodebinasciiError
ValueErrorlen_signing_key_encryption_keyr
   AES_aes)selfkeybackendexcs       r   __init__zFernet.__init__!   s    
	**3/C
 s8r>F   H"23xNN4#7#78	 ~~ 	F	s   A) )B<BBc                R    t        j                  t        j                  d            S )Nr   )r   urlsafe_b64encodeosurandom)clss    r   generate_keyzFernet.generate_key5   s    ''

277r   c                \    | j                  |t        t        j                                     S Nencrypt_at_timeinttime)r&   datas     r   encryptzFernet.encrypt9   s     ##D#diik*:;;r   c                R    t        j                  d      }| j                  |||      S )Nr   )r-   r.   _encrypt_from_parts)r&   r7   current_timeivs       r   r4   zFernet.encrypt_at_time<   s$    ZZ^''lB??r   c                *   t        j                  d|       t        j                         }|j	                  |      |j                         z   }t        | j                  t        j                  |            j                         }|j	                  |      |j                         z   }d|j                  dd      z   |z   |z   }t        | j                  t              }	|	j	                  |       |	j                         }
t        j                   ||
z         S )Nr7         big)length	byteorder)r   _check_bytes
_PKCS7_128padderupdatefinalizer	   r%   r   CBC	encryptorto_bytesr   r"   _SHA256r   r,   )r&   r7   r;   r<   rE   padded_datarI   
ciphertextbasic_partshhmacs              r   r:   zFernet._encrypt_from_parts@   s     	64(""$mmD)FOO,==499eiim4>>@	%%k2Y5G5G5II
 ##1#>?  	 ""G,	zz|''d(:;;r   c                    t         j                  |      \  }}|d }n|t        t        j                               f}| j	                  |||      S r2   )r   _get_unverified_token_datar5   r6   _decrypt_data)r&   tokenttl	timestampr7   	time_infos         r   decryptzFernet.decryptV   sJ     ;;EB	4;Ic$))+./I!!$	9==r   c                v    |t        d      t        j                  |      \  }}| j                  ||||f      S Nz6decrypt_at_time() can only be used with a non-None ttl)r    r   rR   rS   )r&   rT   rU   r;   rV   r7   s         r   decrypt_at_timezFernet.decrypt_at_time^   sI     ;H  !;;EB	4!!$	C3FGGr   c                X    t         j                  |      \  }}| j                  |       |S r2   )r   rR   _verify_signature)r&   rT   rV   r7   s       r   extract_timestampzFernet.extract_timestamph   s*     ;;EB	4t$r   c                :   t        | t        t        f      st        d      	 t	        j
                  |       }|r|d   dk7  rt        t        |      dk  rt        t        j                  |dd d      }||fS # t        t        j                  f$ r t        w xY w)Nztoken must be bytes or strr   r   	      r@   )rB   )
isinstancestrbytes	TypeErrorr   r   r   r   r   r!   r5   
from_bytes)rT   r7   rV   s      r   rR   z!Fernet._get_unverified_token_datan   s    %#u.899	++E2D tAw$t9q=NN4!9N>	$ 8>>* 		s   A: : Bc                    t        | j                  t              }|j                  t	        |      d d        	 |j                  |dd         y # t        $ r t        w xY w)N)r   r"   rK   rF   
memoryviewverifyr   r   )r&   r7   rO   s      r   r]   zFernet._verify_signature   sX    ""G,	D!$3'(	HHT#$Z  		s   A Ac                   |%|\  }}||z   |k  rt         |t        z   |k  rt         | j                  |       t        |      }|dd }|dd }t	        | j
                  t        j                  |            j                         }	|	j                  |      }
	 |
|	j                         z  }
t        j                         }|j                  |
      }	 ||j                         z  }|S # t        $ r t         w xY w# t        $ r t         w xY w)Nr`      rh   )r   _MAX_CLOCK_SKEWr]   ri   r	   r%   r   rH   	decryptorrF   rG   r    rD   unpadder)r&   r7   rV   rW   rU   r;   mvr<   rM   rn   plaintext_paddedro   unpaddeds                r   rS   zFernet._decrypt_data   s      )C3-""o-	9""t$!BZ3Z
499eiim4>>@	$++J7		 2 2 44 &&(??#34	))++H   		  		s   C% C8 %C58Dr2   )r'   bytes | strr(   z
typing.AnyreturnNone)rt   rd   )r7   rd   rt   rd   )r7   rd   r;   r5   rt   rd   )r7   rd   r;   r5   r<   rd   rt   rd   )rT   rs   rU   
int | Nonert   rd   )rT   rs   rU   r5   r;   r5   rt   rd   )rT   rs   rt   r5   )rT   rs   rt   ztuple[int, bytes])r7   rd   rt   ru   )r7   rd   rV   r5   rW   ztuple[int, int] | Nonert   rd   )r   r   r   r*   classmethodr0   r8   r4   r:   rX   r[   r^   staticmethodrR   r]   rS   r   r   r   r   r       s     #99 9 
	9( 8 8<@<<),<27<	<,>H H'*H:=H	H  $     *	 
 
 r   r   c                  V    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	y)MultiFernetc                B    t        |      }|st        d      || _        y )Nz1MultiFernet requires at least one Fernet instance)listr    _fernets)r&   fernetss     r   r*   zMultiFernet.__init__   s'    w-C   r   c                \    | j                  |t        t        j                                     S r2   r3   )r&   msgs     r   r8   zMultiFernet.encrypt   s     ##CTYY[)9::r   c                @    | j                   d   j                  ||      S )Nr   )r}   r4   )r&   r   r;   s      r   r4   zMultiFernet.encrypt_at_time   s    }}Q//\BBr   c                   t         j                  |      \  }}| j                  D ]  }	 |j                  ||d       } n t        t        j                  d      }| j                  d   j                  |||      S # t        $ r Y `w xY w)Nr   r   )r   rR   r}   rS   r   r-   r.   r:   )r&   r   rV   r7   fpr<   s          r   rotatezMultiFernet.rotate   s     ;;C@	4 	AOOD)T:	 ZZ^}}Q33Ay"EE   s   A::	BBNc                    |d }n|t        t        j                               f}t        j                  |      \  }}| j                  D ]  }	 |j                  |||      c S  t        # t        $ r Y +w xY wr2   )r5   r6   r   rR   r}   rS   r   )r&   r   rU   rW   rV   r7   r   s          r   rX   zMultiFernet.decrypt   s|    ;Ic$))+./I ;;C@	4 	AtY	BB	
    s   A))	A54A5c                    |t        d      t        j                  |      \  }}| j                  D ]  }	 |j	                  ||||f      c S  t
        # t
        $ r Y -w xY wrZ   )r    r   rR   r}   rS   r   )r&   r   rU   r;   rV   r7   r   s          r   r[   zMultiFernet.decrypt_at_time   s{     ;H  !;;C@	4 	AtYl8KLL	
    s   A	A A c                    t         j                  |      \  }}| j                  D ]  }	 |j                  |       |c S  t        # t        $ r Y +w xY wr2   )r   rR   r}   r]   r   )r&   r   rV   r7   r   s        r   r^   zMultiFernet.extract_timestamp   s^     ;;C@	4 	A##D)  	    s   A	AA)r~   zIterable[Fernet])r   rd   rt   rd   )r   rd   r;   r5   rt   rd   )r   rs   rt   rd   r2   )r   rs   rU   rv   rt   rd   )r   rs   rU   r5   r;   r5   rt   rd   )r   rs   rt   r5   )
r   r   r   r*   r8   r4   r   rX   r[   r^   r   r   r   rz   rz      sG     ;CF%(8;	 	r   rz   )
__future__r   r   r   r-   r6   typingcollections.abcr   cryptographyr   cryptography.exceptionsr   cryptography.hazmat.primitivesr   r   &cryptography.hazmat.primitives.ciphersr	   r
   r   #cryptography.hazmat.primitives.hmacr   	Exceptionr   rm   PKCS7rD   SHA256rK   r   rz   r   r   r   <module>r      sy   
 #   	   $  4 : L L 4	9 	  W]]3

&--/I IXD Dr   