steffen: server/kolab-horde-framework/kolab-horde-framework/Cipher/tests Cipher1.phpt, NONE, 1.1 Cipher2.phpt, NONE, 1.1 Cipher3.phpt, NONE, 1.1 Cipher4.phpt, NONE, 1.1 Cipher5.phpt, NONE, 1.1 Cipher6.phpt, NONE, 1.1 cipherTest.php, NONE, 1.1
cvs at intevation.de
cvs at intevation.de
Fri Oct 14 16:33:06 CEST 2005
Author: steffen
Update of /kolabrepository/server/kolab-horde-framework/kolab-horde-framework/Cipher/tests
In directory doto:/tmp/cvs-serv28903/kolab-horde-framework/kolab-horde-framework/Cipher/tests
Added Files:
Cipher1.phpt Cipher2.phpt Cipher3.phpt Cipher4.phpt
Cipher5.phpt Cipher6.phpt cipherTest.php
Log Message:
Separated Horde Framework from kolab-resource-handlers
--- NEW FILE: Cipher1.phpt ---
--TEST--
RC4 Cipher:: Tests
--FILE--
<?php
require_once dirname(__FILE__) . "/../Cipher.php";
if (!function_exists('testCipher')) {
function testCipher($cipher, $key, $plaintext, $ciphertext)
{
$cipher = &Horde_Cipher::factory($cipher);
$cipher->setKey($key);
echo "Testing Encryption: ";
$res = $cipher->encryptBlock($plaintext);
if ($res == $ciphertext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($ciphertext); $i++) {
echo str_pad(dechex(ord(substr($ciphertext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "Testing Decryption: ";
$res = $cipher->decryptBlock($ciphertext);
if ($res == $plaintext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($plaintext); $i++) {
echo str_pad(dechex(ord(substr($plaintext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "\n";
flush();
}
}
/* RC4 Cipher */
echo "RC4:\n";
echo "----\n\n";
// 64 Bit key test
echo "64-bit Key\n";
$key = "\x01\x23\x45\x67\x89\xab\xcd\xef";
$plaintext = "\x01\x23\x45\x67\x89\xab\xcd\xef";
$ciphertext = "\x75\xb7\x87\x80\x99\xe0\xc5\x96";
testCipher('rc4', $key, $plaintext, $ciphertext);
// 64 Bit key test
echo "64-bit Key\n";
$key = "\x01\x23\x45\x67\x89\xab\xcd\xef";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\x74\x94\xc2\xe7\x10\x4b\x08\x79";
testCipher('rc4', $key, $plaintext, $ciphertext);
// 64 Bit key test
echo "64-bit Key\n";
$key = "\x00\x00\x00\x00\x00\x00\x00\x00";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\xde\x18\x89\x41\xa3\x37\x5d\x3a";
testCipher('rc4', $key, $plaintext, $ciphertext);
// 32 Bit key test
echo "32-bit Key\n";
$key = "\xef\x01\x23\x45";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf";
testCipher('rc4', $key, $plaintext, $ciphertext);
?>
--EXPECT--
RC4:
----
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
32-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
--- NEW FILE: Cipher2.phpt ---
--TEST--
DES Cipher:: Tests
--FILE--
<?php
require_once dirname(__FILE__) . "/../Cipher.php";
if (!function_exists('testCipher')) {
function testCipher($cipher, $key, $plaintext, $ciphertext)
{
$cipher = &Horde_Cipher::factory($cipher);
$cipher->setKey($key);
echo "Testing Encryption: ";
$res = $cipher->encryptBlock($plaintext);
if ($res == $ciphertext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($ciphertext); $i++) {
echo str_pad(dechex(ord(substr($ciphertext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "Testing Decryption: ";
$res = $cipher->decryptBlock($ciphertext);
if ($res == $plaintext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($plaintext); $i++) {
echo str_pad(dechex(ord(substr($plaintext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "\n";
flush();
}
}
/* DES Cipher */
echo "DES:\n";
echo "----\n\n";
// 64 Bit key test
$tests = array(
"\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00", "\x8C\xA6\x4D\xE9\xC1\xB1\x23\xA7",
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", "\x73\x59\xB2\x16\x3E\x4E\xDC\x58",
"\x30\x00\x00\x00\x00\x00\x00\x00", "\x10\x00\x00\x00\x00\x00\x00\x01", "\x95\x8E\x6E\x62\x7A\x05\x55\x7B",
"\x01\x23\x45\x67\x89\xAB\xCD\xEF", "\x11\x11\x11\x11\x11\x11\x11\x11", "\x17\x66\x8D\xFC\x72\x92\x53\x2D",
"\x11\x11\x11\x11\x11\x11\x11\x11", "\x01\x23\x45\x67\x89\xAB\xCD\xEF", "\x8A\x5A\xE1\xF8\x1A\xB8\xF2\xDD",
// Initial Permutation and Expansion test
"\x01\x01\x01\x01\x01\x01\x01\x01", "\x95\xF8\xA5\xE5\xDD\x31\xD9\x00", "\x80\x00\x00\x00\x00\x00\x00\x00",
// Key Permutation test
"\x80\x01\x01\x01\x01\x01\x01\x01", "\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\xA8\xD7\x28\x13\xDA\xA9\x4D",
// Data Permutation tests
"\x10\x46\x91\x34\x89\x98\x01\x31", "\x00\x00\x00\x00\x00\x00\x00\x00", "\x88\xD5\x5E\x54\xF5\x4C\x97\xB4",
// S-Box test
"\x7C\xA1\x10\x45\x4A\x1A\x6E\x57", "\x01\xA1\xD6\xD0\x39\x77\x67\x42", "\x69\x0F\x5B\x0D\x9A\x26\x93\x9B",
"\x01\x31\xD9\x61\x9D\xC1\x37\x6E", "\x5C\xD5\x4C\xA8\x3D\xEF\x57\xDA", "\x7A\x38\x9D\x10\x35\x4B\xD2\x71",
);
for ($i = 0; $i < count($tests); $i+= 3) {
echo "64-bit Key\n";
$key = $tests[$i];
$plaintext = $tests[$i + 1];
$ciphertext = $tests[$i + 2];
testCipher('des', $key, $plaintext, $ciphertext);
}
?>
--EXPECT--
DES:
----
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
--- NEW FILE: Cipher3.phpt ---
--TEST--
RC2 Cipher:: Tests
--FILE--
<?php
require_once dirname(__FILE__) . "/../Cipher.php";
if (!function_exists('testCipher')) {
function testCipher($cipher, $key, $plaintext, $ciphertext)
{
$cipher = &Horde_Cipher::factory($cipher);
$cipher->setKey($key);
echo "Testing Encryption: ";
$res = $cipher->encryptBlock($plaintext);
if ($res == $ciphertext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($ciphertext); $i++) {
echo str_pad(dechex(ord(substr($ciphertext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "Testing Decryption: ";
$res = $cipher->decryptBlock($ciphertext);
if ($res == $plaintext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($plaintext); $i++) {
echo str_pad(dechex(ord(substr($plaintext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "\n";
flush();
}
}
/* RC2 Cipher */
echo "RC2:\n";
echo "----\n\n";
// 8 Bit key test
echo "8-bit Key\n";
$key = "\x88";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\x61\xa8\xa2\x44\xad\xac\xcc\xf0";
testCipher('rc2', $key, $plaintext, $ciphertext);
// 64 Bit key test
echo "64-bit Key\n";
$key = "\x00\x00\x00\x00\x00\x00\x00\x00";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\xeb\xb7\x73\xf9\x93\x27\x8e\xff";
testCipher('rc2', $key, $plaintext, $ciphertext);
// 128 Bit key test
echo "128-bit Key\n";
$key = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\x50\xDC\x01\x62\xBD\x75\x7F\x31";
testCipher('rc2', $key, $plaintext, $ciphertext);
// 64 Bit key test
echo "64-bit Key\n";
$key = "\xff\xff\xff\xff\xff\xff\xff\xff";
$plaintext = "\xff\xff\xff\xff\xff\xff\xff\xff";
$ciphertext = "\x27\x8b\x27\xe4\x2e\x2f\x0d\x49";
testCipher('rc2', $key, $plaintext, $ciphertext);
?>
--EXPECT--
RC2:
----
8-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
128-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
--- NEW FILE: Cipher4.phpt ---
--TEST--
Cast128 Cipher:: Tests
--FILE--
<?php
require_once dirname(__FILE__) . "/../Cipher.php";
if (!function_exists('testCipher')) {
function testCipher($cipher, $key, $plaintext, $ciphertext)
{
$cipher = &Horde_Cipher::factory($cipher);
$cipher->setKey($key);
echo "Testing Encryption: ";
$res = $cipher->encryptBlock($plaintext);
if ($res == $ciphertext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($ciphertext); $i++) {
echo str_pad(dechex(ord(substr($ciphertext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "Testing Decryption: ";
$res = $cipher->decryptBlock($ciphertext);
if ($res == $plaintext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($plaintext); $i++) {
echo str_pad(dechex(ord(substr($plaintext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "\n";
flush();
}
}
/* Cast 128 Cipher */
echo "Cast 128:\n";
echo "---------\n\n";
// 128 Bit key test
echo "128-bit Key\n";
$key = "\x01\x23\x45\x67\x12\x34\x56\x78\x23\x45\x67\x89\x34\x56\x78\x9A";
$plaintext = "\x01\x23\x45\x67\x89\xAB\xCD\xEF";
$ciphertext = "\x23\x8B\x4F\xE5\x84\x7E\x44\xB2";
testCipher('cast128', $key, $plaintext, $ciphertext);
// 80 Bit key text
echo "80-bit Key\n";
$key = "\x01\x23\x45\x67\x12\x34\x56\x78\x23\x45";
$plaintext = "\x01\x23\x45\x67\x89\xAB\xCD\xEF";
$ciphertext = "\xEB\x6A\x71\x1A\x2C\x02\x27\x1B";
testCipher('cast128', $key, $plaintext, $ciphertext);
// 40 Bit key text
echo "40-bit Key\n";
$key = "\x01\x23\x45\x67\x12";
$plaintext = "\x01\x23\x45\x67\x89\xAB\xCD\xEF";
$ciphertext = "\x7A\xC8\x16\xD1\x6E\x9B\x30\x2E";
testCipher('cast128', $key, $plaintext, $ciphertext);
?>
--EXPECT--
Cast 128:
---------
128-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
80-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
40-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
--- NEW FILE: Cipher5.phpt ---
--TEST--
Blowfish Cipher:: Tests
--FILE--
<?php
require_once dirname(__FILE__) . "/../Cipher.php";
if (!function_exists('testCipher')) {
function testCipher($cipher, $key, $plaintext, $ciphertext)
{
$cipher = &Horde_Cipher::factory($cipher);
$cipher->setKey($key);
echo "Testing Encryption: ";
$res = $cipher->encryptBlock($plaintext);
if ($res == $ciphertext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($ciphertext); $i++) {
echo str_pad(dechex(ord(substr($ciphertext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "Testing Decryption: ";
$res = $cipher->decryptBlock($ciphertext);
if ($res == $plaintext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($plaintext); $i++) {
echo str_pad(dechex(ord(substr($plaintext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "\n";
flush();
}
}
/* Blowfish */
// selection of tests from: http://www.counterpane.com/vectors.txt
echo "Blowfish:\n";
echo "---------\n\n";
// 64 Bit key text
echo "64-bit Key\n";
$key = "\x49\xE9\x5D\x6D\x4C\xA2\x29\xBF";
$plaintext = "\x02\xFE\x55\x77\x81\x17\xF1\x2A";
$ciphertext = "\xCF\x9C\x5D\x7A\x49\x86\xAD\xB5";
testCipher('blowfish', $key, $plaintext, $ciphertext);
$plaintext = "\xFE\xDC\xBA\x98\x76\x54\x32\x10";
$c[ 1] = "\xF9\xAD\x59\x7C\x49\xDB\x00\x5E"; $k[ 1] = "\xF0";
$c[ 2] = "\xE9\x1D\x21\xC1\xD9\x61\xA6\xD6"; $k[ 2] = "\xF0\xE1";
$c[ 3] = "\xE9\xC2\xB7\x0A\x1B\xC6\x5C\xF3"; $k[ 3] = "\xF0\xE1\xD2";
$c[ 4] = "\xBE\x1E\x63\x94\x08\x64\x0F\x05"; $k[ 4] = "\xF0\xE1\xD2\xC3";
$c[ 5] = "\xB3\x9E\x44\x48\x1B\xDB\x1E\x6E"; $k[ 5] = "\xF0\xE1\xD2\xC3\xB4";
$c[ 6] = "\x94\x57\xAA\x83\xB1\x92\x8C\x0D"; $k[ 6] = "\xF0\xE1\xD2\xC3\xB4\xA5";
$c[ 7] = "\x8B\xB7\x70\x32\xF9\x60\x62\x9D"; $k[ 7] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96";
$c[ 8] = "\xE8\x7A\x24\x4E\x2C\xC8\x5E\x82"; $k[ 8] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87";
$c[ 9] = "\x15\x75\x0E\x7A\x4F\x4E\xC5\x77"; $k[ 9] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78";
$c[10] = "\x12\x2B\xA7\x0B\x3A\xB6\x4A\xE0"; $k[10] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69";
$c[11] = "\x3A\x83\x3C\x9A\xFF\xC5\x37\xF6"; $k[11] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A";
$c[12] = "\x94\x09\xDA\x87\xA9\x0F\x6B\xF2"; $k[12] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B";
$c[13] = "\x88\x4F\x80\x62\x50\x60\xB8\xB4"; $k[13] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C";
$c[14] = "\x1F\x85\x03\x1C\x19\xE1\x19\x68"; $k[14] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D";
$c[15] = "\x79\xD9\x37\x3A\x71\x4C\xA3\x4F"; $k[15] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E";
$c[16] = "\x93\x14\x28\x87\xEE\x3B\xE1\x5C"; $k[16] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F";
$c[17] = "\x03\x42\x9E\x83\x8C\xE2\xD1\x4B"; $k[17] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00";
$c[18] = "\xA4\x29\x9E\x27\x46\x9F\xF6\x7B"; $k[18] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11";
$c[19] = "\xAF\xD5\xAE\xD1\xC1\xBC\x96\xA8"; $k[19] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22";
$c[20] = "\x10\x85\x1C\x0E\x38\x58\xDA\x9F"; $k[20] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33";
$c[21] = "\xE6\xF5\x1E\xD7\x9B\x9D\xB2\x1F"; $k[21] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33\x44";
$c[22] = "\x64\xA6\xE1\x4A\xFD\x36\xB4\x6F"; $k[22] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33\x44\x55";
$c[23] = "\x80\xC7\xD7\xD4\x5A\x54\x79\xAD"; $k[23] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33\x44\x55\x66";
$c[24] = "\x05\x04\x4B\x62\xFA\x52\xD0\x80"; $k[24] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33\x44\x55\x66\x77";
foreach ($k as $id => $key) {
echo (strlen($key) * 8) . "-bit Key\n";
testCipher('blowfish', $key, $plaintext, $c[$id]);
}
?>
--EXPECT--
Blowfish:
---------
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
8-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
16-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
24-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
32-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
40-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
48-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
56-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
64-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
72-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
80-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
88-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
96-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
104-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
112-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
120-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
128-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
136-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
144-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
152-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
160-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
168-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
176-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
184-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
192-bit Key
Testing Encryption: Pass
Testing Decryption: Pass
--- NEW FILE: Cipher6.phpt ---
--TEST--
Blockmode Cipher:: Tests
--FILE--
<?php
require_once dirname(__FILE__) . "/../Cipher.php";
if (!function_exists('testBlockCipher')) {
function testBlockCipher(&$cipher, $plaintext, $ciphertext)
{
echo "Testing Encryption: ";
if ($cipher->encrypt($plaintext) == $ciphertext) {
echo "Pass\n";
} else {
echo "Fail\n";
}
echo "Testing Decryption: ";
if ($cipher->decrypt($ciphertext) == $plaintext) {
echo "Pass\n";
} else {
echo "Fail\n";
}
echo "\n";
flush();
}
}
/* Block Mode Tests */
echo "Block Mode Tests:\n";
echo "-----------------\n";
echo "(using Blowfish test vectors)\n\n";
$key = "\x01\x23\x45\x67\x89\xAB\xCD\xEF\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87";
$iv = "\xFE\xDC\xBA\x98\x76\x54\x32\x10";
$plaintext = "7654321 Now is the time for ";
echo "Cipher Block Chaining (CBC) Test\n";
$ciphertext = "\x6B\x77\xB4\xD6\x30\x06\xDE\xE6\x05\xB1\x56\xE2\x74\x03\x97\x93\x58\xDE\xB9\xE7\x15\x46\x16\xD9\x59\xF1\x65\x2B\xD5\xFF\x92\xCC";
$cipher = &Horde_Cipher::factory('blowfish');
$cipher->setBlockMode("cbc");
$cipher->setKey($key);
$cipher->setIV($iv);
testBlockCipher($cipher, $plaintext, $ciphertext);
echo "Electronic Code Book (ECB) Test\n";
$ciphertext = "\x2a\xfd\x7d\xaa\x60\x62\x6b\xa3\x86\x16\x46\x8c\xc2\x9c\xf6\xe1\x29\x1e\x81\x7c\xc7\x40\x98\x2d\x6f\x87\xac\x5f\x17\x1a\xab\xea";
$cipher = &Horde_Cipher::factory('blowfish');
$cipher->setBlockMode("ecb");
$cipher->setKey($key);
$cipher->setIV($iv);
testBlockCipher($cipher, $plaintext, $ciphertext);
echo "64 Bit Cipher Feedback (CFB64) Test\n";
$ciphertext = "\xE7\x32\x14\xA2\x82\x21\x39\xCA\xF2\x6E\xCF\x6D\x2E\xB9\xE7\x6E\x3D\xA3\xDE\x04\xD1\x51\x72\x00\x51\x9D\x57\xA6";
$cipher = &Horde_Cipher::factory('blowfish');
$cipher->setBlockMode("cfb64");
$cipher->setKey($key);
$cipher->setIV($iv);
testBlockCipher($cipher, $plaintext, $ciphertext);
echo "64 Bit Output Feedback (OFB64) Test\n";
$ciphertext = "\xE7\x32\x14\xA2\x82\x21\x39\xCA\x62\xB3\x43\xCC\x5B\x65\x58\x73\x10\xDD\x90\x8D\x0C\x24\x1B\x22\x63\xC2\xCF\x80";
$cipher = &Horde_Cipher::factory('blowfish');
$cipher->setBlockMode("ofb64");
$cipher->setKey($key);
$cipher->setIV($iv);
testBlockCipher($cipher, $plaintext, $ciphertext);
?>
--EXPECT--
Block Mode Tests:
-----------------
(using Blowfish test vectors)
Cipher Block Chaining (CBC) Test
Testing Encryption: Pass
Testing Decryption: Pass
Electronic Code Book (ECB) Test
Testing Encryption: Pass
Testing Decryption: Pass
64 Bit Cipher Feedback (CFB64) Test
Testing Encryption: Pass
Testing Decryption: Pass
64 Bit Output Feedback (OFB64) Test
Testing Encryption: Pass
Testing Decryption: Pass
--- NEW FILE: cipherTest.php ---
#!/usr/local/bin/php
<?php
/**
* $Horde: framework/Cipher/tests/cipherTest.php,v 1.3 2004/01/28 13:13:15 mdjukic Exp $
*
* This script tests the different cipher classes to check
* conformance.
*
* @package Horde_Cipher
*/
ini_set('display_errors', '1');
require_once dirname(__FILE__) . '/../../Cipher.php';
/* RC4 Cipher */
echo "RC4:\n";
echo "----\n\n";
// 64 Bit key test
echo "64-bit Key\n";
$key = "\x01\x23\x45\x67\x89\xab\xcd\xef";
$plaintext = "\x01\x23\x45\x67\x89\xab\xcd\xef";
$ciphertext = "\x75\xb7\x87\x80\x99\xe0\xc5\x96";
testCipher('rc4', $key, $plaintext, $ciphertext);
// 64 Bit key test
echo "64-bit Key\n";
$key = "\x01\x23\x45\x67\x89\xab\xcd\xef";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\x74\x94\xc2\xe7\x10\x4b\x08\x79";
testCipher('rc4', $key, $plaintext, $ciphertext);
// 64 Bit key test
echo "64-bit Key\n";
$key = "\x00\x00\x00\x00\x00\x00\x00\x00";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\xde\x18\x89\x41\xa3\x37\x5d\x3a";
testCipher('rc4', $key, $plaintext, $ciphertext);
// 32 Bit key test
echo "32-bit Key\n";
$key = "\xef\x01\x23\x45";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf";
testCipher('rc4', $key, $plaintext, $ciphertext);
/* DES Cipher */
echo "DES:\n";
echo "----\n\n";
// 64 Bit key test
$tests = array(
"\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\x00", "\x8C\xA6\x4D\xE9\xC1\xB1\x23\xA7",
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", "\x73\x59\xB2\x16\x3E\x4E\xDC\x58",
"\x30\x00\x00\x00\x00\x00\x00\x00", "\x10\x00\x00\x00\x00\x00\x00\x01", "\x95\x8E\x6E\x62\x7A\x05\x55\x7B",
"\x01\x23\x45\x67\x89\xAB\xCD\xEF", "\x11\x11\x11\x11\x11\x11\x11\x11", "\x17\x66\x8D\xFC\x72\x92\x53\x2D",
"\x11\x11\x11\x11\x11\x11\x11\x11", "\x01\x23\x45\x67\x89\xAB\xCD\xEF", "\x8A\x5A\xE1\xF8\x1A\xB8\xF2\xDD",
// Initial Permutation and Expansion test
"\x01\x01\x01\x01\x01\x01\x01\x01", "\x95\xF8\xA5\xE5\xDD\x31\xD9\x00", "\x80\x00\x00\x00\x00\x00\x00\x00",
// Key Permutation test
"\x80\x01\x01\x01\x01\x01\x01\x01", "\x00\x00\x00\x00\x00\x00\x00\x00", "\x95\xA8\xD7\x28\x13\xDA\xA9\x4D",
// Data Permutation tests
"\x10\x46\x91\x34\x89\x98\x01\x31", "\x00\x00\x00\x00\x00\x00\x00\x00", "\x88\xD5\x5E\x54\xF5\x4C\x97\xB4",
// S-Box test
"\x7C\xA1\x10\x45\x4A\x1A\x6E\x57", "\x01\xA1\xD6\xD0\x39\x77\x67\x42", "\x69\x0F\x5B\x0D\x9A\x26\x93\x9B",
"\x01\x31\xD9\x61\x9D\xC1\x37\x6E", "\x5C\xD5\x4C\xA8\x3D\xEF\x57\xDA", "\x7A\x38\x9D\x10\x35\x4B\xD2\x71",
);
for ($i = 0; $i < count($tests); $i+= 3) {
echo "64-bit Key\n";
$key = $tests[$i];
$plaintext = $tests[$i + 1];
$ciphertext = $tests[$i + 2];
testCipher('des', $key, $plaintext, $ciphertext);
}
/* RC2 Cipher */
echo "RC2:\n";
echo "----\n\n";
// 8 Bit key test
echo "8-bit Key\n";
$key = "\x88";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\x61\xa8\xa2\x44\xad\xac\xcc\xf0";
testCipher('rc2', $key, $plaintext, $ciphertext);
// 64 Bit key test
echo "64-bit Key\n";
$key = "\x00\x00\x00\x00\x00\x00\x00\x00";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\xeb\xb7\x73\xf9\x93\x27\x8e\xff";
testCipher('rc2', $key, $plaintext, $ciphertext);
// 128 Bit key test
echo "128-bit Key\n";
$key = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";
$plaintext = "\x00\x00\x00\x00\x00\x00\x00\x00";
$ciphertext = "\x50\xDC\x01\x62\xBD\x75\x7F\x31";
testCipher('rc2', $key, $plaintext, $ciphertext);
// 64 Bit key test
echo "64-bit Key\n";
$key = "\xff\xff\xff\xff\xff\xff\xff\xff";
$plaintext = "\xff\xff\xff\xff\xff\xff\xff\xff";
$ciphertext = "\x27\x8b\x27\xe4\x2e\x2f\x0d\x49";
testCipher('rc2', $key, $plaintext, $ciphertext);
/* Cast 128 Cipher */
echo "Cast 128:\n";
echo "---------\n\n";
// 128 Bit key test
echo "128-bit Key\n";
$key = "\x01\x23\x45\x67\x12\x34\x56\x78\x23\x45\x67\x89\x34\x56\x78\x9A";
$plaintext = "\x01\x23\x45\x67\x89\xAB\xCD\xEF";
$ciphertext = "\x23\x8B\x4F\xE5\x84\x7E\x44\xB2";
testCipher('cast128', $key, $plaintext, $ciphertext);
// 80 Bit key text
echo "80-bit Key\n";
$key = "\x01\x23\x45\x67\x12\x34\x56\x78\x23\x45";
$plaintext = "\x01\x23\x45\x67\x89\xAB\xCD\xEF";
$ciphertext = "\xEB\x6A\x71\x1A\x2C\x02\x27\x1B";
testCipher('cast128', $key, $plaintext, $ciphertext);
// 40 Bit key text
echo "40-bit Key\n";
$key = "\x01\x23\x45\x67\x12";
$plaintext = "\x01\x23\x45\x67\x89\xAB\xCD\xEF";
$ciphertext = "\x7A\xC8\x16\xD1\x6E\x9B\x30\x2E";
testCipher('cast128', $key, $plaintext, $ciphertext);
/* Blowfish */
// selection of tests from: http://www.counterpane.com/vectors.txt
echo "Blowfish:\n";
echo "---------\n\n";
// 64 Bit key text
echo "64-bit Key\n";
$key = "\x49\xE9\x5D\x6D\x4C\xA2\x29\xBF";
$plaintext = "\x02\xFE\x55\x77\x81\x17\xF1\x2A";
$ciphertext = "\xCF\x9C\x5D\x7A\x49\x86\xAD\xB5";
testCipher('blowfish', $key, $plaintext, $ciphertext);
$plaintext = "\xFE\xDC\xBA\x98\x76\x54\x32\x10";
$c[ 1] = "\xF9\xAD\x59\x7C\x49\xDB\x00\x5E"; $k[ 1] = "\xF0";
$c[ 2] = "\xE9\x1D\x21\xC1\xD9\x61\xA6\xD6"; $k[ 2] = "\xF0\xE1";
$c[ 3] = "\xE9\xC2\xB7\x0A\x1B\xC6\x5C\xF3"; $k[ 3] = "\xF0\xE1\xD2";
$c[ 4] = "\xBE\x1E\x63\x94\x08\x64\x0F\x05"; $k[ 4] = "\xF0\xE1\xD2\xC3";
$c[ 5] = "\xB3\x9E\x44\x48\x1B\xDB\x1E\x6E"; $k[ 5] = "\xF0\xE1\xD2\xC3\xB4";
$c[ 6] = "\x94\x57\xAA\x83\xB1\x92\x8C\x0D"; $k[ 6] = "\xF0\xE1\xD2\xC3\xB4\xA5";
$c[ 7] = "\x8B\xB7\x70\x32\xF9\x60\x62\x9D"; $k[ 7] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96";
$c[ 8] = "\xE8\x7A\x24\x4E\x2C\xC8\x5E\x82"; $k[ 8] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87";
$c[ 9] = "\x15\x75\x0E\x7A\x4F\x4E\xC5\x77"; $k[ 9] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78";
$c[10] = "\x12\x2B\xA7\x0B\x3A\xB6\x4A\xE0"; $k[10] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69";
$c[11] = "\x3A\x83\x3C\x9A\xFF\xC5\x37\xF6"; $k[11] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A";
$c[12] = "\x94\x09\xDA\x87\xA9\x0F\x6B\xF2"; $k[12] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B";
$c[13] = "\x88\x4F\x80\x62\x50\x60\xB8\xB4"; $k[13] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C";
$c[14] = "\x1F\x85\x03\x1C\x19\xE1\x19\x68"; $k[14] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D";
$c[15] = "\x79\xD9\x37\x3A\x71\x4C\xA3\x4F"; $k[15] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E";
$c[16] = "\x93\x14\x28\x87\xEE\x3B\xE1\x5C"; $k[16] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F";
$c[17] = "\x03\x42\x9E\x83\x8C\xE2\xD1\x4B"; $k[17] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00";
$c[18] = "\xA4\x29\x9E\x27\x46\x9F\xF6\x7B"; $k[18] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11";
$c[19] = "\xAF\xD5\xAE\xD1\xC1\xBC\x96\xA8"; $k[19] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22";
$c[20] = "\x10\x85\x1C\x0E\x38\x58\xDA\x9F"; $k[20] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33";
$c[21] = "\xE6\xF5\x1E\xD7\x9B\x9D\xB2\x1F"; $k[21] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33\x44";
$c[22] = "\x64\xA6\xE1\x4A\xFD\x36\xB4\x6F"; $k[22] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33\x44\x55";
$c[23] = "\x80\xC7\xD7\xD4\x5A\x54\x79\xAD"; $k[23] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33\x44\x55\x66";
$c[24] = "\x05\x04\x4B\x62\xFA\x52\xD0\x80"; $k[24] = "\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87\x78\x69\x5A\x4B\x3C\x2D\x1E\x0F\x00\x11\x22\x33\x44\x55\x66\x77";
foreach ($k as $id => $key) {
echo (strlen($key) * 8) . "-bit Key\n";
testCipher('blowfish', $key, $plaintext, $c[$id]);
}
/* Block Mode Tests */
echo "Block Mode Tests:\n";
echo "-----------------\n";
echo "(using Blowfish test vectors)\n\n";
$key = "\x01\x23\x45\x67\x89\xAB\xCD\xEF\xF0\xE1\xD2\xC3\xB4\xA5\x96\x87";
$iv = "\xFE\xDC\xBA\x98\x76\x54\x32\x10";
$plaintext = "7654321 Now is the time for ";
echo "Cipher Block Chaining (CBC) Test\n";
$ciphertext = "\x6B\x77\xB4\xD6\x30\x06\xDE\xE6\x05\xB1\x56\xE2\x74\x03\x97\x93\x58\xDE\xB9\xE7\x15\x46\x16\xD9\x59\xF1\x65\x2B\xD5\xFF\x92\xCC";
$cipher = &Horde_Cipher::factory('blowfish');
$cipher->setBlockMode("cbc");
$cipher->setKey($key);
$cipher->setIV($iv);
testBlockCipher($cipher, $plaintext, $ciphertext);
echo "Electronic Code Book (ECB) Test\n";
$ciphertext = "\x2a\xfd\x7d\xaa\x60\x62\x6b\xa3\x86\x16\x46\x8c\xc2\x9c\xf6\xe1\x29\x1e\x81\x7c\xc7\x40\x98\x2d\x6f\x87\xac\x5f\x17\x1a\xab\xea";
$cipher = &Horde_Cipher::factory('blowfish');
$cipher->setBlockMode("ecb");
$cipher->setKey($key);
$cipher->setIV($iv);
testBlockCipher($cipher, $plaintext, $ciphertext);
echo "64 Bit Cipher Feedback (CFB64) Test\n";
$ciphertext = "\xE7\x32\x14\xA2\x82\x21\x39\xCA\xF2\x6E\xCF\x6D\x2E\xB9\xE7\x6E\x3D\xA3\xDE\x04\xD1\x51\x72\x00\x51\x9D\x57\xA6";
$cipher = &Horde_Cipher::factory('blowfish');
$cipher->setBlockMode("cfb64");
$cipher->setKey($key);
$cipher->setIV($iv);
testBlockCipher($cipher, $plaintext, $ciphertext);
echo "64 Bit Output Feedback (OFB64) Test\n";
$ciphertext = "\xE7\x32\x14\xA2\x82\x21\x39\xCA\x62\xB3\x43\xCC\x5B\x65\x58\x73\x10\xDD\x90\x8D\x0C\x24\x1B\x22\x63\xC2\xCF\x80";
$cipher = &Horde_Cipher::factory('blowfish');
$cipher->setBlockMode("ofb64");
$cipher->setKey($key);
$cipher->setIV($iv);
testBlockCipher($cipher, $plaintext, $ciphertext);
function testBlockCipher(&$cipher, $plaintext, $ciphertext)
{
echo "Testing Encryption: ";
if ($cipher->encrypt($plaintext) == $ciphertext) {
echo "Pass\n";
} else {
echo "Fail\n";
}
echo "Testing Decryption: ";
if ($cipher->decrypt($ciphertext) == $plaintext) {
echo "Pass\n";
} else {
echo "Fail\n";
}
echo "\n";
flush();
}
function testCipher($cipher, $key, $plaintext, $ciphertext)
{
$cipher = &Horde_Cipher::factory($cipher);
$cipher->setKey($key);
echo "Testing Encryption: ";
$res = $cipher->encryptBlock($plaintext);
if ($res == $ciphertext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($ciphertext); $i++) {
echo str_pad(dechex(ord(substr($ciphertext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "Testing Decryption: ";
$res = $cipher->decryptBlock($ciphertext);
if ($res == $plaintext) {
echo "Pass\n";
} else {
echo "Fail\n";
echo "Returned: ";
for ($i = 0; $i < strlen($res); $i++) {
echo str_pad(dechex(ord(substr($res, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
echo "Expected: ";
for ($i = 0; $i < strlen($plaintext); $i++) {
echo str_pad(dechex(ord(substr($plaintext, $i, 1))), 2, '0', STR_PAD_LEFT) . " ";
} echo "\n";
}
echo "\n";
flush();
}
More information about the commits
mailing list