__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php
namespace Aws\Crypto;
use GuzzleHttp\Psr7\StreamDecoratorTrait;
use \LogicException;
use Psr\Http\Message\StreamInterface;
use Aws\Crypto\Cipher\CipherMethod;
/**
* @internal Represents a stream of data to be decrypted with passed cipher.
*/
class AesDecryptingStream implements AesStreamInterface
{
const BLOCK_SIZE = 16; // 128 bits
use StreamDecoratorTrait;
/**
* @var string
*/
private $buffer = '';
/**
* @var CipherMethod
*/
private $cipherMethod;
/**
* @var string
*/
private $key;
/**
* @var StreamInterface
*/
private $stream;
/**
* @param StreamInterface $cipherText
* @param string $key
* @param CipherMethod $cipherMethod
*/
public function __construct(
StreamInterface $cipherText,
$key,
CipherMethod $cipherMethod
) {
$this->stream = $cipherText;
$this->key = $key;
$this->cipherMethod = clone $cipherMethod;
}
public function getOpenSslName()
{
return $this->cipherMethod->getOpenSslName();
}
public function getAesName()
{
return $this->cipherMethod->getAesName();
}
public function getCurrentIv()
{
return $this->cipherMethod->getCurrentIv();
}
public function getSize(): ?int
{
$plainTextSize = $this->stream->getSize();
if ($this->cipherMethod->requiresPadding()) {
// PKCS7 padding requires that between 1 and self::BLOCK_SIZE be
// added to the plaintext to make it an even number of blocks. The
// plaintext is between strlen($cipherText) - self::BLOCK_SIZE and
// strlen($cipherText) - 1
return null;
}
return $plainTextSize;
}
public function isWritable(): bool
{
return false;
}
public function read($length): string
{
if ($length > strlen($this->buffer)) {
$this->buffer .= $this->decryptBlock(
(int) (
self::BLOCK_SIZE * ceil(($length - strlen($this->buffer)) / self::BLOCK_SIZE)
)
);
}
$data = substr($this->buffer, 0, $length);
$this->buffer = substr($this->buffer, $length);
return $data ? $data : '';
}
public function seek($offset, $whence = SEEK_SET): void
{
if ($offset === 0 && $whence === SEEK_SET) {
$this->buffer = '';
$this->cipherMethod->seek(0, SEEK_SET);
$this->stream->seek(0, SEEK_SET);
} else {
throw new LogicException('AES encryption streams only support being'
. ' rewound, not arbitrary seeking.');
}
}
private function decryptBlock($length)
{
if ($this->stream->eof()) {
return '';
}
$cipherText = '';
do {
$cipherText .= $this->stream->read((int) ($length - strlen($cipherText)));
} while (strlen($cipherText) < $length && !$this->stream->eof());
$options = OPENSSL_RAW_DATA;
if (!$this->stream->eof()
&& $this->stream->getSize() !== $this->stream->tell()
) {
$options |= OPENSSL_ZERO_PADDING;
}
$plaintext = openssl_decrypt(
$cipherText,
$this->cipherMethod->getOpenSslName(),
$this->key,
$options,
$this->cipherMethod->getCurrentIv()
);
$this->cipherMethod->update($cipherText);
return $plaintext;
}
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| Cipher | Folder | 0777 |
|
|
| Polyfill | Folder | 0777 |
|
|
| AbstractCryptoClient.php | File | 3.99 KB | 0777 |
|
| AbstractCryptoClientV2.php | File | 3.88 KB | 0777 |
|
| AesDecryptingStream.php | File | 3.51 KB | 0777 |
|
| AesEncryptingStream.php | File | 3.68 KB | 0777 |
|
| AesGcmDecryptingStream.php | File | 2.7 KB | 0777 |
|
| AesGcmEncryptingStream.php | File | 2.89 KB | 0777 |
|
| AesStreamInterface.php | File | 656 B | 0777 |
|
| AesStreamInterfaceV2.php | File | 728 B | 0777 |
|
| DecryptionTrait.php | File | 5.96 KB | 0777 |
|
| DecryptionTraitV2.php | File | 9.04 KB | 0777 |
|
| EncryptionTrait.php | File | 6.92 KB | 0777 |
|
| EncryptionTraitV2.php | File | 7.1 KB | 0777 |
|
| KmsMaterialsProvider.php | File | 3.9 KB | 0777 |
|
| KmsMaterialsProviderV2.php | File | 3.43 KB | 0777 |
|
| MaterialsProvider.php | File | 3.23 KB | 0777 |
|
| MaterialsProviderInterface.php | File | 1.81 KB | 0777 |
|
| MaterialsProviderInterfaceV2.php | File | 1.67 KB | 0777 |
|
| MaterialsProviderV2.php | File | 2.01 KB | 0777 |
|
| MetadataEnvelope.php | File | 1.64 KB | 0777 |
|
| MetadataStrategyInterface.php | File | 996 B | 0777 |
|