3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-11-20 06:50:09 +01:00

Don't use a blocking algorithm for generating keys on unix-like systems

This should fix GeyserMC/Floodgate#125
Dieser Commit ist enthalten in:
Tim203 2021-04-01 00:37:58 +02:00
Ursprung 677a8d68f6
Commit 5c12dc8e15
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 064EE9F5BF7C3EE8

Datei anzeigen

@ -29,7 +29,9 @@ package org.geysermc.floodgate.crypto;
import javax.crypto.KeyGenerator; import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.util.Locale;
public final class AesKeyProducer implements KeyProducer { public final class AesKeyProducer implements KeyProducer {
public static int KEY_SIZE = 128; public static int KEY_SIZE = 128;
@ -38,7 +40,7 @@ public final class AesKeyProducer implements KeyProducer {
public SecretKey produce() { public SecretKey produce() {
try { try {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(KEY_SIZE, SecureRandom.getInstanceStrong()); keyGenerator.init(KEY_SIZE, getSecureRandom());
return keyGenerator.generateKey(); return keyGenerator.generateKey();
} catch (Exception exception) { } catch (Exception exception) {
throw new RuntimeException(exception); throw new RuntimeException(exception);
@ -53,4 +55,14 @@ public final class AesKeyProducer implements KeyProducer {
throw new RuntimeException(exception); throw new RuntimeException(exception);
} }
} }
private SecureRandom getSecureRandom() throws NoSuchAlgorithmException {
// use Windows-PRNG for windows (default impl is SHA1PRNG)
// default impl for unix-like systems is NativePRNG.
if (System.getProperty("os.name").toLowerCase(Locale.ROOT).contains("win")) {
return SecureRandom.getInstance("Windows-PRNG");
} else {
return new SecureRandom();
}
}
} }