B ㊇c;@sdZddlZddlZddlZddlmZddlmZmZddl m Z ddl m Z m Z ddlmZddlmZmZe rdd lmZndZeeZGd d d ZGd d d eZGdddeZGdddeZGdddeZGdddeZGdddZGdddeZ ddZ!d2ddZ"ddZ#d d!Z$d"d#Z%d3d$d%Z&d&d'Z'd(d)Z(d*d+Z)eeed,Z*e rze*+eed-e,e*-Z.d.d/d0d1gZ/dS)4aC The interfaces in this module are not intended for public use. This module defines interfaces for applying checksums to HTTP requests within the context of botocore. This involves both resolving the checksum to be used based on client configuration and environment, as well as application of the checksum to the request. N)crc32)sha1sha256)HAS_CRT)AwsChunkedWrapperErrorFlexibleChecksumError) StreamingBody)conditionally_calculate_md5determine_content_length) checksumsc@s8eZdZdZddZddZddZdd Zd d Zd S) BaseChecksumicCsdS)N)selfchunkr r p/private/var/folders/8c/hx9_v10d5x38qmnzt13b7b8j1k3n5b/T/pip-target-x6xd5gna/lib/python/botocore/httpchecksum.pyupdate.szBaseChecksum.updatecCsdS)Nr )rr r rdigest1szBaseChecksum.digestcCs|}t|dS)Nascii)rbase64 b64encodedecode)rbsr r r b64digest4szBaseChecksum.b64digestcs>}x&tfdddD]}|qW|dS)Ncs jS)N)read _CHUNK_SIZEr )fileobjrr r:z.BaseChecksum._handle_fileobj..r)telliterrseek)rrZstart_positionrr )rrr_handle_fileobj8szBaseChecksum._handle_fileobjcCs,t|ttfr||n |||S)N) isinstancebytes bytearrayrr!r)rbodyr r rhandle>s  zBaseChecksum.handleN) __name__ __module__ __qualname__rrrrr!r&r r r rr +s r c@s$eZdZddZddZddZdS) Crc32ChecksumcCs d|_dS)Nr) _int_crc32)rr r r__init__GszCrc32Checksum.__init__cCst||jd@|_dS)Nl)rr+)rrr r rrJszCrc32Checksum.updatecCs|jjdddS)Nbig) byteorder)r+to_bytes)rr r rrMszCrc32Checksum.digestN)r'r(r)r,rrr r r rr*Fsr*c@s$eZdZddZddZddZdS)CrtCrc32ChecksumcCs d|_dS)Nr)r+)rr r rr,SszCrtCrc32Checksum.__init__cCst||j}|d@|_dS)Nl) crt_checksumsrr+)rr new_checksumr r rrVszCrtCrc32Checksum.updatecCs|jjdddS)Nr-r.)r/)r+r0)rr r rrZszCrtCrc32Checksum.digestN)r'r(r)r,rrr r r rr1Qsr1c@s$eZdZddZddZddZdS)CrtCrc32cChecksumcCs d|_dS)Nr) _int_crc32c)rr r rr,`szCrtCrc32cChecksum.__init__cCst||j}|d@|_dS)Nl)r2crc32cr5)rrr3r r rrcszCrtCrc32cChecksum.updatecCs|jjdddS)Nr-r.)r/)r5r0)rr r rrgszCrtCrc32cChecksum.digestN)r'r(r)r,rrr r r rr4^sr4c@s$eZdZddZddZddZdS) Sha1ChecksumcCs t|_dS)N)r _checksum)rr r rr,lszSha1Checksum.__init__cCs|j|dS)N)r8r)rrr r rroszSha1Checksum.updatecCs |jS)N)r8r)rr r rrrszSha1Checksum.digestN)r'r(r)r,rrr r r rr7ksr7c@s$eZdZddZddZddZdS)Sha256ChecksumcCs t|_dS)N)rr8)rr r rr,wszSha256Checksum.__init__cCs|j|dS)N)r8r)rrr r rrzszSha256Checksum.updatecCs |jS)N)r8r)rr r rr}szSha256Checksum.digestN)r'r(r)r,rrr r r rr9vsr9c@sFeZdZdZdddZddZdd d Zdd d Zd dZddZ dS)AwsChunkedWrapperiNx-amz-checksumcCs2||_||_||_||dkr(|j}||_dS)N)_raw_checksum_name _checksum_cls_reset_DEFAULT_CHUNK_SIZE _chunk_size)rraw checksum_cls checksum_name chunk_sizer r rr,szAwsChunkedWrapper.__init__cCs&d|_d|_d|_|jr"||_dS)NrF) _remaining _completer8r>)rr r rr?s zAwsChunkedWrapper._resetrcCs2|dks|dkrtdd||jddS)Nrz Can only seek to start of stream) error_msg)rr?r<r )roffsetwhencer r rr s zAwsChunkedWrapper.seekcCs|dk r|dkrd}|jr$|js$dS|dkp8|t|jk}x6|jsp|rp|j|7_|dkpl|t|jk}q|ddkrNt|n(|ddkrdt|ntd|dd dS) NrkrSrlzconditional-md5rirergzUnknown checksum variant: %s)rH)rnr _apply_request_header_checksum_apply_request_trailer_checksumr)rarsrhr r rapply_request_checksum s      rvcCsd|didi}|d}|d}||dkr6dSt|d}||d}||d|<dS)NrkrSrlrRrjrhr%)rn _CHECKSUM_CLSr&)rarsrh location_namerCrr r rrt4s  rtcCs|didi}|d}|d}t|d}|d}|d}||krPdSd|d <d |d <||d <t|}|dk rt||d <t|ttfrt|}t |||d|d<dS)NrkrSrlrRrhrjr%chunkedzTransfer-Encodingz aws-chunkedzContent-Encodingz X-Amz-TrailerzX-Amz-Decoded-Content-Length)rCrD) rnrwr strr"r#r$ioBytesIOr:)rarsrhrxrCrjr%rXr r rru@s(   ruc Cs|j}|d}|r||kr|dkr(t}dd|dgD}g}x(tD] }||krVqH||krH||qHW|ddi} || d<| |dd<dS)NZrequestValidationModeMembercSsh|] }|qSr )rp).0ar r r isz7resolve_response_checksum_algorithms..ZresponseAlgorithmsrkrSresponse_algorithms)rmrnro_ALGORITHMS_PRIORITY_LISTappend) rarbrcrrrmZ mode_memberrZusable_algorithmsrhrsr r rr`as    r`c Cs|d}|di}|d}|s&dSxz|D]r}d|}||krBq,d||krPq,|jrht||||d<nt||||d<|ddi}||d<||dd<dSWtd |d dS) NrjrSrzx-amz-checksum-%s-r%rkZresponse_algorithmzXSkipping checksum validation. Response did not contain one of the following algorithms: .)rnZhas_streaming_output_handle_streaming_response_handle_bytes_responseloggerinfo) http_responseresponserkrbrjrsZ algorithmsrh header_namer r rhandle_checksum_bodyys,     rcCs6t|}d|}t|j|dd||d|S)Nzx-amz-checksum-%srjzcontent-length)rwrnrUrB)rrrhrCrr r rrs  rc Csd|j}d|}t|}|}|||d|}|t|kr`d||f}t|d|S)Nzx-amz-checksum-%srjz:Expected checksum %s did not match calculated checksum: %s)rH) contentrwrnrrrr]rr) rrrhr%rrCrSrYrHr r rrs     r)rrr)rr6r6rrr)N)N)0__doc__rr{loggingbinasciirhashlibrrZbotocore.compatrZbotocore.exceptionsrrZbotocore.responserZbotocore.utilsr r Zawscrtr r2 getLoggerr'rr r*r1r4r7r9r:rUrdr_rvrtrur`rrrrwrlistkeysrorr r r rsL         R . " )