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