Пример #1
0
 /**
  * Generate a medium-strength random string of the given length.
  *
  * @param int $length length of the generated string
  * @param string $characters characters to use to generate the string
  * @return string
  */
 public function generateString($length, $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
 {
     if (is_null($this->_factory)) {
         $this->_factory = new \RandomLib\Factory();
         $this->_generator = $this->_factory->getMediumStrengthGenerator();
     }
     return $this->_generator->generateString($length, $characters);
 }
 public function getGenerator($strength)
 {
     switch ($strength) {
         case 'low':
             return $this->factory->getLowStrengthGenerator();
         case 'medium':
             return $this->factory->getMediumStrengthGenerator();
         case 'high':
             throw new \InvalidArgumentException('"high" strength is currently unavailable');
         default:
             throw new \InvalidArgumentException('Could not find a generator for the specified strength');
     }
 }
Пример #3
0
 /**
  * Create a medium strength key
  *
  * Generates a medium strength random number of size $bytes and hash with the
  * algorithm specified in $hash.
  *
  * @param string  $hash  hash function to use
  * @param integer $bytes the number of random bytes to generate
  *
  * @return string hashed token
  */
 public static function generateKey($hash = 'sha512', $bytes = 128)
 {
     $factory = new Factory();
     $generator = $factory->getMediumStrengthGenerator();
     $token = hash($hash, $generator->generate($bytes));
     return $token;
 }
Пример #4
0
 /**
  * @param Request $request
  *
  * @return \Symfony\Component\HttpFoundation\JsonResponse
  */
 public function saveTokenAction(Request $request)
 {
     $apiToken = new ApiToken();
     $apiToken->setUser($this->getUser());
     $formBuilder = $this->createFormBuilder($apiToken, array('action' => $this->generateUrl('api_key_create'), 'data_class' => 'CSBill\\UserBundle\\Entity\\ApiToken'));
     $formBuilder->add('name');
     $form = $formBuilder->getForm();
     $form->handleRequest($request);
     $response = array();
     if ($form->isValid()) {
         $factory = new Factory();
         $generator = $factory->getMediumStrengthGenerator();
         $token = $generator->generateString(64, Generator::CHAR_ALNUM);
         $apiToken->setToken($token);
         $this->save($apiToken);
         $response['status'] = 0;
         $response['token'] = array('token' => $apiToken->getToken(), 'name' => $apiToken->getName(), 'id' => $apiToken->getId());
         return $this->json($response);
     } else {
         $response['status'] = 1;
     }
     $content = $this->renderView('CSBillUserBundle:Api:create.html.twig', array('form' => $form->createView()));
     $response['content'] = $content;
     return $this->json($response);
 }
 function let(Factory $factory, Generator $low, Generator $medium)
 {
     $factory->getMediumStrengthGenerator()->willReturn($medium);
     $factory->getLowStrengthGenerator()->willReturn($low);
     $this->beConstructedWith($factory);
     $defaults = ['length' => 32, 'chars' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 'strength' => 'medium'];
     $this->setOptions($defaults);
 }
 public function testGetSetKeyGenerator()
 {
     $this->assertInstanceOf('QueryAuth\\KeyGenerator', $this->requestSigner->getKeyGenerator());
     $randomFactory = new RandomFactory();
     $keyGenerator = new KeyGenerator($randomFactory->getMediumStrengthGenerator());
     $this->requestSigner->setKeyGenerator($keyGenerator);
     $this->assertSame($keyGenerator, $this->requestSigner->getKeyGenerator());
 }
Пример #7
0
 public function __construct(Generator $generator = null)
 {
     $this->generator = $generator;
     if ($this->generator == null) {
         $factory = new Factory();
         $this->generator = $factory->getMediumStrengthGenerator();
     }
 }
Пример #8
0
 /**
  * Generates a random number in the provided range, where all possible values are equally likely. (Even distribution.)
  *
  * NOTE: If $max is more than PHP_INT_MAX or $min is less than PHP_INT_MIN, no additional entropy will be gained for
  * the random number, and the distribution will become less evenly distributed across all possible values due to
  * rounding.
  *
  * @param $min
  * @param $max
  * @return NumberInterface
  */
 public function random($min = 0, $max = PHP_INT_MAX)
 {
     $min = Numbers::makeOrDont(Numbers::IMMUTABLE, $min);
     $max = Numbers::makeOrDont(Numbers::IMMUTABLE, $max);
     $difference = new ImmutableNumber(BCProvider::add($max->absValue(), $min->absValue()));
     $randFactory = new Factory();
     if ($max->compare(PHP_INT_MAX) != 1 && $min->compare(PHP_INT_MIN) != -1 && $difference->compare(PHP_INT_MAX) != 1) {
         $x = $randFactory->getMediumStrengthGenerator()->generateInt($min, $max);
         return Numbers::makeFromBase10($this->numberType, $x, null, $this->contextBase);
     } else {
         $x = $randFactory->getMediumStrengthGenerator()->generateInt();
         $fraction = BCProvider::divide($x, PHP_INT_MAX);
         $addedValue = BCProvider::multiply($fraction, $difference->getValue());
         $randVal = Numbers::makeFromBase10($this->numberType, BCProvider::add($min->getValue(), $addedValue), null, $this->contextBase);
         return $randVal->round();
     }
 }
Пример #9
0
 function __construct()
 {
     parent::__construct();
     $factory = new RandomLib();
     $this->RandomLib = $factory->getMediumStrengthGenerator();
     $this->load->module('template');
     $this->load->module('categories');
 }
Пример #10
0
 public static function generateLink($event)
 {
     $model = $event->getModel();
     if (!$model->link) {
         $factory = new Factory();
         $generator = $factory->getMediumStrengthGenerator();
         $model->link = $generator->generateString(32, Generator::CHAR_ALNUM);
     }
 }
Пример #11
0
 public function getAlternativeGenerator()
 {
     if (isset($this->generator)) {
         return $this->generator;
     }
     $factory = new RandomLib\Factory();
     $this->generator = $factory->getMediumStrengthGenerator();
     return $this->generator;
 }
Пример #12
0
 public function getAlternativeGenerator()
 {
     if (isset($this->generator)) {
         return $this->generator;
     }
     $factory = new RandomLib\Factory();
     $factory->registerSource('HashTiming', '\\SecurityMultiTool\\Random\\Source\\HashTiming');
     $this->generator = $factory->getMediumStrengthGenerator();
     return $this->generator;
 }
Пример #13
0
 /**
  * @covers RandomLib\Factory::getMediumStrengthGenerator
  * @covers RandomLib\Factory::getGenerator
  * @covers RandomLib\Factory::findMixer
  * @covers RandomLib\Factory::findSources
  */
 public function testGetMediumStrengthGenerator()
 {
     $factory = new Factory();
     $generator = $factory->getMediumStrengthGenerator();
     $this->assertTrue($generator instanceof Generator);
     $mixer = call_user_func(array(get_class($generator->getMixer()), 'getStrength'));
     $this->assertTrue($mixer->compare(new Strength(Strength::MEDIUM)) <= 0);
     foreach ($generator->getSources() as $source) {
         $strength = call_user_func(array(get_class($source), 'getStrength'));
         $this->assertTrue($strength->compare(new Strength(Strength::MEDIUM)) >= 0);
     }
 }
Пример #14
0
 /**
  * Retrieve a fallback/alternative RNG generator
  *
  * @return RandomLib\Generator
  */
 public static function getAlternativeGenerator()
 {
     if (null !== static::$generator) {
         return static::$generator;
     }
     if (!class_exists('RandomLib\\Factory')) {
         throw new Exception\RuntimeException('The RandomLib fallback pseudorandom number generator (PRNG) ' . ' must be installed in the absence of the OpenSSL and ' . 'Mcrypt extensions');
     }
     $factory = new RandomLib\Factory();
     $factory->registerSource('HashTiming', 'Zend\\Math\\Source\\HashTiming');
     static::$generator = $factory->getMediumStrengthGenerator();
     return static::$generator;
 }
Пример #15
0
 public function login(Request $request, Response $response, array $arguments)
 {
     $body = $request->getParsedBody();
     $user = User::where('email', $body['email'])->first();
     if (!$user) {
         return $response->withJson(['message' => 'no_such_email'], 400);
     }
     if (!password_verify($body['password'], $user->password)) {
         return $response->withJson(['message' => 'incorrect_password'], 400);
     }
     $factory = new Factory();
     $generator = $factory->getMediumStrengthGenerator();
     $tokenValue = $generator->generateString(128, Generator::CHAR_ALNUM);
     $token = new UserToken();
     $token->value = $tokenValue;
     $user->user_tokens()->save($token);
     $output = ['user' => $user, 'token' => $token->value];
     return $response->withJson($output, 200);
 }
Пример #16
0
 /**
  * Convenience method to get a medium strength random number generator.
  *
  * Medium Strength should be used for most needs of a cryptographic nature.
  * They are strong enough to be used as keys and salts. However, they do
  * take some time and resources to generate, so they should not be over-used
  *
  * @return $this
  */
 public function getMediumStrengthGenerator()
 {
     $this->generator = $this->factory->getMediumStrengthGenerator();
     return $this;
 }
Пример #17
0
$app->add(new CsrfMiddleware());
$app->configureMode($app->config('mode'), function () use($app) {
    $app->config = Config::load(INC_ROOT . "/app/config/{$app->mode}.php");
});
require INC_ROOT . '/app/database.php';
require INC_ROOT . '/app/filters.php';
require INC_ROOT . '/app/routes/routes.php';
$app->auth = false;
$app->container->set('user', function () {
    return new User();
});
$app->container->set('bbcode', function () use($app) {
    return new Parser();
});
$app->container->singleton('hash', function () use($app) {
    return new Hash($app->config);
});
$app->container->singleton('validation', function () use($app) {
    return new Validator($app->user, $app->hash, $app->auth);
});
$app->container->singleton('mail', function () use($app) {
    $mailer = new Mailgun($app->config->get('mail.secret'));
    return new Mailer($app->view, $app->config, $mailer);
});
$app->container->singleton('randomlib', function () {
    $factory = new RandomLib();
    return $factory->getMediumStrengthGenerator();
});
$view = $app->view();
$view->parserOptions = ['debug' => $app->config->get('twig.debug')];
$view->parserExtensions = [new TwigExtension(), new Twig_Extension_Debug(), new \Twig_Extensions_Extension_Date()];
 protected function createGenerator()
 {
     $ircmaxellFactory = new Factory();
     $ircmaxellGenerator = $ircmaxellFactory->getMediumStrengthGenerator();
     return new \Akamon\OAuth2\Server\Infrastructure\IrcmaxellRandom\IrcmaxellRandomGenerator($ircmaxellGenerator);
 }
Пример #19
0
 /**
  * @param InputInterface $input
  *
  * @return $this
  */
 private function saveConfig(InputInterface $input)
 {
     $factory = new Factory();
     // Don't update installed here, in case something goes wrong with the rest of the installation process
     $config = array('database_driver' => $input->getOption('database-driver'), 'database_host' => $input->getOption('database-host'), 'database_port' => $input->getOption('database-port'), 'database_name' => $input->getOption('database-name'), 'database_user' => $input->getOption('database-user'), 'database_password' => $input->getOption('database-password'), 'mailer_transport' => $input->getOption('mailer-transport'), 'mailer_host' => $input->getOption('mailer-host'), 'mailer_user' => $input->getOption('mailer-user'), 'mailer_password' => $input->getOption('mailer-password'), 'mailer_port' => $input->getOption('mailer-port'), 'mailer_encryption' => $input->getOption('mailer-encryption'), 'locale' => $input->getOption('locale'), 'currency' => $input->getOption('currency'), 'secret' => $factory->getMediumStrengthGenerator()->generateString(32));
     $this->getContainer()->get('csbill.core.config_writer')->dump($config);
     return $this;
 }
Пример #20
0
 /**
  * @param array $data
  *
  * @throws \RuntimeException
  */
 protected function saveConfig(array $data)
 {
     $factory = new Factory();
     $time = new \DateTime('NOW');
     $config = array('locale' => $data['locale'], 'currency' => $data['currency'], 'base_url' => $data['base_url'], 'installed' => $time->format(\DateTime::ISO8601), 'secret' => $factory->getMediumStrengthGenerator()->generateString(32));
     $this->get('csbill.core.config_writer')->dump($config);
 }
 public function __construct(Factory $factory)
 {
     $this->generator = $factory->getMediumStrengthGenerator();
 }
Пример #22
0
 /**
  * Generates the user password
  *
  * @return string
  */
 public static function generateUserPassword()
 {
     $factory = new Factory();
     $generator = $factory->getMediumStrengthGenerator();
     return $generator->generateString(20, Generator::CHAR_ALNUM);
 }
Пример #23
0
 /**
  * Generate a random 32character key
  *
  **/
 public static function makeKey()
 {
     $factory = new Factory();
     $generator = $factory->getMediumStrengthGenerator();
     return $generator->generateString(32);
 }
Пример #24
0
 public function getDice()
 {
     $factory = new Factory();
     $generator = $factory->getMediumStrengthGenerator();
     return new RandomLibDice($generator);
 }
Пример #25
0
 /**
  * Generates the app secret
  *
  * @return string
  */
 public static function generateAppSecret()
 {
     $factory = new Factory();
     $generator = $factory->getMediumStrengthGenerator();
     return $generator->generateString(64);
 }
 /**
  * Generates a random token.
  *
  * @param int $len
  *
  * @return string
  */
 private function generateToken($len = 32)
 {
     if (!$this->random) {
         $factory = new Factory();
         $this->random = $factory->getMediumStrengthGenerator();
     }
     return $this->random->generateString($len, Generator::CHAR_ALNUM);
 }