mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-11-09 15:20:58 +00:00
Merge pull request #446 from terrafrost/hash-96-2
Hash: add sha256-96 and sha512-96 * terrafrost/hash-96-2: Hash: apply fixes to sha512 unit tests as well Hash: one more fix to unit test Hash: fix unit tests Hash: add unit tests Hash: add sha256-96 and sha512-96
This commit is contained in:
commit
63974e9bbc
@ -5,7 +5,7 @@
|
|||||||
*
|
*
|
||||||
* Uses hash() or mhash() if available and an internal implementation, otherwise. Currently supports the following:
|
* Uses hash() or mhash() if available and an internal implementation, otherwise. Currently supports the following:
|
||||||
*
|
*
|
||||||
* md2, md5, md5-96, sha1, sha1-96, sha256, sha384, and sha512
|
* md2, md5, md5-96, sha1, sha1-96, sha256, sha256-96, sha384, and sha512, sha512-96
|
||||||
*
|
*
|
||||||
* If {@link Crypt_Hash::setKey() setKey()} is called, {@link Crypt_Hash::hash() hash()} will return the HMAC as opposed to
|
* If {@link Crypt_Hash::setKey() setKey()} is called, {@link Crypt_Hash::hash() hash()} will return the HMAC as opposed to
|
||||||
* the hash. If no valid algorithm is provided, sha1 will be used.
|
* the hash. If no valid algorithm is provided, sha1 will be used.
|
||||||
@ -207,6 +207,9 @@ class Crypt_Hash
|
|||||||
switch ($hash) {
|
switch ($hash) {
|
||||||
case 'md5-96':
|
case 'md5-96':
|
||||||
case 'sha1-96':
|
case 'sha1-96':
|
||||||
|
case 'sha256-96':
|
||||||
|
case 'sha512-96':
|
||||||
|
$hash = substr($hash, 0, -3);
|
||||||
$this->l = 12; // 96 / 8 = 12
|
$this->l = 12; // 96 / 8 = 12
|
||||||
break;
|
break;
|
||||||
case 'md2':
|
case 'md2':
|
||||||
@ -243,14 +246,12 @@ class Crypt_Hash
|
|||||||
case CRYPT_HASH_MODE_MHASH:
|
case CRYPT_HASH_MODE_MHASH:
|
||||||
switch ($hash) {
|
switch ($hash) {
|
||||||
case 'md5':
|
case 'md5':
|
||||||
case 'md5-96':
|
|
||||||
$this->hash = MHASH_MD5;
|
$this->hash = MHASH_MD5;
|
||||||
break;
|
break;
|
||||||
case 'sha256':
|
case 'sha256':
|
||||||
$this->hash = MHASH_SHA256;
|
$this->hash = MHASH_SHA256;
|
||||||
break;
|
break;
|
||||||
case 'sha1':
|
case 'sha1':
|
||||||
case 'sha1-96':
|
|
||||||
default:
|
default:
|
||||||
$this->hash = MHASH_SHA1;
|
$this->hash = MHASH_SHA1;
|
||||||
}
|
}
|
||||||
@ -258,7 +259,6 @@ class Crypt_Hash
|
|||||||
case CRYPT_HASH_MODE_HASH:
|
case CRYPT_HASH_MODE_HASH:
|
||||||
switch ($hash) {
|
switch ($hash) {
|
||||||
case 'md5':
|
case 'md5':
|
||||||
case 'md5-96':
|
|
||||||
$this->hash = 'md5';
|
$this->hash = 'md5';
|
||||||
return;
|
return;
|
||||||
case 'md2':
|
case 'md2':
|
||||||
@ -268,7 +268,6 @@ class Crypt_Hash
|
|||||||
$this->hash = $hash;
|
$this->hash = $hash;
|
||||||
return;
|
return;
|
||||||
case 'sha1':
|
case 'sha1':
|
||||||
case 'sha1-96':
|
|
||||||
default:
|
default:
|
||||||
$this->hash = 'sha1';
|
$this->hash = 'sha1';
|
||||||
}
|
}
|
||||||
@ -281,7 +280,6 @@ class Crypt_Hash
|
|||||||
$this->hash = array($this, '_md2');
|
$this->hash = array($this, '_md2');
|
||||||
break;
|
break;
|
||||||
case 'md5':
|
case 'md5':
|
||||||
case 'md5-96':
|
|
||||||
$this->b = 64;
|
$this->b = 64;
|
||||||
$this->hash = array($this, '_md5');
|
$this->hash = array($this, '_md5');
|
||||||
break;
|
break;
|
||||||
@ -295,7 +293,6 @@ class Crypt_Hash
|
|||||||
$this->hash = array($this, '_sha512');
|
$this->hash = array($this, '_sha512');
|
||||||
break;
|
break;
|
||||||
case 'sha1':
|
case 'sha1':
|
||||||
case 'sha1-96':
|
|
||||||
default:
|
default:
|
||||||
$this->b = 64;
|
$this->b = 64;
|
||||||
$this->hash = array($this, '_sha1');
|
$this->hash = array($this, '_sha1');
|
||||||
|
79
tests/Unit/Crypt/Hash/SHA256Test.php
Normal file
79
tests/Unit/Crypt/Hash/SHA256Test.php
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @author Andreas Fischer <bantu@phpbb.com>
|
||||||
|
* @copyright MMXIV Andreas Fischer
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Unit_Crypt_Hash_SHA256Test extends Unit_Crypt_Hash_TestCase
|
||||||
|
{
|
||||||
|
public function getInstance()
|
||||||
|
{
|
||||||
|
return new Crypt_Hash('sha256');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider hashData()
|
||||||
|
*/
|
||||||
|
public function testHash($message, $result)
|
||||||
|
{
|
||||||
|
$this->assertHashesTo($this->getInstance(), $message, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function hashData()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array(
|
||||||
|
'',
|
||||||
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'The quick brown fox jumps over the lazy dog',
|
||||||
|
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'The quick brown fox jumps over the lazy dog.',
|
||||||
|
'ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider hmacData()
|
||||||
|
*/
|
||||||
|
public function testHMAC($key, $message, $result)
|
||||||
|
{
|
||||||
|
$this->assertHMACsTo($this->getInstance(), $key, $message, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function hmacData()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
// RFC 4231
|
||||||
|
// Test Case 1
|
||||||
|
array(
|
||||||
|
pack('H*', '0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b'),
|
||||||
|
pack('H*', '4869205468657265'),
|
||||||
|
'b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7',
|
||||||
|
),
|
||||||
|
// Test Case 2
|
||||||
|
array(
|
||||||
|
pack('H*', '4a656665'),
|
||||||
|
pack('H*', '7768617420646f2079612077616e7420666f72206e6f7468696e673f'),
|
||||||
|
'5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843',
|
||||||
|
),
|
||||||
|
// Test Case 3
|
||||||
|
array(
|
||||||
|
pack('H*', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),
|
||||||
|
pack('H*', 'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'),
|
||||||
|
'773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe',
|
||||||
|
),
|
||||||
|
// Test Case 4
|
||||||
|
array(
|
||||||
|
pack('H*', '0102030405060708090a0b0c0d0e0f10111213141516171819'),
|
||||||
|
pack('H*', 'cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd'),
|
||||||
|
'82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
32
tests/Unit/Crypt/Hash/SHA256_96Test.php
Normal file
32
tests/Unit/Crypt/Hash/SHA256_96Test.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @author Andreas Fischer <bantu@phpbb.com>
|
||||||
|
* @copyright MMXIV Andreas Fischer
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Unit_Crypt_Hash_SHA256_96Test extends Unit_Crypt_Hash_SHA256Test
|
||||||
|
{
|
||||||
|
public function getInstance()
|
||||||
|
{
|
||||||
|
return new Crypt_Hash('sha256-96');
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function hashData()
|
||||||
|
{
|
||||||
|
$tests = parent::hashData();
|
||||||
|
foreach ($tests as &$test) {
|
||||||
|
$test[1] = substr($test[1], 0, 24);
|
||||||
|
}
|
||||||
|
return $tests;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function hmacData()
|
||||||
|
{
|
||||||
|
$tests = parent::hmacData();
|
||||||
|
foreach ($tests as &$test) {
|
||||||
|
$test[2] = substr($test[2], 0, 24);
|
||||||
|
}
|
||||||
|
return $tests;
|
||||||
|
}
|
||||||
|
}
|
32
tests/Unit/Crypt/Hash/SHA512_96Test.php
Normal file
32
tests/Unit/Crypt/Hash/SHA512_96Test.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @author Andreas Fischer <bantu@phpbb.com>
|
||||||
|
* @copyright MMXIV Andreas Fischer
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Unit_Crypt_Hash_SHA512_96Test extends Unit_Crypt_Hash_SHA512Test
|
||||||
|
{
|
||||||
|
public function getInstance()
|
||||||
|
{
|
||||||
|
return new Crypt_Hash('sha512-96');
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function hashData()
|
||||||
|
{
|
||||||
|
$tests = parent::hashData();
|
||||||
|
foreach ($tests as &$test) {
|
||||||
|
$test[1] = substr($test[1], 0, 24);
|
||||||
|
}
|
||||||
|
return $tests;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function hmacData()
|
||||||
|
{
|
||||||
|
$tests = parent::hmacData();
|
||||||
|
foreach ($tests as &$test) {
|
||||||
|
$test[2] = substr($test[2], 0, 24);
|
||||||
|
}
|
||||||
|
return $tests;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user