diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php b/vendor/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php new file mode 100644 index 0000000..13357f5 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Crypto/AesGcmEncryptingStream.php @@ -0,0 +1,125 @@ +<?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; + + /** + * 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; + } + + 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() + { + return false; + } +} |