ICanBoogie/ICanBoogie v2.3.1
  • Namespace
  • Class

Namespaces

  • ICanBoogie
    • Autoconfig
    • Core
    • HTTP
      • Dispatcher
    • Session

Classes

  • Core
  • Debug
  • Helpers
  • Logger
  • LogLevel
  • Session

Interfaces

  • LoggerInterface

Traits

  • LoggerTrait

Exceptions

  • AlreadyAuthenticated
  • AuthenticationRequired
  • CoreAlreadyBooted
  • CoreAlreadyInstantiated
  • CoreNotInstantiated
  • PermissionRequired
  • SecurityException

Constants

  • TOKEN_ALPHA
  • TOKEN_ALPHA_UPCASE
  • TOKEN_NUMERIC
  • TOKEN_SYMBOL
  • TOKEN_SYMBOL_WIDE

Functions

  • app
  • boot
  • excerpt
  • generate_token
  • generate_token_wide
  • get_autoconfig
  • log
  • log_error
  • log_info
  • log_success
  • log_time
  • normalize_namespace_part
  • pbkdf2
  • resolve_app_paths
  • strip_root
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
<?php

/*
 * This file is part of the ICanBoogie package.
 *
 * (c) Olivier Laviale <olivier.laviale@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace ICanBoogie;

/**
 * Patchable helpers of the ICanBoogie package.
 */
class Helpers
{
    static private $jumptable = [

        'generate_token' => [ __CLASS__, 'generate_token' ],
        'pbkdf2' => [ __CLASS__, 'pbkdf2' ]

    ];

    /**
     * Calls the callback of a patchable function.
     *
     * @param string $name Name of the function.
     * @param array $arguments Arguments.
     *
     * @return mixed
     */
    static public function __callstatic($name, array $arguments)
    {
        return call_user_func_array(self::$jumptable[$name], $arguments);
    }

    /**
     * Patches a patchable function.
     *
     * @param string $name Name of the function.
     * @param callable $callback Callback.
     *
     * @throws \RuntimeException is attempt to patch an undefined function.
     */
    // @codeCoverageIgnoreStart
    static public function patch($name, $callback)
    {
        if (empty(self::$jumptable[$name]))
        {
            throw new \RuntimeException("Undefined patchable: $name.");
        }

        self::$jumptable[$name] = $callback;
    }
    // @codeCoverageIgnoreEnd

    /*
     * Default implementations
     */

    static private function generate_token($length=8, $possible=TOKEN_NARROW)
    {
        $token = '';
        $y = strlen($possible) - 1;

        while ($length--)
        {
            $i = mt_rand(0, $y);
            $token .= $possible[$i];
        }

        return $token;
    }

    static private function pbkdf2($p, $s, $c=1000, $kl=32, $a='sha256')
    {
        $hl = strlen(hash($a, null, true)); # Hash length
        $kb = ceil($kl / $hl); # Key blocks to compute
        $dk = ''; # Derived key

        # Create key
        for ($block = 1 ; $block <= $kb ; $block++)
        {
            # Initial hash for this block
            $ib = $b = hash_hmac($a, $s . pack('N', $block), $p, true);
            # Perform block iterations
            for ( $i = 1; $i < $c; $i ++ )
            # XOR each iterate
            $ib ^= ($b = hash_hmac($a, $b, $p, true));
            $dk .= $ib; # Append iterated block
        }

        # Return derived key of correct length
        return substr($dk, 0, $kl);
    }
}
ICanBoogie/ICanBoogie v2.3.1 API documentation generated by ApiGen