in S3_HLS_S3_Put_Client.c [525:622]
static int32_t S3_HLS_Hash_Put_Canonical_Request(S3_HLS_CLIENT_CTX* ctx, char* object_key, S3_SHA256_HASH result) {
S3_SHA256_CTX sha256_ctx;
S3_SHA256_Init(&sha256_ctx);
PUT_DEBUG("Hash Canonical Request:\n");
// PUT\n
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_METHOD);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_METHOD, strlen(S3_HLS_CANONICAL_REQUEST_METHOD)); // PUT
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE)); // \n
// Canonical object key\n
PUT_DEBUG("%s", object_key);
S3_SHA256_Update(&sha256_ctx, object_key, strlen(object_key));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
// Canonical Query String\n
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
// Headers
/*
// Content=Length
PUT_DEBUG("%s", s3_hls_content_length_header_buffer);
S3_SHA256_Update(&sha256_ctx, s3_hls_content_length_header_buffer, strlen(s3_hls_content_length_header_buffer));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
*/
// Host
PUT_DEBUG("%s", ctx->host_header);
S3_SHA256_Update(&sha256_ctx, ctx->host_header, strlen(ctx->host_header));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
// Range
PUT_DEBUG("%s", S3_HLS_RANGE_HEADER_FORMAT);
S3_SHA256_Update(&sha256_ctx, S3_HLS_RANGE_HEADER_FORMAT, strlen(S3_HLS_RANGE_HEADER_FORMAT));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
// Content Hash
PUT_DEBUG("%s", ctx->content_hash);
S3_SHA256_Update(&sha256_ctx, ctx->content_hash, strlen(ctx->content_hash));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
// Request Time
PUT_DEBUG("%s", ctx->timestamp_buffer);
S3_SHA256_Update(&sha256_ctx, ctx->timestamp_buffer, strlen(ctx->timestamp_buffer));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
if(NULL != ctx->token_header) {
PUT_DEBUG("%s", ctx->token_header);
S3_SHA256_Update(&sha256_ctx, ctx->token_header, strlen(ctx->token_header));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
}
if(NULL != ctx->tag_header) {
PUT_DEBUG("%s", ctx->tag_header);
S3_SHA256_Update(&sha256_ctx, ctx->tag_header, strlen(ctx->tag_header));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
}
// Headers End
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
// Signed Headers
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_SIGNED_HEADERS_FORMAT);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_SIGNED_HEADERS_FORMAT, strlen(S3_HLS_CANONICAL_REQUEST_SIGNED_HEADERS_FORMAT));
if(NULL != ctx->token_header) {
PUT_DEBUG("%s", S3_HLS_TOKEN_HEADER_IN_CANONICAL_REQUEST);
S3_SHA256_Update(&sha256_ctx, S3_HLS_TOKEN_HEADER_IN_CANONICAL_REQUEST, strlen(S3_HLS_TOKEN_HEADER_IN_CANONICAL_REQUEST)); // ;
}
if(NULL != ctx->tag_header) {
PUT_DEBUG("%s", S3_HLS_TAG_HEADER_IN_CANONICAL_REQUEST);
S3_SHA256_Update(&sha256_ctx, S3_HLS_TAG_HEADER_IN_CANONICAL_REQUEST, strlen(S3_HLS_TAG_HEADER_IN_CANONICAL_REQUEST));
}
// Signed Headers Finished
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
S3_SHA256_Update(&sha256_ctx, S3_HLS_CANONICAL_REQUEST_NEW_LINE, strlen(S3_HLS_CANONICAL_REQUEST_NEW_LINE));
// Hash Payload Finished
PUT_DEBUG("%s", ctx->content_hash + S3_HLS_CONTENT_SHA256_HASH_OFFSET);
S3_SHA256_Update(&sha256_ctx, ctx->content_hash + S3_HLS_CONTENT_SHA256_HASH_OFFSET, strlen(ctx->content_hash + S3_HLS_CONTENT_SHA256_HASH_OFFSET));
PUT_DEBUG("%s", S3_HLS_CANONICAL_REQUEST_NEW_LINE);
return S3_SHA256_Final(&sha256_ctx, result);
}