bool CCryptoKeyStore::EncryptKeys(CKeyingMaterial& vMasterKeyIn) { { LOCK(cs_KeyStore); if (!mapCryptedKeys.empty() || IsCrypted()) return false; fUseCrypto = true; BOOST_FOREACH(KeyMap::value_type& mKey, mapKeys) { //const CKey &key = mKey.second; //CPubKey vchPubKey = key.GetPubKey(); //CKeyingMaterial vchSecret(key.begin(), key.end()); CKey key; if (!key.SetSecret(mKey.second.first, mKey.second.second)) return false; const CPubKey vchPubKey = key.GetPubKey(); std::vector<unsigned char> vchCryptedSecret; //if (!EncryptSecret(vMasterKeyIn, vchSecret, vchPubKey.GetHash(), vchCryptedSecret)) bool fCompressed; if (!EncryptSecret(vMasterKeyIn, key.GetSecret(fCompressed), vchPubKey.GetHash(), vchCryptedSecret)) return false; if (!AddCryptedKey(vchPubKey, vchCryptedSecret)) return false; } mapKeys.clear(); }
//bool CCryptoKeyStore::AddKeyPubKey(const CKey& key, const CPubKey &pubkey) bool CCryptoKeyStore::AddKey(const CKey& key) { { LOCK(cs_KeyStore); if (!IsCrypted()) //return CBasicKeyStore::AddKeyPubKey(key, pubkey); return CBasicKeyStore::AddKey(key); if (IsLocked()) return false; std::vector<unsigned char> vchCryptedSecret; //CKeyingMaterial vchSecret(key.begin(), key.end()); CPubKey vchPubKey = key.GetPubKey(); bool fCompressed; //if (!EncryptSecret(vMasterKey, vchSecret, pubkey.GetHash(), vchCryptedSecret)) if (!EncryptSecret(vMasterKey, key.GetSecret(fCompressed), vchPubKey.GetHash(), vchCryptedSecret)) return false; //if (!AddCryptedKey(pubkey, vchCryptedSecret)) if (!AddCryptedKey(key.GetPubKey(), vchCryptedSecret)) return false; } return true; }
bool CCryptoKeyStore::AddKey(const CKey& key) { { LOCK(cs_KeyStore); CTxDestination address = key.GetPubKey().GetID(); if (HaveWatchOnly(address)) return false; if (!IsCrypted()) return CBasicKeyStore::AddKey(key); if (IsLocked()) return false; std::vector<unsigned char> vchCryptedSecret; CPubKey vchPubKey = key.GetPubKey(); bool fCompressed; if (!EncryptSecret(vMasterKey, key.GetSecret(fCompressed), vchPubKey.GetHash(), vchCryptedSecret)) return false; if (!AddCryptedKey(key.GetPubKey(), vchCryptedSecret)) return false; } return true; }
bool CBasicKeyStore::AddKey(const CKey& key) { bool fCompressed = false; CSecret secret = key.GetSecret(fCompressed); CRITICAL_BLOCK(cs_KeyStore) mapKeys[CBitshekelAddress(key.GetPubKey())] = make_pair(secret, fCompressed); return true; }
bool CBasicKeyStore::AddKey(const CKey& key) { bool fCompressed = false; CSecret secret = key.GetSecret(fCompressed); { LOCK(cs_KeyStore); mapKeys[key.GetPubKey().GetID()] = make_pair(secret, fCompressed); } return true; }
bool CBasicKeyStore::AddKey(const CKey& key) { CRITICAL_BLOCK(cs_KeyStore) mapKeys[CBitcoinAddress(key.GetPubKey())] = key.GetSecret(); return true; }
void AddEditAdrenalineNode::on_okButton_clicked() { if(ui->aliasLineEdit->text() == "") { QMessageBox msg; msg.setText("Please enter an alias."); msg.exec(); return; } else if(ui->addressLineEdit->text() == "") { QMessageBox msg; msg.setText("Please enter an address."); msg.exec(); return; } else { CAdrenalineNodeConfig c; c.sAlias = ui->aliasLineEdit->text().toStdString(); c.sAddress = ui->addressLineEdit->text().toStdString(); CKey secret; secret.MakeNewKey(false); CBitcoinSecret s; bool fCompressedOut; s.SetSecret(secret.GetSecret(fCompressedOut), false); c.sMasternodePrivKey = s.ToString(); CWalletDB walletdb(pwalletMain->strWalletFile); CAccount account; walletdb.ReadAccount(c.sAlias, account); bool bKeyUsed = false; bool bForceNew = false; // Check if the current key has been used if (account.vchPubKey.IsValid()) { CScript scriptPubKey; scriptPubKey.SetDestination(account.vchPubKey.GetID()); for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end() && account.vchPubKey.IsValid(); ++it) { const CWalletTx& wtx = (*it).second; BOOST_FOREACH(const CTxOut& txout, wtx.vout) if (txout.scriptPubKey == scriptPubKey) bKeyUsed = true; } } // Generate a new key if (!account.vchPubKey.IsValid() || bForceNew || bKeyUsed) { if (!pwalletMain->GetKeyFromPool(account.vchPubKey)) { QMessageBox msg; msg.setText("Keypool ran out, please call keypoolrefill first."); msg.exec(); return; } pwalletMain->SetAddressBookName(account.vchPubKey.GetID(), c.sAlias); walletdb.WriteAccount(c.sAlias, account); } c.sCollateralAddress = CBitcoinAddress(account.vchPubKey.GetID()).ToString(); pwalletMain->mapMyAdrenalineNodes.insert(make_pair(c.sAddress, c)); walletdb.WriteAdrenalineNodeConfig(c.sAddress, c); uiInterface.NotifyAdrenalineNodeChanged(c); accept(); }