* @version 0.0.0 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.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 * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ class TestUnitKeyProducerIterator extends BaseIterator implements Iterator { /** * Maximum different bit combinations */ private $maxBits = 0; /** * Key length */ private $keyLength = 0; /** * Current iteration */ private $currentIteration = 0; /** * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); // Get key length $this->keyLength = $this->getConfigInstance()->getConfigEntry('test_unit_random_secret_key_length'); // Make sure the key length isn't getting to big (32 byte = 256 bit is really, really a lot!) assert($this->keyLength <= (8 * 32)); // Set max bits entry $this->maxBits = pow(2, $this->keyLength); // Debug message $this->debugOutput('ITERATOR: maxBits=' . $this->maxBits . ',keyLength=' . $this->keyLength . ' bits'); } /** * Creates an instance of this class * * @return $iteratorInstance An instance of a Iterator class */ public final static function createTestUnitKeyProducerIterator () { // Get new instance $iteratorInstance = new TestUnitKeyProducerIterator(); // Return the prepared instance return $iteratorInstance; } /** * Getter for current value * * @return $current Current value in iteration */ public function current () { // Calculate ASCII string representation of the key number $current = $this->dec2asc($this->currentIteration); // Prepend more zeros $current = $this->prependStringToString($current, chr(0), ($this->keyLength / 8)); // Return it return $current; } /** * Getter for key from group or generic * * @return $key Current key in iteration * @throws UnsupportedOperationException This method should not be called */ public function key () { throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); } /** * Advances to the next entry * * @return void */ public function next () { /* * This is of course a very ineffective key generation iterator because * it will create a lot of keys that will never decode an encrypted * message. If you know a better algorithm which is freely available and * can be implemented as an itertator please contact me. */ $this->currentIteration++; } /** * Rewinds to the beginning of the iteration * * @return void * @throws UnsupportedOperationException This method should not be called */ public function rewind () { throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); } /** * Checks whether the current entry is valid (not at the end of the list) * * @return void */ public function valid () { return ($this->currentIteration <= $this->maxBits); } } // [EOF] ?>