
    Bf"                         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n# e	$ r dZY nw xY w 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dS )    N)	b64encode)md5)Optional   )ChecksumErrorc                   2    e Zd Zd ZdefdZd Zd Zd ZdS )ConsistencyCheckerc                     d S N selfs    ]/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/gcsfs/checkers.py__init__zConsistencyChecker.__init__           datac                     d S r   r   r   r   s     r   updatezConsistencyChecker.update   r   r   c                     d S r   r   r   
gcs_objects     r   validate_json_responsez)ConsistencyChecker.validate_json_response   r   r   c                     d S r   r   )r   headerss     r   validate_headersz#ConsistencyChecker.validate_headers   r   r   c                     d S 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	      sk          5            r   r	   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
MD5Checkerc                 ,    t                      | _        d S r   )r   mdr   s    r   r   zMD5Checker.__init__    s    %%r   c                 :    | j                             |           d S r   )r*   r   r   s     r   r   zMD5Checker.update#   s    tr   c                     |d         }t          | j                                                  |                                k    rt	          d          d S )Nmd5HashzMD5 checksum failed)r   r*   digestencoder   )r   r   mdbacks      r   r   z!MD5Checker.validate_json_response&   sJ    I&TW^^%%&&&--//99 5666 :9r   c                 N   |d|v rd |d                              d          D             }|rft          | j                                                                                                      d          |d         k    rt          d          d S t          d          d S d S )NX-Goog-Hashc                     g | ]<}|                     d           d         dk    !|                     d           d         =S )=r   r   r   split).0bits     r   
<listcomp>z/MD5Checker.validate_headers.<locals>.<listcomp>.   sK       99S>>!$-- 		#q!---r   ,r4   r   zChecksum failurezgNo md5 checksum available to do consistency check. GCS does not provide md5 sums for composite objects.)r6   r   r*   r.   decoderstripr   NotImplementedError)r   r   digs      r   r   zMD5Checker.validate_headers+   s    =G#;#; "=177<<  C
  TW^^--..5577>>sCCs1vMM'(:;;; NM *B   #;#;r   c                 6    |                      |j                  S r   r   r   r   s     r   r!   z!MD5Checker.validate_http_response<       $$QY///r   N)r#   r$   r%   r   r   r   r   r!   r   r   r   r(   r(      s_            7 7 7
  "0 0 0 0 0r   r(   c                   ,    e Zd Zd ZdefdZd Zd ZdS )SizeCheckerc                     d| _         d S )Nr   )sizer   s    r   r   zSizeChecker.__init__A   s    			r   r   c                 @    | xj         t          |          z  c_         d S r   )rE   lenr   s     r   r   zSizeChecker.updateD   s    		SYY				r   c                 V    t          |d                   | j        k    s
J d            d S )NrE   zSize mismatch)intrE   r   s     r   r   z"SizeChecker.validate_json_responseG   s0    :f%&&$)333_33333r   c                 *    |j         | j        k    sJ d S r   )content_lengthrE   r   s     r   r!   z"SizeChecker.validate_http_responseJ   s    49,,,,,,r   N)r#   r$   r%   r   r&   r   r   r!   r   r   r   rC   rC   @   s_          5    E E E- - - - -r   rC   c                   2    e Zd Zd ZdefdZd Zd Zd ZdS )Crc32cCheckerc                 >    t          j        ddd          | _        d S )Nl   Ao= r   l    )initCrcxorOut)crcmodCrccrc32cr   s    r   r   zCrc32cChecker.__init__O   s    ja
KKKr   r   c                 :    | j                             |           d S r   )rS   r   r   s     r   r   zCrc32cChecker.updateR   s    4     r   c                     | j                                         }t          j        |                                          }|d         }||k    rt          d| d| d          d S )NrS   z
Expected "z". Got "")rS   r.   base64r   r;   r   )r   r   r.   
digest_b64expecteds        r   r   z$Crc32cChecker.validate_json_responseU   sp    ##%%%f--4466
h'!! LX L Lz L L LMMM "!r   c                 :   ||                     dd          }d |                    d          D             }|st          d          |d         t          | j                                                                                  k    rt                      d S d S )Nr2    c                 N    g | ]"}d |v |                     dd          d         #S )rS   r4   r   r5   )r7   hs     r   r9   z2Crc32cChecker.validate_headers.<locals>.<listcomp>a   s/    RRR!HPQMM1773??1%MMMr   r:   z*No crc32c checksum was provided by google!r   )getr6   r=   r   rS   r.   r;   r   )r   r   hashercrcs       r   r   zCrc32cChecker.validate_headers^   s    [[33FRRv||C/@/@RRRC X)*VWWW1v4;#5#5#7#788??AAAA#oo% 
 BAr   c                 6    |                      |j                  S r   r@   r   s     r   r!   z$Crc32cChecker.validate_http_responseg   rA   r   Nr"   r   r   r   rM   rM   N   sq        L L L!5 ! ! ! !N N N& & &0 0 0 0 0r   rM   consistencyreturnc                     | dk    rt                      S | dk    rt                      S | dk    r$t          t          d          t	                      S t                      S )NrE   r   rS   zwThe python package `crcmod` is required for `consistency='crc32c'`. This can be installed with `pip install gcsfs[crc]`)rC   r(   rQ   ImportErrorrM   r	   )rb   s    r   get_consistency_checkerrf   k   sl    f}}			||		 	 >F  
 !??"!###r   )rW   r   hashlibr   typingr   retryr   rQ   re   r	   r(   rC   rM   strrf   r   r   r   <module>rk      se                                 MMMM   FFF       "0 0 0 0 0# 0 0 0B- - - - -$ - - -0 0 0 0 0& 0 0 0:$# $;M $ $ $ $ $ $s   # --