Secure random integer generator inputs
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 18 Sep 2021 07:50:53 +0000 (09:50 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 18 Sep 2021 07:50:53 +0000 (09:50 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/utils/Utils.ts

index 8a89b578c0e76acaa2e0343e7bc6a68d5c04d4ff..a83fd4d5b5abacadfdb0781728ceb79f1d1e4112 100644 (file)
@@ -98,12 +98,16 @@ export default class Utils {
     return result;
   }
 
-  public static getRandomFloat(max: number, min = 0): number {
-    return (crypto.randomBytes(4).readUInt32LE() / 0xffffffff) * (max - min) + min;
+  public static getRandomFloat(max: number, min = 0, negative = false): number {
+    const randomPositiveFloat = crypto.randomBytes(4).readUInt32LE() / 0xffffffff;
+    const sign = (negative && randomPositiveFloat < 0.5) ? 1 : -1;
+    return sign * (randomPositiveFloat * (max - min) + min);
   }
 
   public static getRandomInt(max: number, min = 0): number {
+    max = Math.floor(max);
     if (min) {
+      min = Math.ceil(min);
       return Math.floor(Utils.secureRandom() * (max - min + 1)) + min;
     }
     return Math.floor(Utils.secureRandom() * (max + 1));