
    'wf"                         d dl Z d dl mZ d dlmZ d dlmZ ddlmZ 	 d dlZ G d d      Z
 G d	 d
e
      Z G d de
      Z G d de
      Zdee   de
fdZy# e	$ r dZY @w xY w)    N)	b64encode)md5)Optional   )ChecksumErrorc                   0    e Zd Zd ZdefdZd Zd Zd Zy)ConsistencyCheckerc                      y N selfs    b/home/panchajanya/Development/work/volatility3/venv/lib/python3.12/site-packages/gcsfs/checkers.py__init__zConsistencyChecker.__init__           datac                      y r   r   r   r   s     r   updatezConsistencyChecker.update   r   r   c                      y r   r   r   
gcs_objects     r   validate_json_responsez)ConsistencyChecker.validate_json_response   r   r   c                      y r   r   )r   headerss     r   validate_headersz#ConsistencyChecker.validate_headers   r   r   c                      y r   r   r   rs     r   validate_http_responsez)ConsistencyChecker.validate_http_response   r   r   N	__name__
__module____qualname__r   bytesr   r   r   r!   r   r   r   r	   r	      s"    5 r   r	   c                   *    e Zd Zd Zd Zd Zd Zd Zy)
MD5Checkerc                 "    t               | _        y r   )r   mdr   s    r   r   zMD5Checker.__init__    s    %r   c                 :    | j                   j                  |       y r   )r*   r   r   s     r   r   zMD5Checker.update#   s    tr   c                     |d   }t        | j                  j                               |j                         k7  rt	        d      y )Nmd5HashzMD5 checksum failed)r   r*   digestencoder   )r   r   mdbacks      r   r   z!MD5Checker.validate_json_response&   s;    I&TWW^^%&&--/9 566 :r   c                 n   |d|v r|d   j                  d      D cg c]-  }|j                  d      d   dk(  r|j                  d      d   / }}|rRt        | j                  j                               j	                         j                  d      |d   k7  rt        d      y t        d      y y c c}w )	NX-Goog-Hash,=r   r   r   zChecksum failurezgNo md5 checksum available to do consistency check. GCS does not provide md5 sums for composite objects.)splitr   r*   r.   decoderstripr   NotImplementedError)r   r   bitdigs       r   r   zMD5Checker.validate_headers+   s    =G#; #=177<99S>!$- 		#q!C 
 TWW^^-.557>>sCs1vM'(:;; N *B  $<s   2B2c                 8    | j                  |j                        S r   r   r   r   s     r   r!   z!MD5Checker.validate_http_response<       $$QYY//r   N)r#   r$   r%   r   r   r   r   r!   r   r   r   r(   r(      s    7
"0r   r(   c                   *    e Zd Zd ZdefdZd Zd Zy)SizeCheckerc                     d| _         y )Nr   )sizer   s    r   r   zSizeChecker.__init__A   s	    	r   r   c                 @    | xj                   t        |      z  c_         y r   )rA   lenr   s     r   r   zSizeChecker.updateD   s    		SY	r   c                 H    t        |d         | j                  k(  sJ d       y )NrA   zSize mismatch)intrA   r   s     r   r   z"SizeChecker.validate_json_responseG   s#    :f%&$))3D_D3r   c                 :    |j                   | j                  k(  sJ y r   )content_lengthrA   r   s     r   r!   z"SizeChecker.validate_http_responseJ   s    499,,,r   N)r#   r$   r%   r   r&   r   r   r!   r   r   r   r?   r?   @   s    5 E-r   r?   c                   0    e Zd Zd ZdefdZd Zd Zd Zy)Crc32cCheckerc                 >    t        j                  ddd      | _        y )Nl   Ao= r   l    )initCrcxorOut)crcmodCrccrc32cr   s    r   r   zCrc32cChecker.__init__O   s    jja
Kr   r   c                 :    | j                   j                  |       y r   )rO   r   r   s     r   r   zCrc32cChecker.updateR   s    4 r   c                     | j                   j                         }t        j                  |      j	                         }|d   }||k7  rt        d| d| d      y )NrO   z
Expected "z". Got "")rO   r.   base64r   r6   r   )r   r   r.   
digest_b64expecteds        r   r   z$Crc32cChecker.validate_json_responseU   s^    ##%%%f-446
h'!*XJhzl! LMM "r   c                 @   ||j                  dd      }|j                  d      D cg c]  }d|v s|j                  dd      d    }}|st        d      |d   t        | j                  j                               j                         k7  r
t               y y c c}w )	Nr2    r3   rO   r4   r   z*No crc32c checksum was provided by google!r   )getr5   r8   r   rO   r.   r6   r   )r   r   hasherhcrcs        r   r   zCrc32cChecker.validate_headers^   s    [[3F/5||C/@R!HPQM1773?1%RCR)*VWW1v4;;#5#5#78??AA#o% B Rs
   	BBc                 8    | j                  |j                        S r   r<   r   s     r   r!   z$Crc32cChecker.validate_http_responseg   r=   r   Nr"   r   r   r   rI   rI   N   s$    L!5 !N&0r   rI   consistencyreturnc                     | dk(  r
t               S | dk(  r
t               S | dk(  rt        t        d      t	               S t               S )NrA   r   rO   zwThe python package `crcmod` is required for `consistency='crc32c'`. This can be installed with `pip install gcsfs[crc]`)r?   r(   rM   ImportErrorrI   r	   )r]   s    r   get_consistency_checkerra   k   sU    f}		|		 >F 
 !?"!##r   )rS   r   hashlibr   typingr   retryr   rM   r`   r	   r(   r?   rI   strra   r   r   r   <module>rf      s}         
 "0# 0B-$ -0& 0:$# $;M $C  Fs   A A#"A#