X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Frng%2Fclass_RandomNumberGenerator.php;h=ec44b9025698e713e04fa770d6afec41fecce647;hb=95fc70ab8370c843a574ef70af1a5486997ec89a;hp=3469b615bdef03d424e4dd061b6537c3fbad8c2e;hpb=0cd57c3885f00ad77fc599e53ed2f2d5e7ac267f;p=core.git diff --git a/inc/classes/main/rng/class_RandomNumberGenerator.php b/inc/classes/main/rng/class_RandomNumberGenerator.php index 3469b615..ec44b902 100644 --- a/inc/classes/main/rng/class_RandomNumberGenerator.php +++ b/inc/classes/main/rng/class_RandomNumberGenerator.php @@ -2,11 +2,11 @@ /** * A standard random number generator * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org + * @link http://www.shipsimu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,6 +47,11 @@ class RandomNumberGenerator extends BaseFrameworkSystem { */ private $rndStrLen = 0; + /** + * Self instance + */ + private static $selfInstance = NULL; + /** * Protected constructor * @@ -56,10 +61,6 @@ class RandomNumberGenerator extends BaseFrameworkSystem { protected function __construct ($className = __CLASS__) { // Call parent constructor parent::__construct($className); - - // Clean up a little - $this->removeNumberFormaters(); - $this->removeSystemArray(); } /** @@ -68,12 +69,21 @@ class RandomNumberGenerator extends BaseFrameworkSystem { * @param $extraInstance An extra instance for more salt (default: null) * @return $rngInstance An instance of this random number generator */ - public final static function createRandomNumberGenerator (FrameworkInterface $extraInstance = null) { - // Get a new instance - $rngInstance = new RandomNumberGenerator(); + public static final function createRandomNumberGenerator (FrameworkInterface $extraInstance = NULL) { + // Is self instance set? + if (is_null(self::$selfInstance)) { + // Get a new instance + $rngInstance = new RandomNumberGenerator(); - // Initialize the RNG now - $rngInstance->initRng($extraInstance); + // Initialize the RNG now + $rngInstance->initRng($extraInstance); + + // Set it "self" + self::$selfInstance = $rngInstance; + } else { + // Use from self instance + $rngInstance = self::$selfInstance; + } // Return the instance return $rngInstance; @@ -88,38 +98,47 @@ class RandomNumberGenerator extends BaseFrameworkSystem { */ protected function initRng ($extraInstance) { // Get the prime number from config - $this->prime = $this->getConfigInstance()->readConfig('math_prime'); + $this->prime = $this->getConfigInstance()->getConfigEntry('math_prime'); // Calculate the extra number which is always the same unless you give // a better prime number - $this->extraNumber = ($this->prime * $this->prime / (pi() ^ 2)); + $this->extraNumber = ($this->prime * $this->prime / pow(pi(), 2)); // Seed mt_rand() - mt_srand((double) sqrt(microtime() * 100000000 * $this->extraNumber)); + mt_srand((double) sqrt(microtime(TRUE) * 100000000 * $this->extraNumber)); // Set the server IP to cluster - $serverIp = "cluster"; + $serverIp = 'cluster'; // Do we have a single server? - if ($this->getConfigInstance()->readConfig('is_single_server') == 'Y') { + if ($this->getConfigInstance()->getConfigEntry('is_single_server') == 'Y') { // Then use that IP for extra security - $serverIp = getenv('SERVER_ADDR'); + $serverIp = $this->getConfigInstance()->detectServerAddress(); } // END - if // Yet-another fixed salt. This is not dependend on server software or date if ($extraInstance instanceof FrameworkInterface) { // With extra instance information - $this->fixedSalt = sha1($serverIp . ':' . $extraInstance->__toString() . ':' . serialize($this->getDatabaseInstance()->getConnectionData())); + $this->fixedSalt = sha1( + $serverIp . ':' . + $extraInstance->__toString() . ':' . + serialize($this->getDatabaseInstance()->getConnectionData()) + ); } else { // Without extra information $this->fixedSalt = sha1($serverIp . ':' . serialize($this->getDatabaseInstance()->getConnectionData())); } // One-way data we need for "extra-salting" the random number - $this->extraSalt = sha1($this->fixedSalt . ':' . getenv('SERVER_SOFTWARE') . ':' . $this->getConfigInstance()->readConfig('date_key') . $this->getConfigInstance()->readConfig('base_url')); + $this->extraSalt = sha1( + $this->fixedSalt . ':' . + getenv('SERVER_SOFTWARE') . ':' . + $this->getConfigInstance()->getConfigEntry('date_key') . ':' . + $this->getConfigInstance()->getConfigEntry('base_url') + ); // Get config entry for max salt length - $this->rndStrLen = $this->getConfigInstance()->readConfig('rnd_str_length'); + $this->rndStrLen = $this->getConfigInstance()->getConfigEntry('rnd_str_length'); } /** @@ -130,7 +149,9 @@ class RandomNumberGenerator extends BaseFrameworkSystem { */ public function randomString ($length = -1) { // Is the number <1, then fix it to default length - if ($length < 1) $length = $this->rndStrLen; + if ($length < 1) { + $length = $this->rndStrLen; + } // END - if // Initialize the string $randomString = ''; @@ -139,7 +160,7 @@ class RandomNumberGenerator extends BaseFrameworkSystem { for ($idx = 0; $idx < $length; $idx++) { // Add a random character and add it to our string $randomString .= chr($this->randomNumber(0, 255)); - } + } // END - for // Return the random string a little mixed up return str_shuffle($randomString); @@ -174,6 +195,24 @@ class RandomNumberGenerator extends BaseFrameworkSystem { public final function getFixedSalt () { return $this->fixedSalt; } + + /** + * Generates a key based on if we have extra (default) or fixed salt enabled + * + * @return $key The generated key for encryption + */ + public function generateKey () { + // Default is extra salt + $key = md5($this->getExtraSalt()); + + // Get key + if ($this->getConfigInstance()->getConfigEntry('crypt_fixed_salt') == 'Y') { + $key = md5($this->getFixedSalt()); + } // END - if + + // Return it + return $key; + } } // [EOF]