static int32_t S3_HLS_Hash_Put_Canonical_Request()

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);
}