#ifndef AWS_AUTH_SIGNING_CONFIG_H
#define AWS_AUTH_SIGNING_CONFIG_H
#include <aws/auth/auth.h>
#include <aws/common/byte_buf.h>
#include <aws/common/date_time.h>
struct aws_credentials;
typedef bool(aws_should_sign_header_fn)(const struct aws_byte_cursor *name, void *userdata);
enum aws_signing_config_type { AWS_SIGNING_CONFIG_AWS = 1 };
struct aws_signing_config_base {
enum aws_signing_config_type config_type;
};
enum aws_signing_algorithm {
AWS_SIGNING_ALGORITHM_V4,
AWS_SIGNING_ALGORITHM_V4_ASYMMETRIC,
};
enum aws_signature_type {
AWS_ST_HTTP_REQUEST_HEADERS,
AWS_ST_HTTP_REQUEST_QUERY_PARAMS,
AWS_ST_HTTP_REQUEST_CHUNK,
AWS_ST_HTTP_REQUEST_EVENT,
AWS_ST_CANONICAL_REQUEST_HEADERS,
AWS_ST_CANONICAL_REQUEST_QUERY_PARAMS,
AWS_ST_HTTP_REQUEST_TRAILING_HEADERS
};
AWS_AUTH_API extern const struct aws_byte_cursor g_aws_signed_body_value_empty_sha256;
AWS_AUTH_API extern const struct aws_byte_cursor g_aws_signed_body_value_unsigned_payload;
AWS_AUTH_API extern const struct aws_byte_cursor g_aws_signed_body_value_streaming_unsigned_payload_trailer;
AWS_AUTH_API extern const struct aws_byte_cursor g_aws_signed_body_value_streaming_aws4_hmac_sha256_payload;
AWS_AUTH_API extern const struct aws_byte_cursor g_aws_signed_body_value_streaming_aws4_hmac_sha256_payload_trailer;
AWS_AUTH_API extern const struct aws_byte_cursor g_aws_signed_body_value_streaming_aws4_ecdsa_p256_sha256_payload;
AWS_AUTH_API extern const struct aws_byte_cursor
g_aws_signed_body_value_streaming_aws4_ecdsa_p256_sha256_payload_trailer;
AWS_AUTH_API extern const struct aws_byte_cursor g_aws_signed_body_value_streaming_aws4_hmac_sha256_events;
enum aws_signed_body_header_type {
AWS_SBHT_NONE,
AWS_SBHT_X_AMZ_CONTENT_SHA256,
};
struct aws_signing_config_aws {
enum aws_signing_config_type config_type;
enum aws_signing_algorithm algorithm;
enum aws_signature_type signature_type;
struct aws_byte_cursor region;
struct aws_byte_cursor service;
struct aws_date_time date;
aws_should_sign_header_fn *should_sign_header;
void *should_sign_header_ud;
struct {
uint32_t use_double_uri_encode : 1;
uint32_t should_normalize_uri_path : 1;
uint32_t omit_session_token : 1;
} flags;
struct aws_byte_cursor signed_body_value;
enum aws_signed_body_header_type signed_body_header;
const struct aws_credentials *credentials;
struct aws_credentials_provider *credentials_provider;
uint64_t expiration_in_seconds;
};
AWS_EXTERN_C_BEGIN
AWS_AUTH_API
const char *aws_signing_algorithm_to_string(enum aws_signing_algorithm algorithm);
AWS_AUTH_API
int aws_validate_aws_signing_config_aws(const struct aws_signing_config_aws *config);
AWS_EXTERN_C_END
#endif