package org.commcare.models.database.migration;
import android.content.ContentValues;
import org.commcare.CommCareApplication;
import org.commcare.models.database.AndroidDbHelper;
import org.commcare.models.database.HybridFileBackedSqlStorage;
import org.commcare.core.encryption.CryptUtil;
import org.commcare.modern.database.DatabaseHelper;
import org.javarosa.core.services.storage.Persistable;
/**
* File backed storage for use before session w/ key have been setup:
* when performing user db migrations
*
* @author Phillip Mates (pmates@dimagi.com).
*/
public class HybridFileBackedSqlStorageForMigration<T extends Persistable> extends HybridFileBackedSqlStorage<T> {
private final byte[] fileKeySeed;
public HybridFileBackedSqlStorageForMigration(String table,
Class<? extends T> ctype,
AndroidDbHelper helper,
String baseDir,
byte[] fileKeySeed) {
super(table, ctype, helper, baseDir, CommCareApplication.instance().getCurrentApp());
this.fileKeySeed = fileKeySeed;
}
@Override
protected byte[] generateKeyAndAdd(ContentValues contentValues) {
byte[] key = CryptUtil.generateSymmetricKey(CryptUtil.uniqueSeedFromSecureStatic(fileKeySeed)).getEncoded();
contentValues.put(DatabaseHelper.AES_COL, key);
return key;
}
}