Skip to content

Commit d9bae67

Browse files
committed
Added x-amz-checksum-sha256 header for Object Lock support
1 parent 22949ba commit d9bae67

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

S3/Crypto.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,3 +346,11 @@ def calculateChecksum(buffer, mfile, offset, chunk_size, send_chunk):
346346

347347
return md5_hash.hexdigest()
348348
__all__.append("calculateChecksum")
349+
350+
def sha256_hash_to_base64(sha256_hash):
351+
# Extract digest from sha256 hash
352+
sha256_hash_digest = sha256_hash.digest()
353+
# Then convert it to base64
354+
sha256_hash_digest_b64 = base64.b64encode(sha256_hash_digest).decode()
355+
return sha256_hash_digest_b64
356+
__all__.append("sha256_hash_to_base64")

S3/S3.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
from .ConnMan import ConnMan
4848
from .Crypto import (sign_request_v2, sign_request_v4, checksum_sha256_file,
4949
checksum_sha256_buffer, generate_content_md5,
50-
hash_file_md5, calculateChecksum, format_param_str)
50+
hash_file_md5, calculateChecksum, format_param_str, sha256_hash_to_base64)
5151

5252
try:
5353
from ctypes import ArgumentError
@@ -1848,6 +1848,11 @@ def send_file(self, request, stream, labels, buffer = '', throttle = 0,
18481848
sha256_hash = checksum_sha256_file(stream, offset, size_total)
18491849
request.body = sha256_hash
18501850

1851+
# Provide the checksum with the request. This is important for buckets that have
1852+
# Object Lock enabled.
1853+
1854+
headers['x-amz-checksum-sha256'] = sha256_hash_to_base64(sha256_hash)
1855+
18511856
if use_expect_continue:
18521857
if not size_total:
18531858
use_expect_continue = False

0 commit comments

Comments
 (0)