/* * Non encrypted private key in WIF */ std::string WalletUtilityDB::getKey(CDataStream ssKey, CDataStream ssValue) { std::string strKey; CPubKey vchPubKey; ssKey >> vchPubKey; CPrivKey pkey; CKey key; ssValue >> pkey; if (key.Load(pkey, vchPubKey, true)) strKey = CBitcoinSecret(key).ToString(); return strKey; }
/* * Encrypted private key in WIF format */ std::string WalletUtilityDB::getCryptedKey(CDataStream ssKey, CDataStream ssValue, std::string masterPass) { mPass = masterPass.c_str(); CPubKey vchPubKey; ssKey >> vchPubKey; CKey key; std::vector<unsigned char> vKey; ssValue >> vKey; if (!Unlock()) return ""; if(!DecryptKey(vKey, vchPubKey, key)) return ""; std::string strKey = CBitcoinSecret(key).ToString(); return strKey; }
void Bip38ToolDialog::on_decryptKeyButton_DEC_clicked() { string strPassphrase = ui->passphraseIn_DEC->text().toStdString(); string strKey = ui->encryptedKeyIn_DEC->text().toStdString(); uint256 privKey; bool fCompressed; if (!BIP38_Decrypt(strPassphrase, strKey, privKey, fCompressed)) { ui->statusLabel_DEC->setStyleSheet("QLabel { color: red; }"); ui->statusLabel_DEC->setText(tr("Failed to decrypt.") + QString(" ") + tr("Please check the key and passphrase and try again.")); return; } key.Set(privKey.begin(), privKey.end(), fCompressed); CPubKey pubKey = key.GetPubKey(); CBitcoinAddress address(pubKey.GetID()); ui->decryptedKeyOut_DEC->setText(QString::fromStdString(CBitcoinSecret(key).ToString())); ui->addressOut_DEC->setText(QString::fromStdString(address.ToString())); }
void PaperWalletDialog::on_getNewAddress_clicked() { // Create a new private key CKey privKey; privKey.MakeNewKey(true); // Derive the public key CPubKey pubkey = privKey.GetPubKey(); // Derive the public key hash CBitcoinAddress pubkeyhash; pubkeyhash.Set(pubkey.GetID()); // Create String versions of each string myPrivKey = CBitcoinSecret(privKey).ToString(); string myPubKey = HexStr(pubkey.begin(), pubkey.end()); string myAddress = pubkeyhash.ToString(); #ifdef USE_QRCODE // Generate the address QR code QRcode *code = QRcode_encodeString(myAddress.c_str(), 0, QR_ECLEVEL_M, QR_MODE_8, 1); if (!code) { ui->addressQRCode->setText(tr("Error encoding Address into QR Code.")); return; } QImage publicKeyImage = QImage(code->width, code->width, QImage::Format_ARGB32); publicKeyImage.fill(0x000000); unsigned char *p = code->data; for (int y = 0; y < code->width; y++) { for (int x = 0; x < code->width; x++) { publicKeyImage.setPixel(x, y, ((*p & 1) ? 0xff000000 : 0x0)); p++; } } QRcode_free(code); // Generate the private key QR code code = QRcode_encodeString(myPrivKey.c_str(), 0, QR_ECLEVEL_M, QR_MODE_8, 1); if (!code) { ui->privateKeyQRCode->setText(tr("Error encoding private key into QR Code.")); return; } QImage privateKeyImage = QImage(code->width, code->width, QImage::Format_ARGB32); privateKeyImage.fill(0x000000); p = code->data; for (int y = 0; y < code->width; y++) { for (int x = 0; x < code->width; x++) { privateKeyImage.setPixel(x, y, ((*p & 1) ? 0xff000000 : 0x0)); p++; } } QRcode_free(code); // Populate the QR Codes ui->addressQRCode->setPixmap(QPixmap::fromImage(publicKeyImage).scaled(ui->addressQRCode->width(), ui->addressQRCode->height())); ui->privateKeyQRCode->setPixmap(QPixmap::fromImage(privateKeyImage).scaled(ui->privateKeyQRCode->width(), ui->privateKeyQRCode->height())); #endif // Populate the Texts ui->addressText->setText(myAddress.c_str()); ui->privateKeyText->setText(tr(myPrivKey.c_str())); ui->publicKey->setHtml(myPubKey.c_str()); // Update the fonts to fit the height of the wallet. // This should only really trigger the first time since the font size persists. double paperHeight = (double) ui->paperTemplate->height(); double maxTextWidth = paperHeight * 0.99; double minTextWidth = paperHeight * 0.95; int pixelSizeStep = 1; int addressTextLength = ui->addressText->fontMetrics().boundingRect(ui->addressText->text()).width(); QFont font = ui->addressText->font(); for(int i = 0; i < PAPER_WALLET_READJUST_LIMIT; i++) { if ( addressTextLength < minTextWidth) { font.setPixelSize(font.pixelSize() + pixelSizeStep); ui->addressText->setFont(font); addressTextLength = ui->addressText->fontMetrics().boundingRect(ui->addressText->text()).width(); } else { break; } } if ( addressTextLength > maxTextWidth ) { font.setPixelSize(font.pixelSize() - pixelSizeStep); ui->addressText->setFont(font); addressTextLength = ui->addressText->fontMetrics().boundingRect(ui->addressText->text()).width(); } int privateKeyTextLength = ui->privateKeyText->fontMetrics().boundingRect(ui->privateKeyText->text()).width(); font = ui->privateKeyText->font(); for(int i = 0; i < PAPER_WALLET_READJUST_LIMIT; i++) { if ( privateKeyTextLength < minTextWidth) { font.setPixelSize(font.pixelSize() + pixelSizeStep); ui->privateKeyText->setFont(font); privateKeyTextLength = ui->privateKeyText->fontMetrics().boundingRect(ui->privateKeyText->text()).width(); } else { break; } } if ( privateKeyTextLength > maxTextWidth ) { font.setPixelSize(font.pixelSize() - pixelSizeStep); ui->privateKeyText->setFont(font); privateKeyTextLength = ui->privateKeyText->fontMetrics().boundingRect(ui->privateKeyText->text()).width(); } }
void AddEditStormNode::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 { CStormNodeConfig c; c.sAlias = ui->aliasLineEdit->text().toStdString(); c.sAddress = ui->addressLineEdit->text().toStdString(); CKey secret; secret.MakeNewKey(false); c.sStormnodePrivKey = CBitcoinSecret(secret).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->mapMyStormNodes.insert(make_pair(c.sAddress, c)); walletdb.WriteStormNodeConfig(c.sAddress, c); uiInterface.NotifyStormNodeChanged(c); accept(); }