
    ;3h3                        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y)    )annotationsN)Iterable)utils)InvalidSignature)hashespadding)Cipher
algorithmsmodes)HMACc                      e Zd Zy)InvalidTokenN)__name__
__module____qualname__     S/var/www/html/audio-gradio/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  | _        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_key)selfkeybackendexcs       r   __init__zFernet.__init__   s{    
	**3/C
 s8r>F   H"23x ~~ 	F	s   A A)A$$A)c                R    t        j                  t        j                  d            S )Nr   )r   urlsafe_b64encodeosurandom)clss    r   generate_keyzFernet.generate_key0   s    ''

277r   c                \    | j                  |t        t        j                                     S Nencrypt_at_timeinttime)r#   datas     r   encryptzFernet.encrypt4   s     ##D#diik*:;;r   c                R    t        j                  d      }| j                  |||      S )Nr   )r*   r+   _encrypt_from_parts)r#   r4   current_timeivs       r   r1   zFernet.encrypt_at_time7   s$    ZZ^''lB??r   c                   t        j                  d|       t        j                  t        j
                  j                        j                         }|j                  |      |j                         z   }t        t	        j
                  | j                        t        j                  |            j                         }|j                  |      |j                         z   }d|j                  dd      z   |z   |z   }t!        | j"                  t%        j&                               }	|	j                  |       |	j                         }
t)        j*                  ||
z         S )Nr4         big)length	byteorder)r   _check_bytesr   PKCS7r
   AES
block_sizepadderupdatefinalizer	   r"   r   CBC	encryptorto_bytesr   r!   r   SHA256r   r)   )r#   r4   r8   r9   rD   padded_datarH   
ciphertextbasic_partshhmacs              r   r7   zFernet._encrypt_from_parts;   s    	64(z~~889@@BmmD)FOO,==NN4//0IIbM
 )+ 	 %%k2Y5G5G5II
 ##1#>?  	 ""FMMO4	zz|''d(:;;r   c                    t         j                  |      \  }}|d }n|t        t        j                               f}| j	                  |||      S r/   )r   _get_unverified_token_datar2   r3   _decrypt_data)r#   tokenttl	timestampr4   	time_infos         r   decryptzFernet.decryptT   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   rQ   rR   )r#   rS   rT   r8   rU   r4   s         r   decrypt_at_timezFernet.decrypt_at_time\   sI     ;H  !;;EB	4!!$	C3FGGr   c                X    t         j                  |      \  }}| j                  |       |S r/   )r   rQ   _verify_signature)r#   rS   rU   r4   s       r   extract_timestampzFernet.extract_timestampf   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?   )
isinstancestrbytes	TypeErrorr   r   r   r   r   r    r2   
from_bytes)rS   r4   rU   s      r   rQ   z!Fernet._get_unverified_token_datal   s    %#u.899	++E2D tAw$t9q=NN4!9N>	$ 8>>* 		s   A: : Bc                    t        | j                  t        j                               }|j	                  |d d        	 |j                  |dd         y # t        $ r t        w xY w)N)r   r!   r   rJ   rE   verifyr   r   )r#   r4   rN   s      r   r[   zFernet._verify_signature   sX    ""FMMO4	ds	HHT#$Z  		s   A A#c                t   |%|\  }}||z   |k  rt         |t        z   |k  rt         | j                  |       |dd }|dd }t        t	        j
                  | j                        t        j                  |            j                         }|j                  |      }		 |	|j                         z  }	t        j                  t        j
                  j                        j!                         }
|
j                  |	      }	 ||
j                         z  }|S # t        $ r t         w xY w# t        $ r t         w xY w)Nr_      rg   )r   _MAX_CLOCK_SKEWr[   r	   r
   rB   r"   r   rG   	decryptorrE   rF   r   r   rA   rC   unpadder)r#   r4   rU   rV   rT   r8   r9   rL   rl   plaintext_paddedrm   unpaddeds               r   rR   zFernet._decrypt_data   s7      )C3-""o-	9""t$!BZ"S\
NN4//0%))B-

)+ 	 %++J7		 2 2 44 ==!:!:;DDF??#34	))++H   		  		s   D ?D' D$'D7r/   )r$   bytes | strr%   z
typing.AnyreturnNone)rq   rc   )r4   rc   rq   rc   )r4   rc   r8   r2   rq   rc   )r4   rc   r8   r2   r9   rc   rq   rc   )rS   rp   rT   
int | Nonerq   rc   )rS   rp   rT   r2   r8   r2   rq   rc   )rS   rp   rq   r2   )rS   rp   rq   ztuple[int, bytes])r4   rc   rq   rr   )r4   rc   rU   r2   rV   ztuple[int, int] | Nonerq   rc   )r   r   r   r'   classmethodr-   r5   r1   r7   rW   rY   r\   staticmethodrQ   r[   rR   r   r   r   r   r      s     #(( ( 
	(& 8 8<@<<),<27<	<2>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 r/   r0   )r#   msgs     r   r5   zMultiFernet.encrypt   s     ##CTYY[)9::r   c                @    | j                   d   j                  ||      S )Nr   )rz   r1   )r#   r}   r8   s      r   r1   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   rQ   rz   rR   r   r*   r+   r7   )r#   r}   rU   r4   fpr9   s          r   rotatezMultiFernet.rotate   s     ;;C@	4 	AOOD)T:	 ZZ^}}Q33Ay"EE   s   A::	BBNc                v    | j                   D ]  }	 |j                  ||      c S  t        # t        $ r Y *w xY wr/   )rz   rW   r   )r#   r}   rT   r   s       r   rW   zMultiFernet.decrypt   sG     	Ayyc**	
    s   ,	88c                x    | j                   D ]  }	 |j                  |||      c S  t        # t        $ r Y +w xY wr/   )rz   rY   r   )r#   r}   rT   r8   r   s        r   rY   zMultiFernet.decrypt_at_time   sM      	A((c<@@	
    s   -	99c                t    | j                   D ]  }	 |j                  |      c S  t        # t        $ r Y )w xY wr/   )rz   r\   r   )r#   r}   r   s      r   r\   zMultiFernet.extract_timestamp   sG     	A**3//	
    s   +	77)r{   zIterable[Fernet])r}   rc   rq   rc   )r}   rc   r8   r2   rq   rc   )r}   rp   rq   rc   r/   )r}   rp   rT   rs   rq   rc   )r}   rp   rT   r2   r8   r2   rq   rc   )r}   rp   rq   r2   )
r   r   r   r'   r5   r1   r   rW   rY   r\   r   r   r   rw   rw      sG     ;CF%(8;	r   rw   )
__future__r   r   r   r*   r3   typingcollections.abcr   cryptographyr   cryptography.exceptionsr   cryptography.hazmat.primitivesr   r   &cryptography.hazmat.primitives.ciphersr	   r
   r   #cryptography.hazmat.primitives.hmacr   	Exceptionr   rk   r   rw   r   r   r   <module>r      sX   
 #   	   $  4 : L L 4	9 	 L L^5 5r   