PHP code example of eto-pesets / whatsapp-encrypted-streams
1. Go to this page and download the library: Download eto-pesets/whatsapp-encrypted-streams library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
eto-pesets / whatsapp-encrypted-streams example snippets
$data = [
'key' => file_get_contents(__DIR__ . '/samples/VIDEO.key'),
'info' => Whatsapp::TYPE_INFO['VIDEO'],
'original' => __DIR__ . '/samples/VIDEO.original',
'encrypted' => __DIR__ . '/samples/VIDEO.encrypted',
'sidecar' => __DIR__ . '/samples/VIDEO.sidecar',
];
$result = $stream->readWhole($buffer_size = 8192);
use Psts\Streams\Whatsapp\DecryptionStream;
use Psts\Streams\Whatsapp\MediaKey;
use Psts\Streams\Whatsapp\Whatsapp;
use GuzzleHttp\Psr7;
// Инициализация ключа (ключ 32 байт и информационная строка)
$mediaKey = new MediaKey($data['key'], $data['info']);
// Открытие потока - любой PSR-7 поток
$file_stream = Psr7\Utils::streamFor(fopen($data['encrypted'], 'r'));
// Подключение потока к декоратору
$stream = new DecryptionStream($file_stream, $mediaKey);
// Чтение расшифрованного файла
$result = '';
while (!$stream->eof()) {
$result .= $stream->read(1024);
}
assert($result === file_get_contents($data['original']), 'Decrypted OK');
use Psts\Streams\Whatsapp\DecryptionStream;
use Psts\Streams\Whatsapp\MediaKey;
use Psts\Streams\Whatsapp\Whatsapp;
use GuzzleHttp\Psr7;
// Инициализация ключа (ключ 32 байт и информационная строка)
$mediaKey = new MediaKey($data['key'], $data['info']);
// Открытие потока - любой PSR-7 поток
$file_stream = Psr7\Utils::streamFor(fopen($data['encrypted'], 'r'));
// Чтение sidecar
$sidecar = file_get_contents($data['sidecar']);
// Подключение потока к декоратору
$stream = new DecryptionStream($file_stream, $mediaKey, $sidecar);
// Чтение расшифрованного потока
$result = '';
while (!$stream->eof()) {
$result .= $stream->read(1024);
}
assert($result === file_get_contents($data['original']), 'Decrypted OK');
use Psts\Streams\Whatsapp\EncryptionStream;
use Psts\Streams\Whatsapp\MediaKey;
use Psts\Streams\Whatsapp\Whatsapp;
use GuzzleHttp\Psr7;
// Инициализация ключа (ключ 32 байт и информационная строка)
$mediaKey = new MediaKey($data['key'], $data['info']);
// Открытие потока - любой PSR-7 поток
$file_stream = Psr7\Utils::streamFor(fopen($data['original'], 'r'));
$sidecar = $data['sidecar'];
/*
При $sidecar = null поток работает в режиме скачивания:
- seek при $offset > 0 недоступен (можно только перезапустить поток);
- проверяется финальная MAC-подпись, выбрасывается IntegrityException при несовпадении
вычисленной и фактической подписи.
При установке $sidecar переходит в режим streaming:
- seek доступен, но только кратно Whatsapp::SIZE_STREAM_BLOCK (64KB), округляется вниз автоматически;
- каждый чанк подписывается, подпись сверяется с $sidecar, выбрасывается IntegrityException при несовпадении.
*/
// подключение потока к декоратору
$stream = new EncryptionStream($file_stream, $mediaKey, $sidecar);
// Чтение зашифрованного потока
$result = '';
while (!$stream->eof())
$result .= $stream->read(1024);
// Получение sidecar
$sidecar = $stream->getSidecar();
assert($result === file_get_contents($data['encrypted']), 'Encrypted matches sample');
assert($sidecar === file_get_contents($data['sidecar']), 'Sidecar matches sample');