summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/Crypto/Cipher
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Crypto/Cipher')
-rw-r--r--vendor/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php88
-rw-r--r--vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php72
-rw-r--r--vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherMethod.php59
3 files changed, 219 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php b/vendor/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php
new file mode 100644
index 0000000..926f87c
--- /dev/null
+++ b/vendor/aws/aws-sdk-php/src/Crypto/Cipher/Cbc.php
@@ -0,0 +1,88 @@
+<?php
+namespace Aws\Crypto\Cipher;
+
+use \InvalidArgumentException;
+use \LogicException;
+
+/**
+ * An implementation of the CBC cipher for use with an AesEncryptingStream or
+ * AesDecrypting stream.
+ *
+ * This cipher method is deprecated and in maintenance mode - no new updates will be
+ * released. Please see https://docs.aws.amazon.com/general/latest/gr/aws_sdk_cryptography.html
+ * for more information.
+ *
+ * @deprecated
+ */
+class Cbc implements CipherMethod
+{
+ const BLOCK_SIZE = 16;
+
+ /**
+ * @var string
+ */
+ private $baseIv;
+
+ /**
+ * @var string
+ */
+ private $iv;
+
+ /**
+ * @var int
+ */
+ private $keySize;
+
+ /**
+ * @param string $iv Base Initialization Vector for the cipher.
+ * @param int $keySize Size of the encryption key, in bits, that will be
+ * used.
+ *
+ * @throws InvalidArgumentException Thrown if the passed iv does not match
+ * the iv length required by the cipher.
+ */
+ public function __construct($iv, $keySize = 256)
+ {
+ $this->baseIv = $this->iv = $iv;
+ $this->keySize = $keySize;
+
+ if (strlen($iv) !== openssl_cipher_iv_length($this->getOpenSslName())) {
+ throw new InvalidArgumentException('Invalid initialization vector');
+ }
+ }
+
+ public function getOpenSslName()
+ {
+ return "aes-{$this->keySize}-cbc";
+ }
+
+ public function getAesName()
+ {
+ return 'AES/CBC/PKCS5Padding';
+ }
+
+ public function getCurrentIv()
+ {
+ return $this->iv;
+ }
+
+ public function requiresPadding()
+ {
+ return true;
+ }
+
+ public function seek($offset, $whence = SEEK_SET)
+ {
+ if ($offset === 0 && $whence === SEEK_SET) {
+ $this->iv = $this->baseIv;
+ } else {
+ throw new LogicException('CBC initialization only support being'
+ . ' rewound, not arbitrary seeking.');
+ }
+ }
+
+ public function update($cipherTextBlock)
+ {
+ $this->iv = substr($cipherTextBlock, self::BLOCK_SIZE * -1);
+ }
+}
diff --git a/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php b/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php
new file mode 100644
index 0000000..ed9feb9
--- /dev/null
+++ b/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherBuilderTrait.php
@@ -0,0 +1,72 @@
+<?php
+namespace Aws\Crypto\Cipher;
+
+use Aws\Exception\CryptoException;
+
+trait CipherBuilderTrait
+{
+ /**
+ * Returns an identifier recognizable by `openssl_*` functions, such as
+ * `aes-256-cbc` or `aes-128-ctr`.
+ *
+ * @param string $cipherName Name of the cipher being used for encrypting
+ * or decrypting.
+ * @param int $keySize Size of the encryption key, in bits, that will be
+ * used.
+ *
+ * @return string
+ */
+ protected function getCipherOpenSslName($cipherName, $keySize)
+ {
+ return "aes-{$keySize}-{$cipherName}";
+ }
+
+ /**
+ * Constructs a CipherMethod for the given name, initialized with the other
+ * data passed for use in encrypting or decrypting.
+ *
+ * @param string $cipherName Name of the cipher to generate for encrypting.
+ * @param string $iv Base Initialization Vector for the cipher.
+ * @param int $keySize Size of the encryption key, in bits, that will be
+ * used.
+ *
+ * @return CipherMethod
+ *
+ * @internal
+ */
+ protected function buildCipherMethod($cipherName, $iv, $keySize)
+ {
+ switch ($cipherName) {
+ case 'cbc':
+ return new Cbc(
+ $iv,
+ $keySize
+ );
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Performs a reverse lookup to get the openssl_* cipher name from the
+ * AESName passed in from the MetadataEnvelope.
+ *
+ * @param $aesName
+ *
+ * @return string
+ *
+ * @internal
+ */
+ protected function getCipherFromAesName($aesName)
+ {
+ switch ($aesName) {
+ case 'AES/GCM/NoPadding':
+ return 'gcm';
+ case 'AES/CBC/PKCS5Padding':
+ return 'cbc';
+ default:
+ throw new CryptoException('Unrecognized or unsupported'
+ . ' AESName for reverse lookup.');
+ }
+ }
+} \ No newline at end of file
diff --git a/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherMethod.php b/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherMethod.php
new file mode 100644
index 0000000..a99aaa7
--- /dev/null
+++ b/vendor/aws/aws-sdk-php/src/Crypto/Cipher/CipherMethod.php
@@ -0,0 +1,59 @@
+<?php
+namespace Aws\Crypto\Cipher;
+
+interface CipherMethod
+{
+ /**
+ * Returns an identifier recognizable by `openssl_*` functions, such as
+ * `aes-256-cbc` or `aes-128-ctr`.
+ *
+ * @return string
+ */
+ public function getOpenSslName();
+
+ /**
+ * Returns an AES recognizable name, such as 'AES/GCM/NoPadding'.
+ *
+ * @return string
+ */
+ public function getAesName();
+
+ /**
+ * Returns the IV that should be used to initialize the next block in
+ * encrypt or decrypt.
+ *
+ * @return string
+ */
+ public function getCurrentIv();
+
+ /**
+ * Indicates whether the cipher method used with this IV requires padding
+ * the final block to make sure the plaintext is evenly divisible by the
+ * block size.
+ *
+ * @return boolean
+ */
+ public function requiresPadding();
+
+ /**
+ * Adjust the return of this::getCurrentIv to reflect a seek performed on
+ * the encryption stream using this IV object.
+ *
+ * @param int $offset
+ * @param int $whence
+ *
+ * @throws LogicException Thrown if the requested seek is not supported by
+ * this IV implementation. For example, a CBC IV
+ * only supports a full rewind ($offset === 0 &&
+ * $whence === SEEK_SET)
+ */
+ public function seek($offset, $whence = SEEK_SET);
+
+ /**
+ * Take account of the last cipher text block to adjust the return of
+ * this::getCurrentIv
+ *
+ * @param string $cipherTextBlock
+ */
+ public function update($cipherTextBlock);
+}