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"};
51 void sha256(
const std::string str,
unsigned char outputBuffer[SHA256_DIGEST_LENGTH]);
54 std::string sha256_base16(
const std::string);
56 std::map<std::string,std::string> canonicalize_headers(
const std::vector<std::string>& headers);
58 const std::string map_headers_string(
const std::map<std::string,std::string>& header_key2val);
60 const std::string map_signed_headers(
const std::map<std::string,std::string>& header_key2val);
62 const std::string canonicalize_request(
const std::string& http_request_method,
63 const std::string& canonical_uri,
64 const std::string& canonical_query_string,
65 const std::string& canonical_headers,
66 const std::string& signed_headers,
67 const std::string& payload);
69 const std::string string_to_sign(
const std::string& algorithm,
70 const std::time_t& request_date,
71 const std::string& credential_scope,
72 const std::string& hashed_canonical_request);
74 const std::string ISO8601_date(
const std::time_t& t);
76 const std::string utc_yyyymmdd(
const std::time_t& t);
78 const std::string credential_scope(
const std::time_t& t,
79 const std::string region,
80 const std::string service);
82 const std::string calculate_signature(
const std::time_t& request_date,
83 const std::string secret,
84 const std::string region,
85 const std::string service,
86 const std::string string_to_sign,
87 const bool verbose =
false);
90 const std::string compute_awsv4_signature(
const std::string &uri_str,
const std::time_t &request_date,
91 const std::string &public_key,
const std::string &secret_key,
92 const std::string ®ion,
const std::string &service =
"s3",
93 const bool &verbose =
false);