From dc9ec3db8ff81913af09993ec6b463aa7b839257 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sun, 26 Aug 2012 21:46:00 +0000 Subject: [PATCH] Refactured random string generation to introduced method generateRamdomString() --- .../hub/main/nodes/class_BaseHubNode.php | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/application/hub/main/nodes/class_BaseHubNode.php b/application/hub/main/nodes/class_BaseHubNode.php index d1f251a7a..a89050de7 100644 --- a/application/hub/main/nodes/class_BaseHubNode.php +++ b/application/hub/main/nodes/class_BaseHubNode.php @@ -77,6 +77,12 @@ class BaseHubNode extends BaseHubSystem implements Updateable { // Call parent constructor parent::__construct($className); + // Get a crypto instance + $cryptoInstance = ObjectFactory::createObjectByConfiguredName('crypto_class'); + + // Set it here + $this->setCryptoInstance($cryptoInstance); + // Init state which sets the state to 'init' $this->initState(); } @@ -94,6 +100,28 @@ class BaseHubNode extends BaseHubSystem implements Updateable { NodeStateFactory::createNodeStateInstanceByName('init', $this); } + /** + * Generates a random string from various data inluding UUID if PECL + * extension uuid is installed. + * + * @param $length Length of the random part + * @return $randomString Random string + * @todo Make this code more generic and move it to CryptoHelper or + */ + protected function generateRamdomString ($length) { + // Get an RNG instance + $rngInstance = ObjectFactory::createObjectByConfiguredName('rng_class'); + + // Generate a pseudo-random string + $randomString = $rngInstance->randomString($length) . ':' . $this->getBootIpPort() . ':' . $this->getRequestInstance()->getRequestElement('mode'); + + // Add UUID for even more entropy for the hasher + $randomString .= $this->getCryptoInstance()->createUuid(); + + // Return it + return $randomString; + } + /** * Generates a private key and hashes it (for speeding up things) * @@ -101,18 +129,12 @@ class BaseHubNode extends BaseHubSystem implements Updateable { * @return void */ private function generatePrivateKeyAndHash (LocalSearchCriteria $searchInstance) { - // Get an RNG instance (Random Number Generator) - $rngInstance = ObjectFactory::createObjectByConfiguredName('rng_class'); - // Generate a pseudo-random string - $randomString = $rngInstance->randomString(255) . ':' . $this->getBootIpPort() . ':' . $this->getRequestInstance()->getRequestElement('mode'); - - // Get a crypto instance - $cryptoInstance = ObjectFactory::createObjectByConfiguredName('crypto_class'); + $randomString = $this->generateRandomString(255); // Hash and encrypt the string so we become a node id (also documented as "hub id") - $this->setPrivateKey($cryptoInstance->encryptString($randomString)); - $this->setPrivateKeyHash($cryptoInstance->hashString($this->getPrivateKey())); + $this->setPrivateKey($this->getCryptoInstance()->encryptString($randomString)); + $this->setPrivateKeyHash($this->getCryptoInstance()->hashString($this->getPrivateKey())); // Get a wrapper instance $wrapperInstance = ObjectFactory::createObjectByConfiguredName('node_info_db_wrapper_class'); @@ -277,17 +299,11 @@ class BaseHubNode extends BaseHubSystem implements Updateable { // Output message self::createDebugInstance(__CLASS__)->debugOutput('BOOTSTRAP: Re-using found node-id: ' . $this->getNodeId() . ''); } else { - // Get an RNG instance (Random Number Generator) - $rngInstance = ObjectFactory::createObjectByConfiguredName('rng_class'); - // Generate a pseudo-random string - $randomString = $rngInstance->randomString(255) . ':' . $this->getBootIpPort() . ':' . $this->getRequestInstance()->getRequestElement('mode'); - - // Get a crypto instance - $cryptoInstance = ObjectFactory::createObjectByConfiguredName('crypto_class'); + $randomString = $this->generateRandomString(255); // Hash and encrypt the string so we become a node id (also documented as "hub id") - $this->setNodeId($cryptoInstance->hashString($cryptoInstance->encryptString($randomString))); + $this->setNodeId($this->getCryptoInstance()->hashString($this->getCryptoInstance()->encryptString($randomString))); // Register the node id with our wrapper $wrapperInstance->registerNodeId($this, $this->getRequestInstance()); @@ -311,17 +327,11 @@ class BaseHubNode extends BaseHubSystem implements Updateable { $searchInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_TYPE, $this->getRequestInstance()->getRequestElement('mode')); $searchInstance->setLimit(1); - // Get an RNG instance - $rngInstance = ObjectFactory::createObjectByConfiguredName('rng_class'); - - // Generate a pseudo-random string - $randomString = $rngInstance->randomString(255) . ':' . $this->getBootIpPort() . ':' . $this->getRequestInstance()->getRequestElement('mode'); - - // Get a crypto instance - $cryptoInstance = ObjectFactory::createObjectByConfiguredName('crypto_class'); + // Get a random string + $randomString = $this->generateRamdomString(255); // Hash and encrypt the string so we become a "node id" aka Hub-Id - $this->setSessionId($cryptoInstance->hashString($cryptoInstance->encryptString($randomString))); + $this->setSessionId($this->getCryptoInstance()->hashString($this->getCryptoInstance()->encryptString($randomString))); // Get a wrapper instance $wrapperInstance = ObjectFactory::createObjectByConfiguredName('node_info_db_wrapper_class'); -- 2.39.5