Ejemplo n.º 1
0
  private void decryptCredentials(DatabaseEntry entry, JSONObject jDatabase) {
    String databaseUsername, databasePassword = null;
    // if no encryption key or both username and password are empty, skip encryption
    if (!SettingsManager.getSyncSetting(SettingsManager.SyncKey.sync_credentials)
        || TextUtils.isEmpty(SettingsManager.getEc())
        || (TextUtils.isEmpty(databaseUsername = jDatabase.optString("database_username"))
            && TextUtils.isEmpty(databasePassword = jDatabase.optString("database_password"))))
      return;
    try {
      AesCbcWithIntegrity.SecretKeys keys = AesCbcWithIntegrity.keys(SettingsManager.getEc());

      if (!TextUtils.isEmpty(databaseUsername)) {
        AesCbcWithIntegrity.CipherTextIvMac cipherTextIvMac =
            new AesCbcWithIntegrity.CipherTextIvMac(databaseUsername);
        entry.databaseUsername = AesCbcWithIntegrity.decryptString(cipherTextIvMac, keys);
      }
      if (!TextUtils.isEmpty(databasePassword)) {
        AesCbcWithIntegrity.CipherTextIvMac cipherTextIvMac =
            new AesCbcWithIntegrity.CipherTextIvMac(databasePassword);
        entry.databasePassword = AesCbcWithIntegrity.decryptString(cipherTextIvMac, keys);
      }
    } catch (GeneralSecurityException | UnsupportedEncodingException e) {
      if (SettingsManager.DEBUG()) e.printStackTrace();
      // fail silently on any kind of error
      // user will see warning on database entry when restored without username/password
    }
  }