AWS_DOTNET_API void aws_dotnet_auth_sign_canonical_request()

in native/src/signing.c [349:404]


AWS_DOTNET_API void aws_dotnet_auth_sign_canonical_request(
    const char *canonical_request,
    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 canonical_request_cursor = aws_byte_cursor_from_c_str(canonical_request);
    continuation->original_request_signable = aws_signable_new_canonical_request(allocator, canonical_request_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);
}