예제 #1
0
 public function signRequest(RequestInterface $request, CredentialsInterface $credentials)
 {
     $ldt = gmdate(self::ISO8601_BASIC);
     $sdt = substr($ldt, 0, 8);
     $parsed = $this->parseRequest($request);
     $parsed['headers']['X-Amz-Date'] = [$ldt];
     if ($token = $credentials->getSecurityToken()) {
         $parsed['headers']['X-Amz-Security-Token'] = [$token];
     }
     $cs = $this->createScope($sdt, $this->region, $this->service);
     $payload = $this->getPayload($request);
     $context = $this->createContext($parsed, $payload);
     $toSign = $this->createStringToSign($ldt, $cs, $context['creq']);
     $signingKey = $this->getSigningKey($sdt, $this->region, $this->service, $credentials->getSecretKey());
     $signature = hash_hmac('sha256', $toSign, $signingKey);
     $parsed['headers']['Authorization'] = ["AWS4-HMAC-SHA256 " . "Credential={$credentials->getAccessKeyId()}/{$cs}, " . "SignedHeaders={$context['headers']}, Signature={$signature}"];
     return $this->buildRequest($parsed);
 }
예제 #2
0
 protected function getPolicyAndSignature(CredentialsInterface $credentials, array $policy)
 {
     $ldt = gmdate(SignatureV4::ISO8601_BASIC);
     $sdt = substr($ldt, 0, 8);
     $policy['conditions'][] = ['X-Amz-Date' => $ldt];
     $region = $this->client->getRegion();
     $scope = $this->createScope($sdt, $region, 's3');
     $creds = "{$credentials->getAccessKeyId()}/{$scope}";
     $policy['conditions'][] = ['X-Amz-Credential' => $creds];
     $policy['conditions'][] = ['X-Amz-Algorithm' => "AWS4-HMAC-SHA256"];
     $jsonPolicy64 = base64_encode(json_encode($policy));
     $key = $this->getSigningKey($sdt, $region, 's3', $credentials->getSecretKey());
     return ['X-Amz-Credential' => $creds, 'X-Amz-Algorithm' => "AWS4-HMAC-SHA256", 'X-Amz-Date' => $ldt, 'Policy' => $jsonPolicy64, 'X-Amz-Signature' => bin2hex(hash_hmac('sha256', $jsonPolicy64, $key, true))];
 }
예제 #3
0
 /**
  * Create an SMTP password for a given IAM user's credentials.
  *
  * The SMTP username is the Access Key ID for the provided credentials.
  *
  * @link http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html#smtp-credentials-convert
  *
  * @param CredentialsInterface $creds
  *
  * @return string
  */
 public static function generateSmtpPassword(CredentialsInterface $creds)
 {
     static $version = "";
     static $algo = 'sha256';
     static $message = 'SendRawEmail';
     $signature = hash_hmac($algo, $message, $creds->getSecretKey(), true);
     return base64_encode($version . $signature);
 }
예제 #4
0
 protected function getPolicyAndSignature(CredentialsInterface $creds)
 {
     $jsonPolicy64 = base64_encode($this->jsonPolicy);
     return ['AWSAccessKeyId' => $creds->getAccessKeyId(), 'policy' => $jsonPolicy64, 'signature' => base64_encode(hash_hmac('sha1', $jsonPolicy64, $creds->getSecretKey(), true))];
 }