
    (ph3                        S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJr  S SKJrJr  S SKJrJrJr  S SKJr   " S	 S
\5      rSr " S S5      r " S S5      rg)    )annotationsN)Iterable)utils)InvalidSignature)hashespadding)Cipher
algorithmsmodes)HMACc                      \ rS rSrSrg)InvalidToken    N)__name__
__module____qualname____firstlineno____static_attributes__r       F/var/www/html/venv/lib/python3.13/site-packages/cryptography/fernet.pyr   r      s    r   r   <   c                      \ rS rSr S     SS jjr\SS j5       rSS jrSS jr        SS jr	SSS jjr
        SS	 jrSS
 jr\SS j5       rSS jr        SS jrSrg)Fernet   Nc                     [         R                  " U5      n[        U5      S:w  a  [	        S5      eUS S U l        USS  U l        g ! [        R                   a  n[	        S5      UeS nAff = f)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__Fernet.__init__   s{    
	**3/C
 s8r>F   H"23x ~~ 	F	s   A A,A''A,c                V    [         R                  " [        R                  " S5      5      $ )Nr   )r   urlsafe_b64encodeosurandom)clss    r   generate_keyFernet.generate_key0   s    ''

277r   c                ^    U R                  U[        [        R                  " 5       5      5      $ Nencrypt_at_timeinttime)r'   datas     r   encryptFernet.encrypt4   s     ##D#diik*:;;r   c                R    [         R                  " S5      nU R                  XU5      $ )Nr   )r/   r0   _encrypt_from_parts)r'   r:   current_timeivs       r   r7   Fernet.encrypt_at_time7   s"    ZZ^''B??r   c                   [         R                  " SU5        [        R                  " [        R
                  R                  5      R                  5       nUR                  U5      UR                  5       -   n[        [        R
                  " U R                  5      [        R                  " U5      5      R                  5       nUR                  U5      UR                  5       -   nSUR                  SSS9-   U-   U-   n[!        U R"                  [$        R&                  " 5       5      n	U	R                  U5        U	R                  5       n
[(        R*                  " X-   5      $ )Nr:         big)length	byteorder)r   _check_bytesr   PKCS7r
   AES
block_sizepadderupdatefinalizer	   r&   r   CBC	encryptorto_bytesr   r%   r   SHA256r   r.   )r'   r:   r?   r@   rL   padded_datarP   
ciphertextbasic_partshhmacs              r   r>   Fernet._encrypt_from_parts;   s    	64(z~~889@@BmmD)FOO,==NN4//0IIbM
 )+ 	 %%k2Y5G5G5II
 ##1#>?  	 ""FMMO4	zz|''(:;;r   c                    [         R                  U5      u  p4Uc  S nO U[        [        R                  " 5       5      4nU R	                  XCU5      $ r5   )r   _get_unverified_token_datar8   r9   _decrypt_data)r'   tokenttl	timestampr:   	time_infos         r   decryptFernet.decryptT   sF     ;;EB	;Ic$))+./I!!$9==r   c                r    Uc  [        S5      e[        R                  U5      u  pEU R                  XTX#45      $ )Nz6decrypt_at_time() can only be used with a non-None ttl)r#   r   rZ   r[   )r'   r\   r]   r?   r^   r:   s         r   decrypt_at_timeFernet.decrypt_at_time\   sC     ;H  !;;EB	!!$C3FGGr   c                V    [         R                  U5      u  p#U R                  U5        U$ r5   )r   rZ   _verify_signature)r'   r\   r^   r:   s       r   extract_timestampFernet.extract_timestampf   s(     ;;EB	t$r   c                N   [        U [        [        45      (       d  [        S5      e [        R
                  " U 5      nU(       a	  US   S:w  a  [        e[        U5      S:  a  [        e[        R                  USS SS9nX!4$ ! [        [        R                  4 a    [        ef = f)Nztoken must be bytes or strr      	      rE   )rG   )
isinstancestrbytes	TypeErrorr   r    r!   r"   r   r$   r8   
from_bytes)r\   r:   r^   s      r   rZ   !Fernet._get_unverified_token_datal   s    %#u..899	++E2D tAw$t9q=NN4!9N>	 8>>* 		s   B !B$c                    [        U R                  [        R                  " 5       5      nUR	                  US S 5         UR                  USS  5        g ! [         a    [        ef = f)N)r   r%   r   rR   rM   verifyr   r   )r'   r:   rV   s      r   rf   Fernet._verify_signature   sX    ""FMMO4	ds	HHT#$Z  		s   A A%c                |   Ub%  Uu  pEX$-   U:  a  [         eU[        -   U:  a  [         eU R                  U5        USS nUSS n[        [        R
                  " U R                  5      [        R                  " U5      5      R                  5       nUR                  U5      n	 XR                  5       -  n	[        R                  " [        R
                  R                  5      R!                  5       n
U
R                  U	5      n XR                  5       -  nU$ ! [         a    [         ef = f! [         a    [         ef = f)Nrk      rt   )r   _MAX_CLOCK_SKEWrf   r	   r
   rJ   r&   r   rO   	decryptorrM   rN   r#   r   rI   rK   unpadder)r'   r:   r^   r_   r]   r?   r@   rT   rz   plaintext_paddedr{   unpaddeds               r   r[   Fernet._decrypt_data   s/      )C-""o-	9""t$!BZ"S\
NN4//0%))B-

)+ 	 %++J7	 2 2 44 ==!:!:;DDF??#34	))++H   		  		s   "D D* D'*D;)r&   r%   r5   )r(   bytes | strr)   z
typing.AnyreturnNone)r   ro   )r:   ro   r   ro   )r:   ro   r?   r8   r   ro   )r:   ro   r?   r8   r@   ro   r   ro   )r\   r   r]   
int | Noner   ro   )r\   r   r]   r8   r?   r8   r   ro   )r\   r   r   r8   )r\   r   r   ztuple[int, bytes])r:   ro   r   r   )r:   ro   r^   r8   r_   ztuple[int, int] | Noner   ro   )r   r   r   r   r+   classmethodr2   r;   r7   r>   r`   rc   rg   staticmethodrZ   rf   r[   r   r   r   r   r   r      s     #(( ( 
	(& 8 8<@<<),<27<	<2>H H'*H:=H	H  $!! ! *	!
 
!r   r   c                  n    \ rS rSrSS jrSS jrSS jrSS jrSSS jjr        SS jr	SS	 jr
S
rg)MultiFernet   c                J    [        U5      nU(       d  [        S5      eXl        g )Nz1MultiFernet requires at least one Fernet instance)listr#   _fernets)r'   fernetss     r   r+   MultiFernet.__init__   s%    w-C   r   c                ^    U R                  U[        [        R                  " 5       5      5      $ r5   r6   )r'   msgs     r   r;   MultiFernet.encrypt   s     ##CTYY[)9::r   c                >    U R                   S   R                  X5      $ )Nr   )r   r7   )r'   r   r?   s      r   r7   MultiFernet.encrypt_at_time   s    }}Q//BBr   c                   [         R                  U5      u  p#U R                   H  n UR                  X2S 5      n  O   [        e[
        R                  " S5      nU R                  S   R                  XRU5      $ ! [         a     Mb  f = f)Nr   r   )r   rZ   r   r[   r   r/   r0   r>   )r'   r   r^   r:   fpr@   s          r   rotateMultiFernet.rotate   s     ;;C@	AOODT:  ZZ^}}Q33A"EE   s   A99
BBNc                z    U R                    H  n UR                  X5      s  $    [        e! [         a     M,  f = fr5   )r   r`   r   )r'   r   r]   r   s       r   r`   MultiFernet.decrypt   s@    Ayy** 
       ,
::c                |    U R                    H  n UR                  XU5      s  $    [        e! [         a     M-  f = fr5   )r   rc   r   )r'   r   r]   r?   r   s        r   rc   MultiFernet.decrypt_at_time   sF     A((<@@ 
    s   -
;;c                z    U R                    H  n UR                  U5      s  $    [        e! [         a     M,  f = fr5   )r   rg   r   )r'   r   r   s      r   rg   MultiFernet.extract_timestamp   sB    A**3// 
    r   )r   )r   zIterable[Fernet])r   ro   r   ro   )r   ro   r?   r8   r   ro   )r   r   r   ro   r5   )r   r   r]   r   r   ro   )r   r   r]   r8   r?   r8   r   ro   )r   r   r   r8   )r   r   r   r   r+   r;   r7   r   r`   rc   rg   r   r   r   r   r   r      sG     ;CF%(8;	r   r   )
__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   ry   r   r   r   r   r   <module>r      sX   
 #   	   $  4 : L L 4	9 	 L L^5 5r   