diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Crypto/Cipher')
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); +} |