void printPrivateKeys(CryptoNote::WalletGreen &wallet, bool viewWallet) { auto privateViewKey = wallet.getViewKey().secretKey; if (viewWallet) { std::cout << SuccessMsg("Private view key:") << std::endl << SuccessMsg(Common::podToHex(privateViewKey)) << std::endl; return; } auto privateSpendKey = wallet.getAddressSpendKey(0).secretKey; Crypto::SecretKey derivedPrivateViewKey; CryptoNote::AccountBase::generateViewFromSpend(privateSpendKey, derivedPrivateViewKey); const bool deterministicPrivateKeys = derivedPrivateViewKey == privateViewKey; std::cout << SuccessMsg("Private spend key:") << std::endl << SuccessMsg(Common::podToHex(privateSpendKey)) << std::endl << std::endl << SuccessMsg("Private view key:") << std::endl << SuccessMsg(Common::podToHex(privateViewKey)) << std::endl; if (deterministicPrivateKeys) { std::string mnemonicSeed; Crypto::ElectrumWords::bytes_to_words(privateSpendKey, mnemonicSeed, "English"); std::cout << std::endl << SuccessMsg("Mnemonic seed:") << std::endl << SuccessMsg(mnemonicSeed) << std::endl; } std::cout << std::endl << SuccessMsg("GUI Importable Private Key:") << std::endl << SuccessMsg(getGUIPrivateKey(wallet)) << std::endl; }
std::string getGUIPrivateKey(CryptoNote::WalletGreen &wallet) { auto viewKey = wallet.getViewKey(); auto spendKey = wallet.getAddressSpendKey(0); CryptoNote::AccountPublicAddress addr { spendKey.publicKey, viewKey.publicKey, }; CryptoNote::AccountKeys keys { addr, spendKey.secretKey, viewKey.secretKey, }; return Tools::Base58::encode_addr ( CryptoNote::parameters::CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX, std::string(reinterpret_cast<char*>(&keys), sizeof(keys)) ); }