Status Login::loadOffline() { ABC_CHECK(store.paths(paths, true)); LoginPackage loginPackage; ABC_CHECK(loginPackage.load(paths.loginPackagePath())); ABC_CHECK(loginPackage.passwordAuthBox().decrypt(passwordAuth_, dataKey_)); // Look for an existing rootKeyBox: JsonBox rootKeyBox; if (fileExists(paths.rootKeyPath())) { ABC_CHECK(rootKeyBox.load(paths.rootKeyPath())); } else { // Try asking the server: AuthJson authJson; LoginReplyJson loginJson; ABC_CHECK(authJson.loginSet(*this)); ABC_CHECK(loginServerLogin(loginJson, authJson)); ABC_CHECK(loginJson.save(*this)); rootKeyBox = loginJson.rootKeyBox(); } // Otherwise, there just isn't one. // Extract the rootKey: if (rootKeyBox.ok()) ABC_CHECK(rootKeyBox.decrypt(rootKey_, dataKey_)); else ABC_CHECK(rootKeyUpgrade()); return Status(); }