diff --git a/src/main/java/helpers/ScryptHelper.java b/src/main/java/helpers/ScryptHelper.java index 636b970..8fa01d6 100644 --- a/src/main/java/helpers/ScryptHelper.java +++ b/src/main/java/helpers/ScryptHelper.java @@ -6,7 +6,6 @@ import java.nio.charset.CharsetEncoder; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Arrays; import org.bouncycastle.crypto.generators.SCrypt; @@ -32,6 +31,8 @@ private static final Charset utf8 = StandardCharsets.UTF_8; + private static final SecureRandom rng = new SecureRandom(); + private ScryptHelper() { } @@ -98,14 +99,11 @@ throw new IllegalArgumentException("Invalid format: missing delimiters"); } - // Parse costParams int costParams = parseAsInt(mcfHash.subSequence(indices[0] + 1, indices[1])); - // Use toBytes to get a clean byte array of the B64 encoded segments byte[] saltB64 = toBytes(mcfHash.subSequence(indices[1] + 1, indices[2])); byte[] hashB64 = toBytes(mcfHash.subSequence(indices[2] + 1, indices[3])); - // Bouncy Castle decode to pre-allocated arrays byte[] salt = Base64.decode(saltB64); byte[] hash = Base64.decode(hashB64); @@ -122,7 +120,6 @@ return matches; } finally { - // Thorough cleanup Arrays.fill(saltB64, (byte) 0); Arrays.fill(hashB64, (byte) 0); Arrays.fill(salt, (byte) 0); @@ -156,7 +153,7 @@ private static byte[] salt() { byte[] salt = new byte[saltSize]; - new SecureRandom().nextBytes(salt); + rng.nextBytes(salt); return salt; }