]> WPIA git - gigi.git/commitdiff
upd: decrease scrypt workload when testing.
authorFelix Dörre <felix@dogcraft.de>
Sun, 31 Jul 2016 00:30:41 +0000 (02:30 +0200)
committerFelix Dörre <felix@dogcraft.de>
Sun, 31 Jul 2016 09:01:42 +0000 (11:01 +0200)
Change-Id: I91bdbf9225e80f3a0380ec2a4bbfa592a141f26b

src/org/cacert/gigi/Gigi.java
src/org/cacert/gigi/util/PasswordHash.java
tests/org/cacert/gigi/testUtils/ConfiguredTest.java

index 6db616947256f79b994979c7e0f697bb080cae18..812f61fb1ac5e6db25ab36ab462718913b0beaa0 100644 (file)
@@ -73,6 +73,7 @@ import org.cacert.gigi.pages.wot.RequestTTPPage;
 import org.cacert.gigi.ping.PingerDaemon;
 import org.cacert.gigi.util.AuthorizationContext;
 import org.cacert.gigi.util.DomainAssessment;
+import org.cacert.gigi.util.PasswordHash;
 import org.cacert.gigi.util.ServerConstants;
 import org.cacert.gigi.util.TimeConditions;
 
@@ -252,6 +253,7 @@ public final class Gigi extends HttpServlet {
             DomainAssessment.init(conf);
             DatabaseConnection.init(conf);
             TimeConditions.init(conf);
+            PasswordHash.init(conf);
             this.truststore = truststore;
             pinger = new PingerDaemon(truststore);
             pinger.start();
index 6d598e77575f706fb8d6804eb9dcab748394b408..97e3493aa63a76333fe1fa6098fab4a6e92e6254 100644 (file)
@@ -3,6 +3,7 @@ package org.cacert.gigi.util;
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.util.Properties;
 
 import com.lambdaworks.crypto.SCryptUtil;
 
@@ -68,6 +69,49 @@ public class PasswordHash {
     }
 
     public static String hash(String password) {
-        return SCryptUtil.scrypt(password, 1 << 14, 8, 1);
+        return SCryptUtil.scrypt(password, N, r, p);
+    }
+
+    private static int N = 1 << 14;
+
+    private static int r = 8;
+
+    private static int p = 1;
+
+    private static boolean initialized = false;
+
+    public static synchronized void init(Properties prop) {
+        if (initialized) {
+            throw new IllegalStateException("Already initialized.");
+        }
+        String val = prop.getProperty("scrypt.params", "14;8;1");
+        String[] parts = val.split(";", 3);
+        int N = 1 << Integer.parseInt(parts[0]);
+        int r = Integer.parseInt(parts[1]);
+        int p = Integer.parseInt(parts[2]);
+        checkScryptParams(N, r, p);
+        PasswordHash.N = N;
+        PasswordHash.r = r;
+        PasswordHash.p = p;
+        initialized = true;
+    }
+
+    private static void checkScryptParams(int N, int r, int p) {
+        if (N < 2 || (N & (N - 1)) != 0) {
+            throw new IllegalArgumentException("N must be a power of 2 greater than 1");
+        }
+        if (r <= 0) {
+            throw new IllegalArgumentException("Parameter r zero or negative");
+        }
+        if (p <= 0) {
+            throw new IllegalArgumentException("Parameter p zero or negative");
+        }
+
+        if (N > Integer.MAX_VALUE / 128 / r) {
+            throw new IllegalArgumentException("Parameter N is too large");
+        }
+        if (r > Integer.MAX_VALUE / 128 / p) {
+            throw new IllegalArgumentException("Parameter r is too large");
+        }
     }
 }
index ec589b4b1ffa7c8a69a6eddbb26df92150fb4a18..1a8ce6929b91387a5d1c37ed87605d224f2c0c5c 100644 (file)
@@ -35,6 +35,7 @@ import org.cacert.gigi.util.DatabaseManager;
 import org.cacert.gigi.util.DomainAssessment;
 import org.cacert.gigi.util.Notary;
 import org.cacert.gigi.util.PEM;
+import org.cacert.gigi.util.PasswordHash;
 import org.cacert.gigi.util.ServerConstants;
 import org.cacert.gigi.util.TimeConditions;
 import org.junit.BeforeClass;
@@ -82,6 +83,7 @@ public abstract class ConfiguredTest {
         ServerConstants.init(props);
         TimeConditions.init(props);
         DomainAssessment.init(props);
+        PasswordHash.init(props);
 
         if ( !DatabaseConnection.isInited()) {
             DatabaseConnection.init(testProps);
@@ -114,6 +116,7 @@ public abstract class ConfiguredTest {
             }
         }
         mainProps.setProperty("highFinancialValue", out.getAbsolutePath());
+        mainProps.setProperty("scrypt.params", "1;1;1");
         return mainProps;
     }