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_CbcTest 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_cbc.txt'); 54 $vectors = array(); 55 56 foreach ($data as $val) { 57 list($key, $iv, $plain) = explode(' ', trim($val)); 58 $vectors[] = array( 59 array( 60 'key' => pack("H*", $key), 61 'iv' => pack("H*", $iv), 62 'plain' => pack("H*", $plain) 63 ) 64 ); 65 } 66 67 return $vectors; 68 } 69 70 protected function _doTest($v, $ignore) 71 { 72 $ob = new Horde_Crypt_Blowfish($v['key'], array( 73 'cipher' => 'cbc', 74 'ignore' => $ignore, 75 'iv' => $v['iv'] 76 )); 77 78 $encrypt = $ob->encrypt($v['plain']); 79 80 // Let's verify some sort of obfuscation occurred. 81 $this->assertNotEquals( 82 $v['plain'], 83 $encrypt 84 ); 85 86 $this->assertEquals( 87 $v['plain'], 88 $ob->decrypt($encrypt) 89 ); 90 } 91 92} 93