mirror of
https://github.com/overte-org/overte.git
synced 2025-07-25 07:05:47 +02:00
Send empty decrypted text if impossible to decrypt
This commit is contained in:
parent
19945c5991
commit
23e627a46f
1 changed files with 48 additions and 44 deletions
|
@ -718,6 +718,8 @@ bool Wallet::changePassphrase(const QString& newPassphrase) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wallet::handleChallengeOwnershipPacket(QSharedPointer<ReceivedMessage> packet, SharedNodePointer sendingNode) {
|
void Wallet::handleChallengeOwnershipPacket(QSharedPointer<ReceivedMessage> packet, SharedNodePointer sendingNode) {
|
||||||
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
bool challengeOriginatedFromClient = packet->getType() == PacketType::ChallengeOwnershipRequest;
|
bool challengeOriginatedFromClient = packet->getType() == PacketType::ChallengeOwnershipRequest;
|
||||||
unsigned char decryptedText[64];
|
unsigned char decryptedText[64];
|
||||||
int certIDByteArraySize;
|
int certIDByteArraySize;
|
||||||
|
@ -738,62 +740,64 @@ void Wallet::handleChallengeOwnershipPacket(QSharedPointer<ReceivedMessage> pack
|
||||||
}
|
}
|
||||||
|
|
||||||
RSA* rsa = readKeys(keyFilePath().toStdString().c_str());
|
RSA* rsa = readKeys(keyFilePath().toStdString().c_str());
|
||||||
|
int decryptionStatus = -1;
|
||||||
|
|
||||||
if (rsa) {
|
if (rsa) {
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
|
||||||
|
|
||||||
ERR_clear_error();
|
ERR_clear_error();
|
||||||
const int decryptionStatus = RSA_private_decrypt(encryptedTextByteArraySize,
|
decryptionStatus = RSA_private_decrypt(encryptedTextByteArraySize,
|
||||||
reinterpret_cast<const unsigned char*>(encryptedText.constData()),
|
reinterpret_cast<const unsigned char*>(encryptedText.constData()),
|
||||||
decryptedText,
|
decryptedText,
|
||||||
rsa,
|
rsa,
|
||||||
RSA_PKCS1_OAEP_PADDING);
|
RSA_PKCS1_OAEP_PADDING);
|
||||||
|
|
||||||
RSA_free(rsa);
|
RSA_free(rsa);
|
||||||
|
|
||||||
QByteArray decryptedTextByteArray = QByteArray(reinterpret_cast<const char*>(decryptedText), decryptionStatus);
|
|
||||||
int decryptedTextByteArraySize = decryptedTextByteArray.size();
|
|
||||||
int certIDSize = certID.size();
|
|
||||||
// setup the packet
|
|
||||||
if (challengeOriginatedFromClient) {
|
|
||||||
auto decryptedTextPacket = NLPacket::create(PacketType::ChallengeOwnershipReply,
|
|
||||||
certIDSize + decryptedTextByteArraySize + challengingNodeUUIDByteArraySize + 3 * sizeof(int),
|
|
||||||
true);
|
|
||||||
|
|
||||||
decryptedTextPacket->writePrimitive(certIDSize);
|
|
||||||
decryptedTextPacket->writePrimitive(decryptedTextByteArraySize);
|
|
||||||
decryptedTextPacket->writePrimitive(challengingNodeUUIDByteArraySize);
|
|
||||||
decryptedTextPacket->write(certID);
|
|
||||||
decryptedTextPacket->write(decryptedTextByteArray);
|
|
||||||
decryptedTextPacket->write(challengingNodeUUID);
|
|
||||||
|
|
||||||
qCDebug(commerce) << "Sending ChallengeOwnershipReply Packet containing decrypted text" << decryptedTextByteArray << "for CertID" << certID;
|
|
||||||
|
|
||||||
nodeList->sendPacket(std::move(decryptedTextPacket), *sendingNode);
|
|
||||||
} else {
|
|
||||||
auto decryptedTextPacket = NLPacket::create(PacketType::ChallengeOwnership, certIDSize + decryptedTextByteArraySize + 2 * sizeof(int), true);
|
|
||||||
|
|
||||||
decryptedTextPacket->writePrimitive(certIDSize);
|
|
||||||
decryptedTextPacket->writePrimitive(decryptedTextByteArraySize);
|
|
||||||
decryptedTextPacket->write(certID);
|
|
||||||
decryptedTextPacket->write(decryptedTextByteArray);
|
|
||||||
|
|
||||||
qCDebug(commerce) << "Sending ChallengeOwnership Packet containing decrypted text" << decryptedTextByteArray << "for CertID" << certID;
|
|
||||||
|
|
||||||
nodeList->sendPacket(std::move(decryptedTextPacket), *sendingNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (decryptionStatus == -1) {
|
|
||||||
qCDebug(commerce) << "During entity ownership challenge, decrypting the encrypted text failed.";
|
|
||||||
long error = ERR_get_error();
|
|
||||||
if (error != 0) {
|
|
||||||
const char* error_str = ERR_error_string(error, NULL);
|
|
||||||
qCWarning(entities) << "RSA error:" << error_str;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
qCDebug(commerce) << "During entity ownership challenge, creating the RSA object failed.";
|
qCDebug(commerce) << "During entity ownership challenge, creating the RSA object failed.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArray decryptedTextByteArray;
|
||||||
|
if (decryptionStatus > -1) {
|
||||||
|
decryptedTextByteArray = QByteArray(reinterpret_cast<const char*>(decryptedText), decryptionStatus);
|
||||||
|
}
|
||||||
|
int decryptedTextByteArraySize = decryptedTextByteArray.size();
|
||||||
|
int certIDSize = certID.size();
|
||||||
|
// setup the packet
|
||||||
|
if (challengeOriginatedFromClient) {
|
||||||
|
auto decryptedTextPacket = NLPacket::create(PacketType::ChallengeOwnershipReply,
|
||||||
|
certIDSize + decryptedTextByteArraySize + challengingNodeUUIDByteArraySize + 3 * sizeof(int),
|
||||||
|
true);
|
||||||
|
|
||||||
|
decryptedTextPacket->writePrimitive(certIDSize);
|
||||||
|
decryptedTextPacket->writePrimitive(decryptedTextByteArraySize);
|
||||||
|
decryptedTextPacket->writePrimitive(challengingNodeUUIDByteArraySize);
|
||||||
|
decryptedTextPacket->write(certID);
|
||||||
|
decryptedTextPacket->write(decryptedTextByteArray);
|
||||||
|
decryptedTextPacket->write(challengingNodeUUID);
|
||||||
|
|
||||||
|
qCDebug(commerce) << "Sending ChallengeOwnershipReply Packet containing decrypted text" << decryptedTextByteArray << "for CertID" << certID;
|
||||||
|
|
||||||
|
nodeList->sendPacket(std::move(decryptedTextPacket), *sendingNode);
|
||||||
|
} else {
|
||||||
|
auto decryptedTextPacket = NLPacket::create(PacketType::ChallengeOwnership, certIDSize + decryptedTextByteArraySize + 2 * sizeof(int), true);
|
||||||
|
|
||||||
|
decryptedTextPacket->writePrimitive(certIDSize);
|
||||||
|
decryptedTextPacket->writePrimitive(decryptedTextByteArraySize);
|
||||||
|
decryptedTextPacket->write(certID);
|
||||||
|
decryptedTextPacket->write(decryptedTextByteArray);
|
||||||
|
|
||||||
|
qCDebug(commerce) << "Sending ChallengeOwnership Packet containing decrypted text" << decryptedTextByteArray << "for CertID" << certID;
|
||||||
|
|
||||||
|
nodeList->sendPacket(std::move(decryptedTextPacket), *sendingNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (decryptionStatus == -1) {
|
||||||
|
qCDebug(commerce) << "During entity ownership challenge, decrypting the encrypted text failed.";
|
||||||
|
long error = ERR_get_error();
|
||||||
|
if (error != 0) {
|
||||||
|
const char* error_str = ERR_error_string(error, NULL);
|
||||||
|
qCWarning(entities) << "RSA error:" << error_str;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wallet::account() {
|
void Wallet::account() {
|
||||||
|
|
Loading…
Reference in a new issue