]> git.mxchange.org Git - hub.git/commitdiff
Refactured random string generation to introduced method generateRamdomString()
authorRoland Häder <roland@mxchange.org>
Sun, 26 Aug 2012 21:46:00 +0000 (21:46 +0000)
committerRoland Häder <roland@mxchange.org>
Sun, 26 Aug 2012 21:46:00 +0000 (21:46 +0000)
application/hub/main/nodes/class_BaseHubNode.php

index d1f251a7a5fbe07779daa3ec5a195a68cc966c14..a89050de735ec35fe480d352c4a1ea7de857515c 100644 (file)
@@ -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');