| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | 
							- <?php
 
- namespace Aws\S3;
 
- use Aws\CommandInterface;
 
- use Psr\Http\Message\RequestInterface;
 
- /**
 
-  * Simplifies the SSE-C process by encoding and hashing the key.
 
-  * @internal
 
-  */
 
- class SSECMiddleware
 
- {
 
-     private $endpointScheme;
 
-     private $nextHandler;
 
-     /**
 
-      * Provide the URI scheme of the client sending requests.
 
-      *
 
-      * @param string $endpointScheme URI scheme (http/https).
 
-      *
 
-      * @return callable
 
-      */
 
-     public static function wrap($endpointScheme)
 
-     {
 
-         return function (callable $handler) use ($endpointScheme) {
 
-             return new self($endpointScheme, $handler);
 
-         };
 
-     }
 
-     public function __construct($endpointScheme, callable $nextHandler)
 
-     {
 
-         $this->nextHandler = $nextHandler;
 
-         $this->endpointScheme = $endpointScheme;
 
-     }
 
-     public function __invoke(
 
-         CommandInterface $command,
 
-         RequestInterface $request = null
 
-     ) {
 
-         // Allows only HTTPS connections when using SSE-C
 
-         if (($command['SSECustomerKey'] || $command['CopySourceSSECustomerKey'])
 
-             && $this->endpointScheme !== 'https'
 
-         ) {
 
-             throw new \RuntimeException('You must configure your S3 client to '
 
-                 . 'use HTTPS in order to use the SSE-C features.');
 
-         }
 
-         // Prepare the normal SSE-CPK headers
 
-         if ($command['SSECustomerKey']) {
 
-             $this->prepareSseParams($command);
 
-         }
 
-         // If it's a copy operation, prepare the SSE-CPK headers for the source.
 
-         if ($command['CopySourceSSECustomerKey']) {
 
-             $this->prepareSseParams($command, 'CopySource');
 
-         }
 
-         $f = $this->nextHandler;
 
-         return $f($command, $request);
 
-     }
 
-     private function prepareSseParams(CommandInterface $command, $prefix = '')
 
-     {
 
-         // Base64 encode the provided key
 
-         $key = $command[$prefix . 'SSECustomerKey'];
 
-         $command[$prefix . 'SSECustomerKey'] = base64_encode($key);
 
-         // Base64 the provided MD5 or, generate an MD5 if not provided
 
-         if ($md5 = $command[$prefix . 'SSECustomerKeyMD5']) {
 
-             $command[$prefix . 'SSECustomerKeyMD5'] = base64_encode($md5);
 
-         } else {
 
-             $command[$prefix . 'SSECustomerKeyMD5'] = base64_encode(md5($key, true));
 
-         }
 
-     }
 
- }
 
 
  |