1<?php 2/** 3 * @category Horde 4 * @package Crypt_Blowfish 5 * @subpackage UnitTests 6 */ 7 8/** 9 * @category Horde 10 * @package Crypt_Blowfish 11 * @subpackage UnitTests 12 */ 13class Horde_Crypt_Blowfish_EcbTest extends Horde_Test_Case 14{ 15 /** 16 * @dataProvider vectorProvider 17 */ 18 public function testOpensslDriver($vector) 19 { 20 if (!Horde_Crypt_Blowfish_Openssl::supported()) { 21 $this->markTestSkipped(); 22 } 23 24 $this->_doTest($vector, 0); 25 } 26 27 /** 28 * @dataProvider vectorProvider 29 */ 30 public function testMcryptDriver($vector) 31 { 32 if (!Horde_Crypt_Blowfish_Mcrypt::supported()) { 33 $this->markTestSkipped(); 34 } 35 36 $this->_doTest($vector, Horde_Crypt_Blowfish::IGNORE_OPENSSL); 37 } 38 39 /** 40 * @dataProvider vectorProvider 41 */ 42 public function testPhpDriver($vector) 43 { 44 $this->_doTest( 45 $vector, 46 Horde_Crypt_Blowfish::IGNORE_OPENSSL | 47 Horde_Crypt_Blowfish::IGNORE_MCRYPT 48 ); 49 } 50 51 public function vectorProvider() 52 { 53 $data = file(dirname(__FILE__) . '/fixtures/vectors.txt'); 54 $vectors = array(); 55 56 foreach ($data as $val) { 57 list($key, $plain) = explode(' ', trim($val)); 58 $vectors[] = array( 59 array( 60 'key' => pack("H*", $key), 61 'plain' => pack("H*", $plain) 62 ) 63 ); 64 } 65 66 return $vectors; 67 } 68 69 protected function _doTest($v, $ignore) 70 { 71 $ob = new Horde_Crypt_Blowfish($v['key'], array( 72 'cipher' => 'ecb', 73 'ignore' => $ignore 74 )); 75 76 $encrypt = $ob->encrypt($v['plain']); 77 78 // Let's verify some sort of obfuscation occurred. 79 $this->assertNotEquals( 80 $v['plain'], 81 $encrypt 82 ); 83 84 $this->assertEquals( 85 $v['plain'], 86 $ob->decrypt($encrypt) 87 ); 88 } 89 90} 91