Status Login::repoFindLocal(JsonPtr &result, const std::string &type) { // If this is an Airbitz account, try the legacy `syncKey`: if (repoTypeAirbitzAccount == type) { LoginPackage loginPackage; ABC_CHECK(loginPackage.load(paths.loginPackagePath())); if (loginPackage.syncKeyBox().ok()) { DataChunk syncKey; ABC_CHECK(loginPackage.syncKeyBox().decrypt(syncKey, dataKey_)); AccountRepoJson repoJson; ABC_CHECK(repoJson.syncKeySet(base64Encode(syncKey))); ABC_CHECK(repoJson.dataKeySet(base64Encode(dataKey_))); result = repoJson; return Status(); } } // Search the on-disk array: LoginStashJson stashJson; if (stashJson.load(paths.stashPath())) { auto keyBoxesJson = stashJson.keyBoxes(); size_t keyBoxesSize = keyBoxesJson.size(); for (size_t i = 0; i < keyBoxesSize; i++) { JsonBox boxJson(keyBoxesJson[i]); DataChunk keyBytes; KeyJson keyJson; ABC_CHECK(boxJson.decrypt(keyBytes, dataKey_)); ABC_CHECK(keyJson.decode(toString(keyBytes))); if (keyJson.typeOk() && type == keyJson.type()) { result = keyJson.keys(); return Status(); } } } return ABC_ERROR(ABC_CC_AccountDoesNotExist, "No such repo"); }