Skip to content

Commit

Permalink
Merge pull request aws#365 from aws/v2_signature_headers
Browse files Browse the repository at this point in the history
Reducing the number of signed sigv4 headers (for v2)
  • Loading branch information
mtdowling committed Oct 16, 2014
2 parents 8670f75 + f98e5db commit a9c432f
Show file tree
Hide file tree
Showing 26 changed files with 19 additions and 153 deletions.
43 changes: 19 additions & 24 deletions src/Aws/Common/Signature/SignatureV4.php
Expand Up @@ -19,7 +19,6 @@
use Aws\Common\Credentials\CredentialsInterface;
use Aws\Common\Enum\DateFormat;
use Aws\Common\HostNameUtils;
use Guzzle\Http\Message\EntityEnclosingRequest;
use Guzzle\Http\Message\EntityEnclosingRequestInterface;
use Guzzle\Http\Message\RequestFactory;
use Guzzle\Http\Message\RequestInterface;
Expand Down Expand Up @@ -309,38 +308,34 @@ private function createSigningContext(RequestInterface $request, $payload)
. $this->createCanonicalizedPath($request) . "\n"
. $this->getCanonicalizedQueryString($request) . "\n";

// Create the canonical headers
$headers = array();
$canonHeaders = array();

foreach ($request->getHeaders()->getAll() as $key => $values) {
$key = strtolower($key);
if ($key != 'user-agent') {
$headers[$key] = array();
foreach ($values as $value) {
$headers[$key][] = preg_replace('/\s+/', ' ', trim($value));
}
// Sort the value if there is more than one
if (count($values) > 1) {
sort($headers[$key]);
if ($key == 'host'
|| $key == 'date'
|| substr($key, 0, 6) === 'x-amz-'
) {
$values = $values->toArray();
if (count($values) == 1) {
$values = $values[0];
} else {
sort($values);
$values = implode(',', $values);
}
$canonHeaders[$key] = $key . ':' . preg_replace('/\s+/', ' ', $values);
}
}

// The headers must be sorted
ksort($headers);

// Continue to build the canonical request by adding headers
foreach ($headers as $key => $values) {
// Combine multi-value headers into a comma separated list
$canon .= $key . ':' . implode(',', $values) . "\n";
}

// Create the signed headers
$signedHeaders = implode(';', array_keys($headers));
$canon .= "\n{$signedHeaders}\n{$payload}";
ksort($canonHeaders);
$signedHeadersString = implode(';', array_keys($canonHeaders));
$canon .= implode("\n", $canonHeaders) . "\n\n"
. $signedHeadersString . "\n"
. $payload;

return array(
'canonical_request' => $canon,
'signed_headers' => $signedHeaders
'signed_headers' => $signedHeadersString
);
}

Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

0 comments on commit a9c432f

Please sign in to comment.