mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-04 04:24:47 +02:00
It's working!
This commit is contained in:
parent
5efa920712
commit
0e96fc5cab
3 changed files with 14 additions and 15 deletions
|
@ -725,17 +725,18 @@ void Wallet::handleChallengeOwnershipPacket(QSharedPointer<ReceivedMessage> pack
|
||||||
QByteArray certID = packet->read(certIDByteArraySize);
|
QByteArray certID = packet->read(certIDByteArraySize);
|
||||||
QByteArray encryptedText = packet->read(encryptedTextByteArraySize);
|
QByteArray encryptedText = packet->read(encryptedTextByteArraySize);
|
||||||
|
|
||||||
const auto encryptedTextBuf = reinterpret_cast<const unsigned char*>(encryptedText.constData());
|
|
||||||
const unsigned int textLength = (int)strlen((char*)encryptedTextBuf);
|
|
||||||
|
|
||||||
RSA* rsa = readKeys(keyFilePath().toStdString().c_str());
|
RSA* rsa = readKeys(keyFilePath().toStdString().c_str());
|
||||||
|
|
||||||
if (rsa) {
|
if (rsa) {
|
||||||
const int decryptionStatus = RSA_private_decrypt(textLength, encryptedTextBuf, decryptedText, rsa, RSA_PKCS1_OAEP_PADDING);
|
const int decryptionStatus = RSA_private_decrypt(encryptedTextByteArraySize,
|
||||||
|
reinterpret_cast<const unsigned char*>(encryptedText.constData()),
|
||||||
|
decryptedText,
|
||||||
|
rsa,
|
||||||
|
RSA_PKCS1_OAEP_PADDING);
|
||||||
|
|
||||||
long error = ERR_get_error();
|
long error = ERR_get_error();
|
||||||
const char* error_str = ERR_error_string(error, NULL);
|
const char* error_str = ERR_error_string(error, NULL);
|
||||||
qDebug() << "ZRF HERE\n\nEncrypted Text:" << encryptedTextBuf << "\nEncrypted Text Length:" << textLength << "\nDecrypted Text:" << decryptedText << "\nError:" << error_str;
|
qDebug() << "ZRF HERE\n\nEncrypted Text:" << encryptedText << "\nEncrypted Text ByteArray Size:" << encryptedTextByteArraySize << "\nEncrypted Text Length:" << encryptedText.length() << "\nDecrypted Text:" << decryptedText << "\nError:" << error_str;
|
||||||
|
|
||||||
RSA_free(rsa);
|
RSA_free(rsa);
|
||||||
|
|
||||||
|
|
|
@ -1160,7 +1160,7 @@ void EntityTree::startPendingTransferStatusTimer(const QString& certID, const En
|
||||||
transferStatusRetryTimer->start(90000);
|
transferStatusRetryTimer->start(90000);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString EntityTree::computeEncryptedNonce(const QString& certID, const QString ownerKey) {
|
QByteArray EntityTree::computeEncryptedNonce(const QString& certID, const QString ownerKey) {
|
||||||
QUuid nonce = QUuid::createUuid();
|
QUuid nonce = QUuid::createUuid();
|
||||||
const auto text = reinterpret_cast<const unsigned char*>(qPrintable(nonce.toString()));
|
const auto text = reinterpret_cast<const unsigned char*>(qPrintable(nonce.toString()));
|
||||||
const unsigned int textLength = nonce.toString().length();
|
const unsigned int textLength = nonce.toString().length();
|
||||||
|
@ -1182,6 +1182,8 @@ QString EntityTree::computeEncryptedNonce(const QString& certID, const QString o
|
||||||
QWriteLocker locker(&_certNonceMapLock);
|
QWriteLocker locker(&_certNonceMapLock);
|
||||||
_certNonceMap.insert(certID, nonce);
|
_certNonceMap.insert(certID, nonce);
|
||||||
|
|
||||||
|
qDebug() << "ZRF HERE\n\nEncrypted Text:" << encryptedText << "\nEncrypted Text Length:" << encryptedText.length();
|
||||||
|
|
||||||
return encryptedText;
|
return encryptedText;
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
|
@ -1251,26 +1253,22 @@ void EntityTree::validatePop(const QString& certID, const EntityItemID& entityIt
|
||||||
} else {
|
} else {
|
||||||
// Second, challenge ownership of the PoP cert
|
// Second, challenge ownership of the PoP cert
|
||||||
// 1. Encrypt a nonce with the owner's public key
|
// 1. Encrypt a nonce with the owner's public key
|
||||||
QString encryptedText = computeEncryptedNonce(certID, jsonObject["transfer_recipient_key"].toString());
|
QByteArray encryptedText = computeEncryptedNonce(certID, jsonObject["transfer_recipient_key"].toString());
|
||||||
|
|
||||||
if (encryptedText == "") {
|
if (encryptedText == "") {
|
||||||
qCDebug(entities) << "CRITICAL ERROR: Couldn't compute encrypted nonce. Deleting entity...";
|
qCDebug(entities) << "CRITICAL ERROR: Couldn't compute encrypted nonce. Deleting entity...";
|
||||||
deleteEntity(entityItemID, true);
|
deleteEntity(entityItemID, true);
|
||||||
QWriteLocker locker(&_recentlyDeletedEntitiesLock);
|
|
||||||
_recentlyDeletedEntityItemIDs.insert(usecTimestampNow(), entityItemID);
|
|
||||||
} else {
|
} else {
|
||||||
// 2. Send the encrypted text to the rezzing avatar's node
|
// 2. Send the encrypted text to the rezzing avatar's node
|
||||||
QByteArray certIDByteArray = certID.toUtf8();
|
QByteArray certIDByteArray = certID.toUtf8();
|
||||||
int certIDByteArraySize = certIDByteArray.size();
|
int certIDByteArraySize = certIDByteArray.size();
|
||||||
QByteArray encryptedTextByteArray = encryptedText.toUtf8();
|
|
||||||
int encryptedTextByteArraySize = encryptedTextByteArray.size();
|
|
||||||
auto challengeOwnershipPacket = NLPacket::create(PacketType::ChallengeOwnership,
|
auto challengeOwnershipPacket = NLPacket::create(PacketType::ChallengeOwnership,
|
||||||
certIDByteArraySize + encryptedTextByteArraySize + 2 * sizeof(int),
|
certIDByteArraySize + encryptedText.length() + 2 * sizeof(int),
|
||||||
true);
|
true);
|
||||||
challengeOwnershipPacket->writePrimitive(certIDByteArraySize);
|
challengeOwnershipPacket->writePrimitive(certIDByteArraySize);
|
||||||
challengeOwnershipPacket->writePrimitive(encryptedTextByteArraySize);
|
challengeOwnershipPacket->writePrimitive(encryptedText.length());
|
||||||
challengeOwnershipPacket->write(certIDByteArray);
|
challengeOwnershipPacket->write(certIDByteArray);
|
||||||
challengeOwnershipPacket->write(encryptedTextByteArray);
|
challengeOwnershipPacket->write(encryptedText);
|
||||||
nodeList->sendPacket(std::move(challengeOwnershipPacket), *senderNode);
|
nodeList->sendPacket(std::move(challengeOwnershipPacket), *senderNode);
|
||||||
|
|
||||||
// 3. Kickoff a 10-second timeout timer that deletes the entity if we don't get an ownership response in time
|
// 3. Kickoff a 10-second timeout timer that deletes the entity if we don't get an ownership response in time
|
||||||
|
|
|
@ -385,7 +385,7 @@ protected:
|
||||||
Q_INVOKABLE void startPendingTransferStatusTimer(const QString& certID, const EntityItemID& entityItemID, const SharedNodePointer& senderNode);
|
Q_INVOKABLE void startPendingTransferStatusTimer(const QString& certID, const EntityItemID& entityItemID, const SharedNodePointer& senderNode);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString computeEncryptedNonce(const QString& certID, const QString ownerKey);
|
QByteArray computeEncryptedNonce(const QString& certID, const QString ownerKey);
|
||||||
bool verifyDecryptedNonce(const QString& certID, const QString& decryptedNonce);
|
bool verifyDecryptedNonce(const QString& certID, const QString& decryptedNonce);
|
||||||
void validatePop(const QString& certID, const EntityItemID& entityItemID, const SharedNodePointer& senderNode, bool isRetryingValidation);
|
void validatePop(const QString& certID, const EntityItemID& entityItemID, const SharedNodePointer& senderNode, bool isRetryingValidation);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue