From 65ad054ff3033930dc8270cd1e286385032d58f9 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Fri, 9 Apr 2021 14:56:40 +0200 Subject: [PATCH] Enhance visibility for testing --- .../crypto/MasterkeyCryptoCloudProvider.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/data/src/main/java/org/cryptomator/data/cloud/crypto/MasterkeyCryptoCloudProvider.java b/data/src/main/java/org/cryptomator/data/cloud/crypto/MasterkeyCryptoCloudProvider.java index 300d4372..daed730f 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/crypto/MasterkeyCryptoCloudProvider.java +++ b/data/src/main/java/org/cryptomator/data/cloud/crypto/MasterkeyCryptoCloudProvider.java @@ -52,7 +52,7 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider { private final SecureRandom secureRandom; public MasterkeyCryptoCloudProvider(CloudContentRepository cloudContentRepository, // - CryptoCloudContentRepositoryFactory cryptoCloudContentRepositoryFactory, + CryptoCloudContentRepositoryFactory cryptoCloudContentRepositoryFactory, // SecureRandom secureRandom) { this.cloudContentRepository = cloudContentRepository; this.cryptoCloudContentRepositoryFactory = cryptoCloudContentRepositoryFactory; @@ -138,7 +138,7 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider { Vault vault = aCopyOf(token.getVault()) // .withUnlocked(true) // .withFormat(vaultFormat) // - .withMaxFileNameLength(maxFileNameLength) + .withMaxFileNameLength(maxFileNameLength) // .build(); cryptoCloudContentRepositoryFactory.registerCryptor(vault, cryptor); @@ -182,7 +182,8 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider { return data.toByteArray(); } - private Cryptor cryptorFor(Masterkey keyFile, VaultCipherCombo vaultCipherCombo) { + // Visible for testing + Cryptor cryptorFor(Masterkey keyFile, VaultCipherCombo vaultCipherCombo) { return vaultCipherCombo.getCryptorProvider(secureRandom).withKey(keyFile); } @@ -190,14 +191,15 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider { public boolean isVaultPasswordValid(Vault vault, Optional unverifiedVaultConfig, CharSequence password) throws BackendException { try { // create a cryptor, which checks the password, then destroy it immediately - Masterkey masterkey = createUnlockToken(vault, unverifiedVaultConfig).getKeyFile(password); + UnlockTokenImpl unlockToken = createUnlockToken(vault, unverifiedVaultConfig); + Masterkey masterkey = unlockToken.getKeyFile(password); VaultCipherCombo vaultCipherCombo; - if(unverifiedVaultConfig.isPresent()) { + if (unverifiedVaultConfig.isPresent()) { VaultConfig vaultConfig = VaultConfig.verify(masterkey.getEncoded(), unverifiedVaultConfig.get()); assertVaultVersionIsSupported(vaultConfig.getVaultFormat()); vaultCipherCombo = vaultConfig.getCipherCombo(); } else { - int vaultVersion = MasterkeyFileAccess.readAllegedVaultVersion(masterkey.getEncoded()); + int vaultVersion = MasterkeyFileAccess.readAllegedVaultVersion(unlockToken.keyFileData); assertLegacyVaultVersionIsSupported(vaultVersion); vaultCipherCombo = SIV_CTRMAC; } @@ -234,8 +236,6 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider { @Override public void changePassword(Vault vault, Optional unverifiedVaultConfig, String oldPassword, String newPassword) throws BackendException { CloudFolder vaultLocation = vaultLocation(vault); - ByteArrayOutputStream dataOutputStream = new ByteArrayOutputStream(); - CloudFile masterkeyFile; if (unverifiedVaultConfig.isPresent()) { masterkeyFile = masterkeyFile(vaultLocation, unverifiedVaultConfig.get()); @@ -243,6 +243,7 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider { masterkeyFile = legacyMasterkeyFile(vaultLocation); } + ByteArrayOutputStream dataOutputStream = new ByteArrayOutputStream(); cloudContentRepository.read(masterkeyFile, Optional.empty(), dataOutputStream, NO_OP_PROGRESS_AWARE); byte[] data = dataOutputStream.toByteArray(); @@ -298,12 +299,12 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider { } } - private static class UnlockTokenImpl implements UnlockToken { + static class UnlockTokenImpl implements UnlockToken { private final Vault vault; private final byte[] keyFileData; - private UnlockTokenImpl(Vault vault, byte[] keyFileData) { + UnlockTokenImpl(Vault vault, byte[] keyFileData) { this.vault = vault; this.keyFileData = keyFileData; }