1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
<?php
namespace Illuminate\Tests\Encryption;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Encryption\Encrypter;
use PHPUnit\Framework\TestCase;
use RuntimeException;
class EncrypterTest extends TestCase
{
public function testEncryption()
{
$e = new Encrypter(str_repeat('a', 16));
$encrypted = $e->encrypt('foo');
$this->assertNotSame('foo', $encrypted);
$this->assertSame('foo', $e->decrypt($encrypted));
}
public function testRawStringEncryption()
{
$e = new Encrypter(str_repeat('a', 16));
$encrypted = $e->encryptString('foo');
$this->assertNotSame('foo', $encrypted);
$this->assertSame('foo', $e->decryptString($encrypted));
}
public function testEncryptionUsingBase64EncodedKey()
{
$e = new Encrypter(random_bytes(16));
$encrypted = $e->encrypt('foo');
$this->assertNotSame('foo', $encrypted);
$this->assertSame('foo', $e->decrypt($encrypted));
}
public function testWithCustomCipher()
{
$e = new Encrypter(str_repeat('b', 32), 'AES-256-CBC');
$encrypted = $e->encrypt('bar');
$this->assertNotSame('bar', $encrypted);
$this->assertSame('bar', $e->decrypt($encrypted));
$e = new Encrypter(random_bytes(32), 'AES-256-CBC');
$encrypted = $e->encrypt('foo');
$this->assertNotSame('foo', $encrypted);
$this->assertSame('foo', $e->decrypt($encrypted));
}
public function testDoNoAllowLongerKey()
{
$this->expectException(RuntimeException::class);
$this->expectExceptionMessage('The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.');
new Encrypter(str_repeat('z', 32));
}
public function testWithBadKeyLength()
{
$this->expectException(RuntimeException::class);
$this->expectExceptionMessage('The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.');
new Encrypter(str_repeat('a', 5));
}
public function testWithBadKeyLengthAlternativeCipher()
{
$this->expectException(RuntimeException::class);
$this->expectExceptionMessage('The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.');
new Encrypter(str_repeat('a', 16), 'AES-256-CFB8');
}
public function testWithUnsupportedCipher()
{
$this->expectException(RuntimeException::class);
$this->expectExceptionMessage('The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.');
new Encrypter(str_repeat('c', 16), 'AES-256-CFB8');
}
public function testExceptionThrownWhenPayloadIsInvalid()
{
$this->expectException(DecryptException::class);
$this->expectExceptionMessage('The payload is invalid.');
$e = new Encrypter(str_repeat('a', 16));
$payload = $e->encrypt('foo');
$payload = str_shuffle($payload);
$e->decrypt($payload);
}
public function testExceptionThrownWithDifferentKey()
{
$this->expectException(DecryptException::class);
$this->expectExceptionMessage('The MAC is invalid.');
$a = new Encrypter(str_repeat('a', 16));
$b = new Encrypter(str_repeat('b', 16));
$b->decrypt($a->encrypt('baz'));
}
public function testExceptionThrownWhenIvIsTooLong()
{
$this->expectException(DecryptException::class);
$this->expectExceptionMessage('The payload is invalid.');
$e = new Encrypter(str_repeat('a', 16));
$payload = $e->encrypt('foo');
$data = json_decode(base64_decode($payload), true);
$data['iv'] .= $data['value'][0];
$data['value'] = substr($data['value'], 1);
$modified_payload = base64_encode(json_encode($data));
$e->decrypt($modified_payload);
}
}
|