]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/util/RandomUtils.java
19c3f18c0b2b1795db7371d7e817d469178c512b
[signal-cli] / src / main / java / org / asamk / signal / util / RandomUtils.java
1 package org.asamk.signal.util;
2
3 import java.security.NoSuchAlgorithmException;
4 import java.security.SecureRandom;
5
6 public class RandomUtils {
7
8 private static final ThreadLocal<SecureRandom> LOCAL_RANDOM = ThreadLocal.withInitial(() -> {
9 SecureRandom rand = getSecureRandomUnseeded();
10
11 // Let the SecureRandom seed it self initially
12 rand.nextBoolean();
13
14 return rand;
15 });
16
17 private static SecureRandom getSecureRandomUnseeded() {
18 try {
19 return SecureRandom.getInstance("NativePRNG");
20 } catch (NoSuchAlgorithmException e) {
21 // Fallback to SHA1PRNG if NativePRNG is not available (e.g. on windows)
22 try {
23 return SecureRandom.getInstance("SHA1PRNG");
24 } catch (NoSuchAlgorithmException e1) {
25 // Fallback to default
26 return new SecureRandom();
27 }
28 }
29 }
30
31 public static SecureRandom getSecureRandom() {
32 return LOCAL_RANDOM.get();
33 }
34 }