As reported in https://github.com/localstack/localstack/issues/6659#issuecomment-1630932643_, `HeadObject` does not respect `ChecksumMode`. 


```shell
at 09:31:57 ➜ AWS_DEFAULT_REGION=us-west-1 aws --endpoint-url=http://localhost:4566 s3api create-bucket --bucket test-bucket --create-bucket-configuration LocationConstraint=us-west-1
{
    "Location": "http://test-bucket.s3.localhost.localstack.cloud:4566/"
}

at 09:32:13 ➜ aws --endpoint-url=http://localhost:4566 s3api put-object --bucket test-bucket --key file.json --body README.md --checksum-algorithm SHA256
{
    "ETag": "\"4bb2f1387449d690bff6336ea255909c\"",
    "ChecksumSHA256": "bzOikXXMUqRTCrpVq7Pt7LjJ0fjR3ccUfM19S/gnfqA="
}

# SHA256 missing here
at 09:32:20 ➜ aws --endpoint-url=http://localhost:4566 s3api head-object --bucket test-bucket --key file.json --checksum-mode Enabled
{
    "AcceptRanges": "bytes",
    "LastModified": "2023-07-11T13:32:15+00:00",
    "ContentLength": 1455,
    "ETag": "\"4bb2f1387449d690bff6336ea255909c\"",
    "ContentType": "binary/octet-stream",
    "Metadata": {}
}
```

Note the equivalent response from S3 actual includes the SHA256 value

```shell
at 10:21:23 ➜ aws s3api head-object --bucket test-bucket --key file.json --checksum-mode Enabled
{
    "AcceptRanges": "bytes",
    "Expiration": "expiry-date=\"Thu, 13 Jul 2023 00:00:00 GMT\", rule-id=\"all\"",
    "LastModified": "2023-07-11T14:21:09+00:00",
    "ContentLength": 1956,
    "ChecksumSHA256": "bj7fqCqtaF95M1ULwQRDJuHbL/Xd9NVMH6pua9OINcc=",
    "ETag": "\"f4be535d45019a4408dd5369986919f8\"",
    "ContentEncoding": "",
    "ContentType": "binary/octet-stream",
   
    "Metadata": {},
    
}
```

_Originally posted by @bdurrani in https://github.com/localstack/localstack/issues/6659#issuecomment-1630932643_
            
store = self.get_store(context)
        
        if bucket in store.bucket_versioning_status and "VersionId" not in response:
            response["VersionId"] = "null"
        for request_param, response_param in s3_constants.ALLOWED_HEADER_OVERRIDES.items():
            if request_param_value := request.get(request_param):  
                response[response_param] = request_param_value  
        moto_backend = get_moto_s3_backend(context)
        moto_bucket = get_bucket_from_moto(moto_backend, bucket=bucket)
        key_object = get_key_from_moto_bucket(moto_bucket, key=key, version_id=version_id)
        if not config.S3_SKIP_KMS_KEY_VALIDATION and key_object.kms_key_id:
            validate_kms_key_id(kms_key=key_object.kms_key_id, bucket=moto_bucket)
        if checksum_algorithm := key_object.checksum_algorithm:
            
            response["ContentEncoding"] = ""
        if request.get("ChecksumMode") == "ENABLED" and checksum_algorithm:
            response[f"Checksum{checksum_algorithm.upper()}"] = key_object.checksum_value  
        if not version_id and (
            (bucket_lifecycle_config := store.bucket_lifecycle_configuration.get(request["Bucket"]))
            and (rules := bucket_lifecycle_config.get("Rules"))
        ):
            object_tags = moto_backend.tagger.get_tag_dict_for_resource(key_object.arn)
            if expiration_header := self._get_expiration_header(rules, key_object, object_tags):
                
                
                response["Expiration"] = expiration_header
        response["AcceptRanges"] = "bytes"
        return response
    @handler("PutObject", expand=False)
    def put_object(