41#include <openssl/sha.h>
47const std::string ENDL{
"\n"};
48const std::string POST{
"POST"};
49const std::string GET{
"GET"};
50const std::string STRING_TO_SIGN_ALGO{
"AWS4-HMAC-SHA256"};
51const std::string AWS4{
"AWS4"};
52const std::string AWS4_REQUEST{
"aws4_request"};
54std::string join(
const std::vector<std::string> &ss,
const std::string &delim);
56std::string sha256_base16(
const std::string &str);
58std::map<std::string, std::string> canonicalize_headers(
const std::vector<std::string> &headers);
60std::string map_headers_string(
const std::map<std::string, std::string> &header_key2val);
62std::string map_signed_headers(
const std::map<std::string, std::string> &header_key2val);
64std::string canonicalize_request(
const std::string &http_request_method,
65 const std::string &canonical_uri,
66 const std::string &canonical_query_string,
67 const std::string &canonical_headers,
68 const std::string &signed_headers,
69 const std::string &payload);
71std::string string_to_sign(
const std::string &algorithm,
72 const std::time_t &request_date,
73 const std::string &credential_scope,
74 const std::string &hashed_canonical_request);
76std::string ISO8601_date(
const std::time_t &t);
78std::string utc_yyyymmdd(
const std::time_t &t);
80std::string credential_scope(
const std::time_t &t,
81 const std::string ®ion,
82 const std::string &service);
84std::string calculate_signature(
const std::time_t &request_date,
85 const std::string &secret,
86 const std::string ®ion,
87 const std::string &service,
88 const std::string &string_to_sign);
91std::string compute_awsv4_signature(
const std::shared_ptr<http::url> &uri_str,
const std::time_t &request_date,
92 const std::string &public_key,
const std::string &secret_key,
93 const std::string ®ion,
const std::string &service =
"s3");
96std::string compute_awsv4_signature(
const http::url &uri,
const std::time_t &request_date,
97 const std::string &public_key,
const std::string &secret_key,
98 const std::string ®ion,
const std::string &service =
"s3");
100std::string compute_awsv4_signature(
const std::string &canonical_uri,
const std::string &canonical_query,
101 const std::string &host,
const std::time_t &request_date,
102 const std::string &public_key,
const std::string &secret_key,
103 const std::string ®ion,
const std::string &service);