Explorar o código

Injecting CryptorProvider into UpgradeStrategies

Sebastian Stenzel %!s(int64=8) %!d(string=hai) anos
pai
achega
091e62057d

+ 2 - 1
main/ui/src/main/java/org/cryptomator/ui/CryptomatorModule.java

@@ -18,6 +18,7 @@ import javax.inject.Singleton;
 
 import org.cryptomator.common.CommonsModule;
 import org.cryptomator.crypto.engine.impl.CryptoEngineModule;
+import org.cryptomator.cryptolib.CryptoLibModule;
 import org.cryptomator.frontend.FrontendFactory;
 import org.cryptomator.frontend.FrontendId;
 import org.cryptomator.frontend.webdav.WebDavModule;
@@ -41,7 +42,7 @@ import javafx.application.Application;
 import javafx.beans.Observable;
 import javafx.stage.Stage;
 
-@Module(includes = {CryptoEngineModule.class, CommonsModule.class, WebDavModule.class, KeychainModule.class, JniModule.class})
+@Module(includes = {CryptoEngineModule.class, CommonsModule.class, WebDavModule.class, KeychainModule.class, JniModule.class, CryptoLibModule.class})
 class CryptomatorModule {
 
 	private static final Logger LOG = LoggerFactory.getLogger(CryptomatorModule.class);

+ 12 - 1
main/ui/src/main/java/org/cryptomator/ui/MainApplication.java

@@ -12,9 +12,12 @@ import java.io.IOException;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
 import java.util.concurrent.ExecutionException;
 
 import org.apache.commons.lang3.SystemUtils;
+import org.cryptomator.cryptolib.common.SecureRandomModule;
 import org.cryptomator.ui.controllers.MainController;
 import org.cryptomator.ui.util.ActiveWindowStyleSupport;
 import org.cryptomator.ui.util.DeferredCloser;
@@ -40,7 +43,15 @@ public class MainApplication extends Application {
 	@Override
 	public void start(Stage primaryStage) throws IOException {
 		LOG.info("JavaFX application started");
-		final CryptomatorComponent comp = DaggerCryptomatorComponent.builder().cryptomatorModule(new CryptomatorModule(this, primaryStage)).build();
+		final CryptomatorComponent comp;
+		try {
+			comp = DaggerCryptomatorComponent.builder() //
+					.cryptomatorModule(new CryptomatorModule(this, primaryStage)) //
+					.secureRandomModule(new SecureRandomModule(SecureRandom.getInstanceStrong())) //
+					.build();
+		} catch (NoSuchAlgorithmException e) {
+			throw new IllegalStateException("Every implementation of the Java platform is required to support at least one strong SecureRandom implementation.", e);
+		}
 		final MainController mainCtrl = comp.mainController();
 		closer = comp.deferredCloser();
 

+ 5 - 4
main/ui/src/main/java/org/cryptomator/ui/model/UpgradeVersion3DropBundleExtension.java

@@ -3,14 +3,15 @@ package org.cryptomator.ui.model;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.security.SecureRandom;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
 import org.apache.commons.lang3.StringUtils;
-import org.cryptomator.cryptolib.Cryptors;
+import org.cryptomator.cryptolib.api.CryptoLibVersion;
+import org.cryptomator.cryptolib.api.CryptoLibVersion.Version;
 import org.cryptomator.cryptolib.api.Cryptor;
+import org.cryptomator.cryptolib.api.CryptorProvider;
 import org.cryptomator.ui.settings.Localization;
 import org.cryptomator.ui.settings.Settings;
 import org.slf4j.Logger;
@@ -25,8 +26,8 @@ class UpgradeVersion3DropBundleExtension extends UpgradeStrategy {
 	private final Settings settings;
 
 	@Inject
-	public UpgradeVersion3DropBundleExtension(SecureRandom secureRandom, Localization localization, Settings settings) {
-		super(Cryptors.version1(secureRandom), localization, 3, 3);
+	public UpgradeVersion3DropBundleExtension(@CryptoLibVersion(Version.ONE) CryptorProvider version1CryptorProvider, Localization localization, Settings settings) {
+		super(version1CryptorProvider, localization, 3, 3);
 		this.settings = settings;
 	}
 

+ 5 - 4
main/ui/src/main/java/org/cryptomator/ui/model/UpgradeVersion3to4.java

@@ -9,7 +9,6 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.security.MessageDigest;
-import java.security.SecureRandom;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -19,8 +18,10 @@ import javax.inject.Singleton;
 import org.apache.commons.codec.binary.Base32;
 import org.apache.commons.codec.binary.BaseNCodec;
 import org.apache.commons.lang3.StringUtils;
-import org.cryptomator.cryptolib.Cryptors;
+import org.cryptomator.cryptolib.api.CryptoLibVersion;
+import org.cryptomator.cryptolib.api.CryptoLibVersion.Version;
 import org.cryptomator.cryptolib.api.Cryptor;
+import org.cryptomator.cryptolib.api.CryptorProvider;
 import org.cryptomator.cryptolib.common.MessageDigestSupplier;
 import org.cryptomator.ui.settings.Localization;
 import org.slf4j.Logger;
@@ -44,8 +45,8 @@ class UpgradeVersion3to4 extends UpgradeStrategy {
 	private final BaseNCodec base32 = new Base32();
 
 	@Inject
-	public UpgradeVersion3to4(SecureRandom secureRandom, Localization localization) {
-		super(Cryptors.version1(secureRandom), localization, 3, 4);
+	public UpgradeVersion3to4(@CryptoLibVersion(Version.ONE) CryptorProvider version1CryptorProvider, Localization localization) {
+		super(version1CryptorProvider, localization, 3, 4);
 	}
 
 	@Override

+ 5 - 3
main/ui/src/main/java/org/cryptomator/ui/model/UpgradeVersion4to5.java

@@ -9,14 +9,16 @@ import java.nio.file.Path;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.StandardOpenOption;
 import java.nio.file.attribute.BasicFileAttributes;
-import java.security.SecureRandom;
 import java.util.regex.Pattern;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
 import org.cryptomator.cryptolib.Cryptors;
+import org.cryptomator.cryptolib.api.CryptoLibVersion;
+import org.cryptomator.cryptolib.api.CryptoLibVersion.Version;
 import org.cryptomator.cryptolib.api.Cryptor;
+import org.cryptomator.cryptolib.api.CryptorProvider;
 import org.cryptomator.cryptolib.api.FileHeader;
 import org.cryptomator.ui.settings.Localization;
 import org.slf4j.Logger;
@@ -33,8 +35,8 @@ class UpgradeVersion4to5 extends UpgradeStrategy {
 	private static final Pattern BASE32_PATTERN = Pattern.compile("^([A-Z2-7]{8})*[A-Z2-7=]{8}");
 
 	@Inject
-	public UpgradeVersion4to5(SecureRandom secureRandom, Localization localization) {
-		super(Cryptors.version1(secureRandom), localization, 4, 5);
+	public UpgradeVersion4to5(@CryptoLibVersion(Version.ONE) CryptorProvider version1CryptorProvider, Localization localization) {
+		super(version1CryptorProvider, localization, 4, 5);
 	}
 
 	@Override