40 #include <openssl/sha.h>
43 const std::string ENDL{
"\n"};
44 const std::string POST{
"POST"};
45 const std::string GET{
"GET"};
46 const std::string STRING_TO_SIGN_ALGO{
"AWS4-HMAC-SHA256"};
47 const std::string AWS4{
"AWS4"};
48 const std::string AWS4_REQUEST{
"aws4_request"};
50 std::string join(
const std::vector<std::string> &ss,
const std::string &delim);
52 std::string sha256_base16(
const std::string &str);
54 std::map<std::string, std::string> canonicalize_headers(
const std::vector<std::string> &headers);
56 const std::string map_headers_string(
const std::map<std::string, std::string> &header_key2val);
58 const std::string map_signed_headers(
const std::map<std::string, std::string> &header_key2val);
60 const std::string canonicalize_request(
const std::string &http_request_method,
61 const std::string &canonical_uri,
62 const std::string &canonical_query_string,
63 const std::string &canonical_headers,
64 const std::string &signed_headers,
65 const std::string &payload);
67 const std::string string_to_sign(
const std::string &algorithm,
68 const std::time_t &request_date,
69 const std::string &credential_scope,
70 const std::string &hashed_canonical_request);
72 const std::string ISO8601_date(
const std::time_t &t);
74 const std::string utc_yyyymmdd(
const std::time_t &t);
76 const std::string credential_scope(
const std::time_t &t,
77 const std::string region,
78 const std::string service);
80 const std::string calculate_signature(
const std::time_t &request_date,
81 const std::string secret,
82 const std::string region,
83 const std::string service,
84 const std::string string_to_sign);
87 const std::string compute_awsv4_signature(
const std::string &uri_str,
const std::time_t &request_date,
88 const std::string &public_key,
const std::string &secret_key,
89 const std::string ®ion,
const std::string &service =
"s3");