123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- <?php
- /**
- * A hash utility data mapper class
- *
- * This class's purpose is to store information about hash algorithms that is
- * otherwise unavailable during runtime. Some information is available (such
- * as the output size), but is included anyway for performance and completeness
- * reasons.
- *
- * PHP version 5.3
- *
- * @category PHPPasswordLib
- * @package Hash
- * @author Anthony Ferrara <ircmaxell@ircmaxell.com>
- * @copyright 2011 The Authors
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @version Build @@version@@
- */
- namespace SecurityLib;
- /**
- * A hash utility data mapper class
- *
- * This class's purpose is to store information about hash algorithms that is
- * otherwise unavailable during runtime. Some information is available (such
- * as the output size), but is included anyway for performance and completeness
- * reasons.
- *
- * PHP version 5.3
- *
- * @category PHPPasswordLib
- * @package Hash
- * @author Anthony Ferrara <ircmaxell@ircmaxell.com>
- */
- class Hash {
- /**
- * This array contains information about each hash function available to PHP
- * at the present time. Block sizes are not available from functions, so they
- * must be hard coded.
- *
- * The "secure" indicates the strength of the hash and whether or not any known
- * cryptographic attacks exist for the hash function. This will only apply when
- * using the hash functions for situations that require cryptographic strength
- * such as message signing. For other uses the insecure ones can have valid
- * uses.
- *
- * @var array An array of information about each supported hash function
- */
- protected static $hashInfo = array(
- 'md2' => array(
- 'HashSize' => 128,
- 'BlockSize' => 128,
- 'secure' => false,
- ),
- 'md4' => array(
- 'HashSize' => 128,
- 'BlockSize' => 512,
- 'secure' => false,
- ),
- 'md5' => array(
- 'HashSize' => 128,
- 'BlockSize' => 512,
- 'secure' => false,
- ),
- 'sha1' => array(
- 'HashSize' => 160,
- 'BlockSize' => 512,
- 'secure' => false,
- ),
- 'sha224' => array(
- 'HashSize' => 224,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'sha256' => array(
- 'HashSize' => 256,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'sha384' => array(
- 'HashSize' => 384,
- 'BlockSize' => 1024,
- 'secure' => true,
- ),
- 'sha512' => array(
- 'HashSize' => 512,
- 'BlockSize' => 1024,
- 'secure' => true,
- ),
- 'ripemd128' => array(
- 'HashSize' => 128,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'ripemd160' => array(
- 'HashSize' => 160,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'ripemd256' => array(
- 'HashSize' => 256,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'ripemd320' => array(
- 'HashSize' => 320,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'whirlpool' => array(
- 'HashSize' => 512,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'tiger128,3' => array(
- 'HashSize' => 128,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'tiger160,3' => array(
- 'HashSize' => 160,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'tiger192,3' => array(
- 'HashSize' => 192,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'tiger128,4' => array(
- 'HashSize' => 128,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'tiger160,4' => array(
- 'HashSize' => 160,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'tiger192,4' => array(
- 'HashSize' => 192,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'snefru' => array(
- 'HashSize' => 256,
- 'BlockSize' => 512,
- 'secure' => false,
- ),
- 'snefru256' => array(
- 'HashSize' => 256,
- 'BlockSize' => 512,
- 'secure' => false,
- ),
- 'gost' => array(
- 'HashSize' => 256,
- 'BlockSize' => 256,
- 'secure' => false,
- ),
- 'adler32' => array(
- 'HashSize' => 32,
- 'BlockSize' => 16,
- 'secure' => false,
- ),
- 'crc32' => array(
- 'HashSize' => 32,
- 'BlockSize' => 32,
- 'secure' => false,
- ),
- 'crc32b' => array(
- 'HashSize' => 32,
- 'BlockSize' => 32,
- 'secure' => false,
- ),
- 'salsa10' => array(
- 'HashSize' => 512,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'salsa20' => array(
- 'HashSize' => 512,
- 'BlockSize' => 512,
- 'secure' => true,
- ),
- 'haval128,3' => array(
- 'HashSize' => 128,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval160,3' => array(
- 'HashSize' => 160,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval192,3' => array(
- 'HashSize' => 192,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval224,3' => array(
- 'HashSize' => 224,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval256,3' => array(
- 'HashSize' => 256,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval128,4' => array(
- 'HashSize' => 128,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval160,4' => array(
- 'HashSize' => 160,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval192,4' => array(
- 'HashSize' => 192,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval224,4' => array(
- 'HashSize' => 224,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval256,4' => array(
- 'HashSize' => 256,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval128,5' => array(
- 'HashSize' => 128,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval160,5' => array(
- 'HashSize' => 160,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval192,5' => array(
- 'HashSize' => 192,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval224,5' => array(
- 'HashSize' => 224,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'haval256,5' => array(
- 'HashSize' => 256,
- 'BlockSize' => 1024,
- 'secure' => false,
- ),
- 'joaat' => array(
- 'HashSize' => 32,
- 'BlockSize' => 64,
- 'secure' => false,
- ),
- 'fnv132' => array(
- 'HashSize' => 32,
- 'BlockSize' => 32,
- 'secure' => false,
- ),
- 'fnv164' => array(
- 'HashSize' => 64,
- 'BlockSize' => 64,
- 'secure' => false,
- ),
- );
- /**
- * Get the block size of the specified function in bytes
- *
- * @param string $hash The hash function to look up
- *
- * @return int The number of bytes in the block function
- */
- public static function getBlockSize($hash) {
- return static::getBlockSizeInBits($hash) / 8;
- }
- /**
- * Get the block size of the specified function in bits
- *
- * @param string $hash The hash function to look up
- *
- * @return int The number of bits in the block function
- */
- public static function getBlockSizeInBits($hash) {
- if (isset(static::$hashInfo[$hash]['BlockSize'])) {
- return static::$hashInfo[$hash]['BlockSize'];
- }
- return 0;
- }
- /**
- * Get the output size of the specified function in bytes
- *
- * @param string $hash The hash function to look up
- *
- * @return int The number of bytes outputted by the hash function
- */
- public static function getHashSize($hash) {
- return static::getHashSizeInBits($hash) / 8;
- }
- /**
- * Get the output size of the specified function in bits
- *
- * @param string $hash The hash function to look up
- *
- * @return int The number of bits outputted by the hash function
- */
- public static function getHashSizeInBits($hash) {
- if (isset(static::$hashInfo[$hash]['HashSize'])) {
- return static::$hashInfo[$hash]['HashSize'];
- }
- return 0;
- }
- /**
- * Check to see if the hash function specified is available
- *
- * @param string $hash The hash function to look up
- *
- * @return boolean If the hash function is available in this version of PHP
- */
- public static function isAvailable($hash) {
- return in_array($hash, hash_algos());
- }
- /**
- * Check to see if the specified hash function is secure enough for
- * cryptographic uses
- *
- * The "secure" indicates the strength of the hash and whether or not any known
- * cryptographic attacks exist for the hash function. This will only apply when
- * using the hash functions for situations that require cryptographic strength
- * such as message signing. For other uses the insecure ones can have valid
- * uses.
- *
- * @param string $hash The hash function to look up
- *
- * @return bolean If the function is secure
- */
- public static function isSecure($hash) {
- if (isset(static::$hashInfo[$hash])) {
- return static::$hashInfo[$hash]['secure'];
- }
- return false;
- }
- }
|