bool LocalMachine::init() { if(m_initialized) return true; NotificationsManager::instance()->notify(_S("Initializing local machine...")); OS_ASSERT(m_id.empty()); String filePath = utils::makeFilePath(Options::instance()->getDataPath(), FILENAME); DataTree dt; if(dt.load(filePath)) { m_publicKey = dt.getV(PUBLIC_KEY); m_privateKey = dt.getV(PRIVATE_KEY); if(CryptManager::instance()->rsaCheckKeys(m_privateKey, m_publicKey)) { // Carica l'id della macchina dopo aver verificato la validit delle chiavi m_id = dt.getV(ID); // Verifica che l'id sia stato archiviato correttamente if(validate() == false) m_id.clear(); } } if(m_id.empty()) { m_privateKey.clear(); m_publicKey.clear(); if(CryptManager::instance()->rsaGenerateKeys(rsaType4096, m_privateKey, m_publicKey) == false) return false; // L'ID della macchina dato dall'hash della chiave pubblica m_id = P2PSystem::instance()->generateMachineID(m_publicKey); dt.setV(ID, m_id); dt.setV(PUBLIC_KEY, m_publicKey); dt.setV(PRIVATE_KEY, m_privateKey); if(dt.save(filePath) == false) return false; } m_initialized = true; return true; }