in src/aws/credential.rs [296:336]
fn string_to_sign(
&self,
date: DateTime<Utc>,
scope: &str,
request_method: &Method,
url: &Url,
canonical_headers: &str,
signed_headers: &str,
digest: &str,
) -> String {
// Each path segment must be URI-encoded twice (except for Amazon S3 which only gets
// URI-encoded once).
// see https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
let canonical_uri = match self.service {
"s3" => url.path().to_string(),
_ => utf8_percent_encode(url.path(), &STRICT_PATH_ENCODE_SET).to_string(),
};
let canonical_query = canonicalize_query(url);
// https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
let canonical_request = format!(
"{}\n{}\n{}\n{}\n{}\n{}",
request_method.as_str(),
canonical_uri,
canonical_query,
canonical_headers,
signed_headers,
digest
);
let hashed_canonical_request = hex_digest(canonical_request.as_bytes());
format!(
"{}\n{}\n{}\n{}",
ALGORITHM,
date.format("%Y%m%dT%H%M%SZ"),
scope,
hashed_canonical_request
)
}