
    #	h                        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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)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       E/var/www/html/env/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_key/   s    ''

277r   c                ^    U R                  U[        [        R                  " 5       5      5      $ Nencrypt_at_timeinttime)r&   datas     r   encryptFernet.encrypt3   s     ##D#diik*:;;r   c                R    [         R                  " S5      nU R                  XU5      $ )Nr   )r.   r/   _encrypt_from_parts)r&   r9   current_timeivs       r   r6   Fernet.encrypt_at_time6   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      $ )Nr9         big)length	byteorder)r   _check_bytesr   PKCS7r	   AES
block_sizepadderupdatefinalizer   r%   r
   CBC	encryptorto_bytesr   r$   r   SHA256r   r-   )r&   r9   r>   r?   rK   padded_datarO   
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      $ r4   )r   _get_unverified_token_datar7   r8   _decrypt_data)r&   tokenttl	timestampr9   	time_infos         r   decryptFernet.decryptS   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   rY   rZ   )r&   r[   r\   r>   r]   r9   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$ r4   )r   rY   _verify_signature)r&   r[   r]   r9   s       r   extract_timestampFernet.extract_timestampe   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      	      rD   )rF   )
isinstancestrbytes	TypeErrorr   r   r    r!   r   r#   r7   
from_bytes)r[   r9   r]   s      r   rY   !Fernet._get_unverified_token_datak   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   rQ   rL   verifyr   r   )r&   r9   rU   s      r   re   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)Nrj      rs   )r   _MAX_CLOCK_SKEWre   r   r	   rI   r%   r
   rN   	decryptorrL   rM   r"   r   rH   rJ   unpadder)r&   r9   r]   r^   r\   r>   r?   rS   ry   plaintext_paddedrz   unpaddeds               r   rZ   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$   r4   )r'   bytes | strr(   z
typing.AnyreturnNone)r   rn   )r9   rn   r   rn   )r9   rn   r>   r7   r   rn   )r9   rn   r>   r7   r?   rn   r   rn   )r[   r~   r\   
int | Noner   rn   )r[   r~   r\   r7   r>   r7   r   rn   )r[   r~   r   r7   )r[   r~   r   ztuple[int, bytes])r9   rn   r   r   )r9   rn   r]   r7   r^   ztuple[int, int] | Noner   rn   )r   r   r   r   r*   classmethodr1   r:   r6   r=   r_   rb   rf   staticmethodrY   re   rZ   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      $ r4   r5   )r&   msgs     r   r:   MultiFernet.encrypt   s     ##CTYY[)9::r   c                >    U R                   S   R                  X5      $ )Nr   )r   r6   )r&   r   r>   s      r   r6   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   rY   r   rZ   r   r.   r/   r=   )r&   r   r]   r9   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r4   )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r4   )r   rb   r   )r&   r   r\   r>   r   s        r   rb   MultiFernet.decrypt_at_time   sF     A((<@@ 
    s   -
;;c                z    U R                    H  n UR                  U5      s  $    [        e! [         a     M,  f = fr4   )r   rf   r   )r&   r   r   s      r   rf   MultiFernet.extract_timestamp   sB    A**3// 
    r   )r   )r   ztyping.Iterable[Fernet])r   rn   r   rn   )r   rn   r>   r7   r   rn   )r   r~   r   rn   r4   )r   r~   r\   r   r   rn   )r   r~   r\   r7   r>   r7   r   rn   )r   r~   r   r7   )r   r   r   r   r*   r:   r6   r   r_   rb   rf   r   r   r   r   r   r      sG     ;CF%(8;	r   r   )
__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   rx   r   r   r   r   r   <module>r      sU   
 #   	    4 : L L 4	9 	 L L^5 5r   