serializedAsymmetricKey TrezorCrypto::HDNodeToSerialized( const HDNode& node, const DerivationMode privateVersion) const { serializedAsymmetricKey key = std::make_shared<proto::AsymmetricKey>(); key->set_version(1); key->set_type(proto::AKEYTYPE_SECP256K1); if (privateVersion) { key->set_mode(proto::KEYMODE_PRIVATE); key->set_chaincode(node.chain_code, sizeof(node.chain_code)); OTPassword plaintextKey; plaintextKey.setMemory(node.private_key, sizeof(node.private_key)); OTData encryptedKey; BinarySecret masterPassword( App::Me().Crypto().AES().InstantiateBinarySecretSP()); masterPassword = CryptoSymmetric::GetMasterKey(""); bool encrypted = Libsecp256k1::EncryptPrivateKey( plaintextKey, *masterPassword, encryptedKey); if (encrypted) { key->set_key(encryptedKey.GetPointer(), encryptedKey.GetSize()); } } else { key->set_mode(proto::KEYMODE_PUBLIC); key->set_key(node.public_key, sizeof(node.public_key)); } return key; }
bool EcdsaProvider::AsymmetricKeyToECPrivkey( const proto::Ciphertext& asymmetricKey, const OTPasswordData& passwordData, OTPassword& privkey) const { BinarySecret masterPassword(crypto_.AES().InstantiateBinarySecretSP()); return ImportECPrivatekey(asymmetricKey, passwordData, privkey); }
Passwords::Passwords(QWidget *parent) : QDialog(parent) { setupUi(this); setWindowFlags(Qt::Sheet); s_show_passwords = false; PasswordsModel *model = new PasswordsModel(this); m_proxyModel = new QSortFilterProxyModel(this); connect(search, SIGNAL(textChanged(QString)), m_proxyModel, SLOT(setFilterFixedString(QString))); connect(removeButton, SIGNAL(clicked()), PasswordsTable, SLOT(removeOne())); connect(removeAllButton, SIGNAL(clicked()), PasswordsTable, SLOT(removeAll())); connect(buttonShowPasswords, SIGNAL(clicked()), this, SLOT(showPasswords())); connect(buttonMaster, SIGNAL(clicked()), this, SLOT(masterPassword())); m_proxyModel->setSourceModel(model); PasswordsTable->verticalHeader()->hide(); PasswordsTable->setSelectionBehavior(QAbstractItemView::SelectRows); PasswordsTable->setModel(m_proxyModel); PasswordsTable->setAlternatingRowColors(true); PasswordsTable->setTextElideMode(Qt::ElideMiddle); PasswordsTable->setShowGrid(false); PasswordsTable->setSortingEnabled(true); QFont f = font(); f.setPointSize(10); QFontMetrics fm(f); int height = fm.height() + fm.height()/3; PasswordsTable->verticalHeader()->setDefaultSectionSize(height); PasswordsTable->verticalHeader()->setMinimumSectionSize(-1); for (int i = 0; i < model->columnCount(); ++i){ int header = PasswordsTable->horizontalHeader()->sectionSizeHint(i); switch (i) { case 0: header = fm.width(QString(40, 'X')); break; case 1: header = fm.width(QString(12, 'X')); break; } int buffer = fm.width(QLatin1String("xx")); header += buffer; PasswordsTable->horizontalHeader()->resizeSection(i, header); } PasswordsTable->horizontalHeader()->setStretchLastSection(true); }
std::shared_ptr<HDNode> TrezorCrypto::SerializedToHDNode( const proto::AsymmetricKey& serialized) const { std::shared_ptr<HDNode> node = std::make_shared<HDNode>(); OTPassword::safe_memcpy( &(node->chain_code[0]), sizeof(node->chain_code), serialized.chaincode().c_str(), serialized.chaincode().size(), false); if (proto::KEYMODE_PRIVATE == serialized.mode()) { OTData encryptedKey( serialized.key().c_str(), serialized.key().size()); BinarySecret plaintextKey( App::Me().Crypto().AES().InstantiateBinarySecretSP()); BinarySecret masterPassword( App::Me().Crypto().AES().InstantiateBinarySecretSP()); masterPassword = CryptoSymmetric::GetMasterKey(""); Libsecp256k1::DecryptPrivateKey( encryptedKey, *masterPassword, *plaintextKey); OTPassword::safe_memcpy( &(node->private_key[0]), sizeof(node->private_key), plaintextKey->getMemory(), plaintextKey->getMemorySize(), false); } else { OTPassword::safe_memcpy( &(node->public_key[0]), sizeof(node->public_key), serialized.key().c_str(), serialized.key().size(), false); } return node; }