diff options
-rw-r--r-- | Auth/OpenID/HMAC.php | 2 | ||||
-rw-r--r-- | Tests/Auth/OpenID/HMAC.php | 26 | ||||
-rw-r--r-- | Tests/Auth/OpenID/data/hmac-sha256.txt | 29 |
3 files changed, 46 insertions, 11 deletions
diff --git a/Auth/OpenID/HMAC.php b/Auth/OpenID/HMAC.php index 6e1cfb6..ec42db8 100644 --- a/Auth/OpenID/HMAC.php +++ b/Auth/OpenID/HMAC.php @@ -88,7 +88,7 @@ if (function_exists('hash_hmac') && function Auth_OpenID_HMACSHA256($key, $text) { // Return raw MAC (not hex string). - return hash_hmac('sha256', $key, $text, true); + return hash_hmac('sha256', $text, $key, true); } define('Auth_OpenID_HMACSHA256_SUPPORTED', true); diff --git a/Tests/Auth/OpenID/HMAC.php b/Tests/Auth/OpenID/HMAC.php index fde4102..cc2655a 100644 --- a/Tests/Auth/OpenID/HMAC.php +++ b/Tests/Auth/OpenID/HMAC.php @@ -33,7 +33,7 @@ class Tests_Auth_OpenID_HMAC_TestCase extends PHPUnit_TestCase { function runTest() { $actual = call_user_func($this->hmac_func, $this->key, $this->data); - $this->assertEquals($this->expected, $actual); + $this->assertEquals(bin2hex($this->expected), bin2hex($actual)); } } @@ -58,7 +58,7 @@ class Tests_Auth_OpenID_HMAC extends PHPUnit_TestSuite { return $data; } - function _readTestCases($test_file_name) + function _readTestCases($test_file_name, $digest_len) { $lines = Tests_Auth_OpenID_readlines($test_file_name); $cases = array(); @@ -104,19 +104,23 @@ class Tests_Auth_OpenID_HMAC extends PHPUnit_TestSuite { $clean = array(); $clean["key"] = Tests_Auth_OpenID_HMAC::_strConvert($case["key"]); - if (Auth_OpenID::bytes($clean["key"]) != $case["key_len"]) { - trigger_error("Bad key length", E_USER_ERROR); + if (defined(@$case["key_len"])) { + if (Auth_OpenID::bytes($clean["key"]) != $case["key_len"]) { + trigger_error("Bad key length", E_USER_ERROR); + } } $clean["data"] = Tests_Auth_OpenID_HMAC::_strConvert($case["data"]); - if (Auth_OpenID::bytes($clean["data"]) != $case["data_len"]) { - trigger_error("Bad data length", E_USER_ERROR); + if (defined(@$case["data_len"])) { + if (Auth_OpenID::bytes($clean["data"]) != $case["data_len"]) { + trigger_error("Bad data length", E_USER_ERROR); + } } $clean["digest"] = Tests_Auth_OpenID_HMAC::_strConvert($case["digest"]); - if (Auth_OpenID::bytes($clean["digest"]) != 20) { + if (Auth_OpenID::bytes($clean["digest"]) != $digest_len) { $l = Auth_OpenID::bytes($clean["digest"]); trigger_error("Bad digest length: $l", E_USER_ERROR); } @@ -131,9 +135,11 @@ class Tests_Auth_OpenID_HMAC extends PHPUnit_TestSuite { function Tests_Auth_OpenID_HMAC($name) { $this->setName($name); - foreach (array('Auth_OpenID_HMACSHA1' => 'hmac-sha1.txt') - as $hash_func => $filename) { - $cases = $this->_readTestCases('hmac-sha1.txt'); + foreach (array(array('Auth_OpenID_HMACSHA1', 'hmac-sha1.txt', 20), + array('Auth_OpenID_HMACSHA256', 'hmac-sha256.txt', 32)) + as $params) { + list($hash_func, $filename, $hash_len) = $params; + $cases = $this->_readTestCases($filename, $hash_len); foreach ($cases as $case) { $test = new Tests_Auth_OpenID_HMAC_TestCase( $case['test_case'], diff --git a/Tests/Auth/OpenID/data/hmac-sha256.txt b/Tests/Auth/OpenID/data/hmac-sha256.txt new file mode 100644 index 0000000..a0b2e73 --- /dev/null +++ b/Tests/Auth/OpenID/data/hmac-sha256.txt @@ -0,0 +1,29 @@ +test_case = 1 +key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b +data = 0x4869205468657265 +digest = 0xb0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7 + +test_case = 2 +key = 0x4a656665 +data = 0x7768617420646f2079612077616e7420666f72206e6f7468696e673f +digest = 0x5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 + +test_case = 3 +key = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +data = 0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +digest = 0x773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe + +test_case = 4 +key = 0x0102030405060708090a0b0c0d0e0f10111213141516171819 +data = 0xcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd +digest = 0x82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b + +test_case = 6 +key = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +data = 0x54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374 +digest = 0x60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54 + +test_case = 7 +key = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +data = 0x5468697320697320612074657374207573696e672061206c6172676572207468616e20626c6f636b2d73697a65206b657920616e642061206c6172676572207468616e20626c6f636b2d73697a6520646174612e20546865206b6579206e6565647320746f20626520686173686564206265666f7265206265696e6720757365642062792074686520484d414320616c676f726974686d2e +digest = 0x9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2 |