From ef53561bf0058dca826dad19d12cda6a921a9d9a Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 21 Jun 2018 17:47:47 +0200 Subject: [PATCH] Improvements suggested in #598 --- .../org/cryptomator/ui/util/PasswordStrengthUtil.java | 7 ++++--- .../cryptomator/ui/util/PasswordStrengthUtilTest.java | 9 ++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/main/ui/src/main/java/org/cryptomator/ui/util/PasswordStrengthUtil.java b/main/ui/src/main/java/org/cryptomator/ui/util/PasswordStrengthUtil.java index 056ba8f97..3f9ccd063 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/util/PasswordStrengthUtil.java +++ b/main/ui/src/main/java/org/cryptomator/ui/util/PasswordStrengthUtil.java @@ -28,6 +28,8 @@ import javafx.scene.paint.Color; @Singleton public class PasswordStrengthUtil { + private static final int PW_TRUNC_LEN = 100; // truncate very long passwords, since zxcvbn memory and runtime depends vastly on the length + private final Zxcvbn zxcvbn; private final List sanitizedInputs; private final Localization localization; @@ -43,10 +45,9 @@ public class PasswordStrengthUtil { public int computeRate(String password) { if (Strings.isNullOrEmpty(password)) { return -1; - } else if (password.length() > 100) { - return 4; // assume this is strong. zxcvbn memory and runtime depends vastly on the password length } else { - return zxcvbn.measure(password, sanitizedInputs).getScore(); + int numCharsToRate = Math.min(PW_TRUNC_LEN, password.length()); + return zxcvbn.measure(password.substring(0, numCharsToRate), sanitizedInputs).getScore(); } } diff --git a/main/ui/src/test/java/org/cryptomator/ui/util/PasswordStrengthUtilTest.java b/main/ui/src/test/java/org/cryptomator/ui/util/PasswordStrengthUtilTest.java index 6981e1b23..2a9411077 100644 --- a/main/ui/src/test/java/org/cryptomator/ui/util/PasswordStrengthUtilTest.java +++ b/main/ui/src/test/java/org/cryptomator/ui/util/PasswordStrengthUtilTest.java @@ -7,15 +7,14 @@ import org.mockito.Mockito; public class PasswordStrengthUtilTest { - @Test - public void testLongPasswordsWillBeRatedAsStrong() { + @Test(timeout = 5000) + public void testLongPasswords() { PasswordStrengthUtil util = new PasswordStrengthUtil(Mockito.mock(Localization.class)); StringBuilder longPwBuilder = new StringBuilder(); - for (int i = 0; i < 101; i++) { + for (int i = 0; i < 10000; i++) { longPwBuilder.append('x'); } - int strength = util.computeRate(longPwBuilder.toString()); - Assert.assertEquals(4, strength); + util.computeRate(longPwBuilder.toString()); } }