} // namepsace
DMCryptEngine::DMCryptEngine(const std::string &src, const std::string &dest, const ProgressBar &prgsBar) :
- source(src), destination(dest), progress(prgsBar)
+ source(src), destination(dest), progress(prgsBar), start(false)
{
}
// create crypto type device mapping layer to mount the plain partition
// should be encrypted here.
auto cryptoBlkDev = createCryptoBlkDev(source, DM_DEFAULT_LABEL_NAME, sanitizeKey(key), DM_DEFAULT_CRYPTO_NAME);
+ start = true;
std::function<bool(blkcnt_t)> isTarget;
if (!(options & OPTION_INCLUDE_UNUSED_REGION)) {
// create crypto type device mapping layer to mount the plain partition
// should be encrypted here.
auto cryptoBlkDev = createCryptoBlkDev(source, DM_DEFAULT_LABEL_NAME, sanitizeKey(key), DM_DEFAULT_CRYPTO_NAME);
+ start = true;
// Force filesystem check via fcsf might be able to avoid fail situation during decryption.
Ext4Tool ext4CryptoBlkDev(cryptoBlkDev);
INFO(SINK, "Encryption started.");
::vconf_set_str(VCONFKEY_ODE_CRYPTO_STATE, "error_partially_encrypted");
- engine->encrypt(masterKey, options);
+ try {
+ engine->encrypt(masterKey, options);
+ } catch (runtime::Exception &e) {
+ ERROR(SINK, e.what());
+ if (!engine->isStarted()) {
+ ::vconf_set_str(VCONFKEY_ODE_CRYPTO_STATE, "unencrypted");
+ file.remove();
+ }
+ ::sync();
+ ::reboot(RB_AUTOBOOT);
+ }
setOptions(options & getSupportedOptions());
INFO(SINK, "Encryption completed.");
INFO(SINK, "Decryption started.");
::vconf_set_str(VCONFKEY_ODE_CRYPTO_STATE, "error_partially_decrypted");
- engine->decrypt(masterKey, getOptions());
+ try {
+ engine->decrypt(masterKey, getOptions());
+ } catch (runtime::Exception &e) {
+ ERROR(SINK, e.what());
+ if (!engine->isStarted()) {
+ ::vconf_set_str(VCONFKEY_ODE_CRYPTO_STATE, "encrypted");
+ file.remove();
+ }
+ ::sync();
+ ::reboot(RB_AUTOBOOT);
+ }
INFO(SINK, "Decryption complete.");
::vconf_set_str(VCONFKEY_ODE_CRYPTO_STATE, "unencrypted");