mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-12-27 19:54:57 +00:00
d9e9504fba
* PSR2-1.0: Fix indentation phpcbf did not fix. Remove PSR2.Methods.FunctionCallSignature.SpaceAfterOpenBracket exception. Use phpcbf to fix PHP code to ruleset. Ignore coding guidelines in ANSI switch block. Base code sniffer ruleset on PSR2 rather than PEAR. Update PHP Code Sniffer to 2.3.3 Conflicts: build/code-sniffer-ruleset-tests.xml build/code-sniffer-ruleset.xml composer.lock phpseclib/Crypt/DES.php phpseclib/Crypt/Hash.php phpseclib/Crypt/RSA.php phpseclib/File/X509.php phpseclib/Math/BigInteger.php phpseclib/Net/SFTP.php phpseclib/Net/SSH1.php phpseclib/Net/SSH2.php tests/Functional/Net/SFTPUserStoryTest.php tests/Unit/Crypt/TwofishTest.php
75 lines
3.2 KiB
PHP
75 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* @author Andreas Fischer <bantu@phpbb.com>
|
|
* @copyright MMXIII Andreas Fischer
|
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
*/
|
|
|
|
use phpseclib\Crypt\Base;
|
|
use phpseclib\Crypt\Twofish;
|
|
|
|
class Unit_Crypt_TwofishTest extends PhpseclibTestCase
|
|
{
|
|
public function testVectors()
|
|
{
|
|
$engines = array(
|
|
Base::ENGINE_INTERNAL => 'internal',
|
|
Base::ENGINE_MCRYPT => 'mcrypt',
|
|
Base::ENGINE_OPENSSL => 'OpenSSL',
|
|
);
|
|
|
|
foreach ($engines as $engine => $name) {
|
|
$tf = new Twofish();
|
|
$tf->disablePadding();
|
|
|
|
// tests from https://www.schneier.com/code/ecb_ival.txt
|
|
|
|
// key size = 128
|
|
$key = pack('H*', '00000000000000000000000000000000');
|
|
$tf->setKey($key);
|
|
if (!$tf->isValidEngine($engine)) {
|
|
self::markTestSkipped('Unable to initialize ' . $name . ' engine');
|
|
}
|
|
|
|
$plaintext = pack('H*', '00000000000000000000000000000000');
|
|
$ciphertext = $tf->encrypt($plaintext);
|
|
$expected = strtolower('9F589F5CF6122C32B6BFEC2F2AE8C35A');
|
|
$this->assertEquals(bin2hex($ciphertext), $expected, "Failed asserting that $plaintext yielded expected output in $name engine");
|
|
|
|
$expected = bin2hex($plaintext);
|
|
$plaintext = bin2hex($tf->decrypt($ciphertext));
|
|
$this->assertEquals($plaintext, $expected, "Failed asserting that $plaintext yielded expected output in $name engine");
|
|
|
|
// key size = 192
|
|
$key = pack('H*', '0123456789ABCDEFFEDCBA98765432100011223344556677');
|
|
$tf->setKey($key);
|
|
if (!$tf->isValidEngine($engine)) {
|
|
self::markTestSkipped('Unable to initialize ' . $name . ' engine');
|
|
}
|
|
$plaintext = pack('H*', '00000000000000000000000000000000');
|
|
$ciphertext = $tf->encrypt($plaintext);
|
|
$expected = strtolower('CFD1D2E5A9BE9CDF501F13B892BD2248');
|
|
$this->assertEquals(bin2hex($ciphertext), $expected, "Failed asserting that $plaintext yielded expected output in $name engine");
|
|
|
|
$expected = bin2hex($plaintext);
|
|
$plaintext = bin2hex($tf->decrypt($ciphertext));
|
|
$this->assertEquals($plaintext, $expected, "Failed asserting that $plaintext yielded expected output in $name engine");
|
|
|
|
// key size = 256
|
|
$key = pack('H*', '0123456789ABCDEFFEDCBA987654321000112233445566778899AABBCCDDEEFF');
|
|
$tf->setKey($key);
|
|
if (!$tf->isValidEngine($engine)) {
|
|
self::markTestSkipped('Unable to initialize ' . $name . ' engine');
|
|
}
|
|
$plaintext = pack('H*', '00000000000000000000000000000000');
|
|
$ciphertext = $tf->encrypt($plaintext);
|
|
$expected = strtolower('37527BE0052334B89F0CFCCAE87CFA20');
|
|
$this->assertEquals(bin2hex($ciphertext), $expected, "Failed asserting that $plaintext yielded expected output in $name engine");
|
|
|
|
$expected = bin2hex($plaintext);
|
|
$plaintext = bin2hex($tf->decrypt($ciphertext));
|
|
$this->assertEquals($plaintext, $expected, "Failed asserting that $plaintext yielded expected output in $name engine");
|
|
}
|
|
}
|
|
}
|