X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/cf972e5b6c6ae51aeb8a3d4cad95d9da75b42968..5f2190713afdcc57469384f11bfb0926f1a64b7f:/src/main/java/org/asamk/signal/util/RandomUtils.java diff --git a/src/main/java/org/asamk/signal/util/RandomUtils.java b/src/main/java/org/asamk/signal/util/RandomUtils.java new file mode 100644 index 00000000..d0463b47 --- /dev/null +++ b/src/main/java/org/asamk/signal/util/RandomUtils.java @@ -0,0 +1,37 @@ +package org.asamk.signal.util; + +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; + +public class RandomUtils { + + private static final ThreadLocal LOCAL_RANDOM = new ThreadLocal() { + @Override + protected SecureRandom initialValue() { + SecureRandom rand = getSecureRandomUnseeded(); + + // Let the SecureRandom seed it self initially + rand.nextBoolean(); + + return rand; + } + }; + + private static SecureRandom getSecureRandomUnseeded() { + try { + return SecureRandom.getInstance("NativePRNG"); + } catch (NoSuchAlgorithmException e) { + // Fallback to SHA1PRNG if NativePRNG is not available (e.g. on windows) + try { + return SecureRandom.getInstance("SHA1PRNG"); + } catch (NoSuchAlgorithmException e1) { + // Fallback to default + return new SecureRandom(); + } + } + } + + public static SecureRandom getSecureRandom() { + return LOCAL_RANDOM.get(); + } +}