AWS_DOTNET_API void aws_dotnet_auth_sign_chunk()

in native/src/signing.c [406:475]


AWS_DOTNET_API void aws_dotnet_auth_sign_chunk(
    struct aws_dotnet_stream_function_table chunk_body_stream_delegates,
    uint8_t *previous_signature,
    uint32_t previous_signature_size,
    struct aws_signing_config_native native_signing_config,
    uint64_t callback_id,
    aws_dotnet_auth_on_signing_complete_fn *on_signing_complete) {

    int32_t error_code = AWS_ERROR_SUCCESS;
    struct aws_dotnet_signing_callback_state *continuation = NULL;

    struct aws_signing_config_aws config;
    AWS_ZERO_STRUCT(config);

    struct aws_allocator *allocator = aws_dotnet_get_allocator();

    continuation = aws_mem_calloc(allocator, 1, sizeof(struct aws_dotnet_signing_callback_state));
    if (continuation == NULL) {
        goto on_error;
    }

    if (s_initialize_signing_config(&config, &native_signing_config, continuation)) {
        goto on_error;
    }

    continuation->callback_id = callback_id;
    continuation->on_signing_complete = on_signing_complete;
    continuation->signature_type = native_signing_config.signature_type;

    struct aws_byte_cursor previous_signature_cursor;
    AWS_ZERO_STRUCT(previous_signature_cursor);
    previous_signature_cursor.ptr = previous_signature;
    previous_signature_cursor.len = previous_signature_size;

    if (aws_stream_function_table_is_valid(&chunk_body_stream_delegates)) {
        continuation->body_stream = aws_input_stream_new_dotnet(allocator, &chunk_body_stream_delegates);
        if (continuation->body_stream == NULL) {
            goto on_error;
        }
    }

    continuation->original_request_signable =
        aws_signable_new_chunk(allocator, continuation->body_stream, previous_signature_cursor);
    if (continuation->original_request_signable == NULL) {
        goto on_error;
    }

    /* Sign the native request */
    if (aws_sign_request_aws(
            allocator,
            continuation->original_request_signable,
            (struct aws_signing_config_base *)&config,
            s_aws_signing_complete,
            continuation)) {
        goto on_error;
    }

    return;

on_error:

    s_destroy_signing_callback_state(continuation);

    error_code = aws_last_error();
    if (error_code == AWS_ERROR_SUCCESS) {
        error_code = AWS_ERROR_UNKNOWN;
    }

    on_signing_complete(callback_id, error_code, NULL, 0, NULL, NULL, 0);
}