]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/util/RandomUtils.java
Change default data path to $XDG_DATA_HOME/signal-cli
[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 = new ThreadLocal<SecureRandom>() {
9 @Override
10 protected SecureRandom initialValue() {
11 SecureRandom rand = getSecureRandomUnseeded();
12
13 // Let the SecureRandom seed it self initially
14 rand.nextBoolean();
15
16 return rand;
17 }
18 };
19
20 private static SecureRandom getSecureRandomUnseeded() {
21 try {
22 return SecureRandom.getInstance("NativePRNG");
23 } catch (NoSuchAlgorithmException e) {
24 // Fallback to SHA1PRNG if NativePRNG is not available (e.g. on windows)
25 try {
26 return SecureRandom.getInstance("SHA1PRNG");
27 } catch (NoSuchAlgorithmException e1) {
28 // Fallback to default
29 return new SecureRandom();
30 }
31 }
32 }
33
34 public static SecureRandom getSecureRandom() {
35 return LOCAL_RANDOM.get();
36 }
37 }