| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | <?phpnamespace 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);    }}
 |