| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | 
							- <?php
 
- namespace Aws\Crypto;
 
- use Aws\Crypto\Polyfill\AesGcm;
 
- use Aws\Crypto\Polyfill\Key;
 
- use GuzzleHttp\Psr7;
 
- use GuzzleHttp\Psr7\StreamDecoratorTrait;
 
- use Psr\Http\Message\StreamInterface;
 
- use \RuntimeException;
 
- /**
 
-  * @internal Represents a stream of data to be gcm encrypted.
 
-  */
 
- class AesGcmEncryptingStream implements AesStreamInterface, AesStreamInterfaceV2
 
- {
 
-     use StreamDecoratorTrait;
 
-     private $aad;
 
-     private $initializationVector;
 
-     private $key;
 
-     private $keySize;
 
-     private $plaintext;
 
-     private $tag = '';
 
-     private $tagLength;
 
-     /**
 
-      * @var StreamInterface
 
-      */
 
-     private $stream;
 
-     /**
 
-      * Same as non-static 'getAesName' method, allowing calls in a static
 
-      * context.
 
-      *
 
-      * @return string
 
-      */
 
-     public static function getStaticAesName()
 
-     {
 
-         return 'AES/GCM/NoPadding';
 
-     }
 
-     /**
 
-      * @param StreamInterface $plaintext
 
-      * @param string $key
 
-      * @param string $initializationVector
 
-      * @param string $aad
 
-      * @param int $tagLength
 
-      * @param int $keySize
 
-      */
 
-     public function __construct(
 
-         StreamInterface $plaintext,
 
-         $key,
 
-         $initializationVector,
 
-         $aad = '',
 
-         $tagLength = 16,
 
-         $keySize = 256
 
-     ) {
 
-         $this->plaintext = $plaintext;
 
-         $this->key = $key;
 
-         $this->initializationVector = $initializationVector;
 
-         $this->aad = $aad;
 
-         $this->tagLength = $tagLength;
 
-         $this->keySize = $keySize;
 
-         // unsetting the property forces the first access to go through
 
-         // __get().
 
-         unset($this->stream);
 
-     }
 
-     public function getOpenSslName()
 
-     {
 
-         return "aes-{$this->keySize}-gcm";
 
-     }
 
-     /**
 
-      * Same as static method and retained for backwards compatibility
 
-      *
 
-      * @return string
 
-      */
 
-     public function getAesName()
 
-     {
 
-         return self::getStaticAesName();
 
-     }
 
-     public function getCurrentIv()
 
-     {
 
-         return $this->initializationVector;
 
-     }
 
-     public function createStream()
 
-     {
 
-         if (version_compare(PHP_VERSION, '7.1', '<')) {
 
-             return Psr7\Utils::streamFor(AesGcm::encrypt(
 
-                 (string) $this->plaintext,
 
-                 $this->initializationVector,
 
-                 new Key($this->key),
 
-                 $this->aad,
 
-                 $this->tag,
 
-                 $this->keySize
 
-             ));
 
-         } else {
 
-             return Psr7\Utils::streamFor(\openssl_encrypt(
 
-                 (string)$this->plaintext,
 
-                 $this->getOpenSslName(),
 
-                 $this->key,
 
-                 OPENSSL_RAW_DATA,
 
-                 $this->initializationVector,
 
-                 $this->tag,
 
-                 $this->aad,
 
-                 $this->tagLength
 
-             ));
 
-         }
 
-     }
 
-     /**
 
-      * @return string
 
-      */
 
-     public function getTag()
 
-     {
 
-         return $this->tag;
 
-     }
 
-     public function isWritable(): bool
 
-     {
 
-         return false;
 
-     }
 
- }
 
 
  |