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); } }