in php/src/Utils.php [422:463]
static public function getAuthorization($request, $signatureAlgorithm, $payload, $accesskey, $accessKeySecret)
{
$canonicalURI = $request->pathname ? $request->pathname : '/';
$query = $request->query ?: [];
$method = strtoupper($request->method);
$canonicalQueryString = self::getCanonicalQueryString($query);
$signHeaders = [];
foreach ($request->headers as $k => $v) {
$k = strtolower($k);
if (0 === strpos($k, 'x-acs-') || 'host' === $k || 'content-type' === $k) {
$signHeaders[$k] = $v;
}
}
ksort($signHeaders);
$headers = [];
foreach ($request->headers as $k => $v) {
$k = strtolower($k);
if (0 === strpos($k, 'x-acs-') || 'host' === $k || 'content-type' === $k) {
$headers[$k] = trim($v);
}
}
$canonicalHeaderString = '';
ksort($headers);
foreach ($headers as $k => $v) {
$canonicalHeaderString .= $k . ':' . trim(self::filter($v)) . "\n";
}
if (empty($canonicalHeaderString)) {
$canonicalHeaderString = "\n";
}
$canonicalRequest = $method . "\n" . $canonicalURI . "\n" . $canonicalQueryString . "\n" .
$canonicalHeaderString . "\n" . implode(';', array_keys($signHeaders)) . "\n" . $payload;
$strtosign = $signatureAlgorithm . "\n" . bin2hex(self::hash(BytesUtil::from($canonicalRequest), $signatureAlgorithm));
$signature = self::sign($accessKeySecret, $strtosign, $signatureAlgorithm);
$signature = bin2hex($signature);
return $signatureAlgorithm .
' Credential=' . $accesskey .
',SignedHeaders=' . implode(';', array_keys($signHeaders)) .
',Signature=' . $signature;
}