Enhance visibility for testing

This commit is contained in:
Julian Raufelder 2021-04-09 14:56:40 +02:00
parent a4762fb32a
commit 65ad054ff3
No known key found for this signature in database
GPG Key ID: 17EE71F6634E381D

View File

@ -52,7 +52,7 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider {
private final SecureRandom secureRandom; private final SecureRandom secureRandom;
public MasterkeyCryptoCloudProvider(CloudContentRepository cloudContentRepository, // public MasterkeyCryptoCloudProvider(CloudContentRepository cloudContentRepository, //
CryptoCloudContentRepositoryFactory cryptoCloudContentRepositoryFactory, CryptoCloudContentRepositoryFactory cryptoCloudContentRepositoryFactory, //
SecureRandom secureRandom) { SecureRandom secureRandom) {
this.cloudContentRepository = cloudContentRepository; this.cloudContentRepository = cloudContentRepository;
this.cryptoCloudContentRepositoryFactory = cryptoCloudContentRepositoryFactory; this.cryptoCloudContentRepositoryFactory = cryptoCloudContentRepositoryFactory;
@ -138,7 +138,7 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider {
Vault vault = aCopyOf(token.getVault()) // Vault vault = aCopyOf(token.getVault()) //
.withUnlocked(true) // .withUnlocked(true) //
.withFormat(vaultFormat) // .withFormat(vaultFormat) //
.withMaxFileNameLength(maxFileNameLength) .withMaxFileNameLength(maxFileNameLength) //
.build(); .build();
cryptoCloudContentRepositoryFactory.registerCryptor(vault, cryptor); cryptoCloudContentRepositoryFactory.registerCryptor(vault, cryptor);
@ -182,7 +182,8 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider {
return data.toByteArray(); 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); return vaultCipherCombo.getCryptorProvider(secureRandom).withKey(keyFile);
} }
@ -190,14 +191,15 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider {
public boolean isVaultPasswordValid(Vault vault, Optional<UnverifiedVaultConfig> unverifiedVaultConfig, CharSequence password) throws BackendException { public boolean isVaultPasswordValid(Vault vault, Optional<UnverifiedVaultConfig> unverifiedVaultConfig, CharSequence password) throws BackendException {
try { try {
// create a cryptor, which checks the password, then destroy it immediately // 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; VaultCipherCombo vaultCipherCombo;
if(unverifiedVaultConfig.isPresent()) { if (unverifiedVaultConfig.isPresent()) {
VaultConfig vaultConfig = VaultConfig.verify(masterkey.getEncoded(), unverifiedVaultConfig.get()); VaultConfig vaultConfig = VaultConfig.verify(masterkey.getEncoded(), unverifiedVaultConfig.get());
assertVaultVersionIsSupported(vaultConfig.getVaultFormat()); assertVaultVersionIsSupported(vaultConfig.getVaultFormat());
vaultCipherCombo = vaultConfig.getCipherCombo(); vaultCipherCombo = vaultConfig.getCipherCombo();
} else { } else {
int vaultVersion = MasterkeyFileAccess.readAllegedVaultVersion(masterkey.getEncoded()); int vaultVersion = MasterkeyFileAccess.readAllegedVaultVersion(unlockToken.keyFileData);
assertLegacyVaultVersionIsSupported(vaultVersion); assertLegacyVaultVersionIsSupported(vaultVersion);
vaultCipherCombo = SIV_CTRMAC; vaultCipherCombo = SIV_CTRMAC;
} }
@ -234,8 +236,6 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider {
@Override @Override
public void changePassword(Vault vault, Optional<UnverifiedVaultConfig> unverifiedVaultConfig, String oldPassword, String newPassword) throws BackendException { public void changePassword(Vault vault, Optional<UnverifiedVaultConfig> unverifiedVaultConfig, String oldPassword, String newPassword) throws BackendException {
CloudFolder vaultLocation = vaultLocation(vault); CloudFolder vaultLocation = vaultLocation(vault);
ByteArrayOutputStream dataOutputStream = new ByteArrayOutputStream();
CloudFile masterkeyFile; CloudFile masterkeyFile;
if (unverifiedVaultConfig.isPresent()) { if (unverifiedVaultConfig.isPresent()) {
masterkeyFile = masterkeyFile(vaultLocation, unverifiedVaultConfig.get()); masterkeyFile = masterkeyFile(vaultLocation, unverifiedVaultConfig.get());
@ -243,6 +243,7 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider {
masterkeyFile = legacyMasterkeyFile(vaultLocation); masterkeyFile = legacyMasterkeyFile(vaultLocation);
} }
ByteArrayOutputStream dataOutputStream = new ByteArrayOutputStream();
cloudContentRepository.read(masterkeyFile, Optional.empty(), dataOutputStream, NO_OP_PROGRESS_AWARE); cloudContentRepository.read(masterkeyFile, Optional.empty(), dataOutputStream, NO_OP_PROGRESS_AWARE);
byte[] data = dataOutputStream.toByteArray(); 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 Vault vault;
private final byte[] keyFileData; private final byte[] keyFileData;
private UnlockTokenImpl(Vault vault, byte[] keyFileData) { UnlockTokenImpl(Vault vault, byte[] keyFileData) {
this.vault = vault; this.vault = vault;
this.keyFileData = keyFileData; this.keyFileData = keyFileData;
} }