aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/security
diff options
context:
space:
mode:
authorLukas Reschke <lukas@owncloud.com>2015-11-06 16:24:26 +0100
committerLukas Reschke <lukas@owncloud.com>2015-11-09 15:04:22 +0100
commit045ea4eb2b3bfb9eb6b7c27324aec66b4233d34c (patch)
tree4224ca10be284bea42ae813ec615d02c49de2689 /lib/private/security
parent37c5edc20211861297c50f59cbe26bdc5d3b1970 (diff)
downloadnextcloud-server-045ea4eb2b3bfb9eb6b7c27324aec66b4233d34c.tar.gz
nextcloud-server-045ea4eb2b3bfb9eb6b7c27324aec66b4233d34c.zip
Use native CSPRNG if available
Unfortunately only PHP 7…
Diffstat (limited to 'lib/private/security')
-rw-r--r--lib/private/security/securerandom.php19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/private/security/securerandom.php b/lib/private/security/securerandom.php
index 409285fd098..87dca68985e 100644
--- a/lib/private/security/securerandom.php
+++ b/lib/private/security/securerandom.php
@@ -28,7 +28,7 @@ use OCP\Security\ISecureRandom;
/**
* Class SecureRandom provides a layer around RandomLib to generate
- * secure random strings.
+ * secure random strings. For PHP 7 the native CSPRNG is used.
*
* Usage:
* \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(10);
@@ -77,16 +77,29 @@ class SecureRandom implements ISecureRandom {
/**
* Generate a random string of specified length.
* @param int $length The length of the generated string
- * @param string $characters An optional list of characters to use if no characterlist is
+ * @param string $characters An optional list of characters to use if no character list is
* specified all valid base64 characters are used.
* @return string
* @throws \Exception If the generator is not initialized.
*/
- public function generate($length, $characters = '') {
+ public function generate($length,
+ $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/') {
if(is_null($this->generator)) {
throw new \Exception('Generator is not initialized.');
}
+ if(function_exists('random_int')) {
+ $maxCharIndex = strlen($characters) - 1;
+ $randomString = '';
+
+ while($length > 0) {
+ $randomNumber = random_int(0, $maxCharIndex);
+ $randomString .= $characters[$randomNumber];
+ $length--;
+ }
+ return $randomString;
+ }
+
return $this->generator->generateString($length, $characters);
}
}