From e768beb9b1b36cb02239859a185783560d6c7270 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Tue, 14 May 2019 15:53:35 -0700 Subject: [PATCH] Allow for delayed challenges if salt is empty --- assignment-client/src/avatars/MixerAvatar.cpp | 30 +++- assignment-client/src/avatars/MixerAvatar.h | 3 +- .../resources/images/AvatarTheftBanner.png | Bin 49298 -> 42841 bytes interface/src/commerce/Ledger.cpp | 2 +- interface/src/commerce/Wallet.cpp | 165 ++++++++++-------- interface/src/commerce/Wallet.h | 2 + 6 files changed, 118 insertions(+), 84 deletions(-) diff --git a/assignment-client/src/avatars/MixerAvatar.cpp b/assignment-client/src/avatars/MixerAvatar.cpp index 8f5c60a7d9..f5d598a5cf 100644 --- a/assignment-client/src/avatars/MixerAvatar.cpp +++ b/assignment-client/src/avatars/MixerAvatar.cpp @@ -27,6 +27,12 @@ #include "ClientTraitsHandler.h" #include "AvatarLogging.h" +MixerAvatar::~MixerAvatar() { + if (_challengeTimeout) { + _challengeTimeout->deleteLater(); + } +} + void MixerAvatar::fetchAvatarFST() { _verifyState = nonCertified; @@ -229,6 +235,7 @@ void MixerAvatar::processCertifyEvents() { QJsonDocument responseJson = QJsonDocument::fromJson(_dynamicMarketResponse.toUtf8()); QString ownerPublicKey; bool ownerValid = false; + _pendingEvent = false; if (responseJson["status"].toString() == "success") { QJsonValue jsonData = responseJson["data"]; if (jsonData.isObject()) { @@ -251,6 +258,7 @@ void MixerAvatar::processCertifyEvents() { } sendOwnerChallenge(); _verifyState = challengeClient; + _pendingEvent = true; } else { _verifyState = error; } @@ -259,7 +267,6 @@ void MixerAvatar::processCertifyEvents() { "message:" << responseJson["message"].toString(); _verifyState = error; } - _pendingEvent = false; break; } @@ -295,6 +302,7 @@ void MixerAvatar::processCertifyEvents() { } case requestingOwner: + case challengeClient: { // Qt networking done on this thread: QCoreApplication::processEvents(); break; @@ -324,12 +332,21 @@ void MixerAvatar::sendOwnerChallenge() { nonceHash.addData(nonce); _challengeNonceHash = nonceHash.result(); - static constexpr int CHALLENGE_TIMEOUT_MS = 10 * 1000; // 10 s - _challengeTimeout.setInterval(CHALLENGE_TIMEOUT_MS); - _challengeTimeout.connect(&_challengeTimeout, &QTimer::timeout, [this]() { - _verifyState = verificationFailed; - _needsIdentityUpdate = true; + static constexpr int CHALLENGE_TIMEOUT_MS = 5 * 1000; // 5 s + if (_challengeTimeout) { + _challengeTimeout->deleteLater(); + } + _challengeTimeout = new QTimer(); + _challengeTimeout->setInterval(CHALLENGE_TIMEOUT_MS); + _challengeTimeout->setSingleShot(true); + _challengeTimeout->connect(_challengeTimeout, &QTimer::timeout, this, [this]() { + if (_verifyState == challengeClient) { + _pendingEvent = false; + _verifyState = verificationFailed; + _needsIdentityUpdate = true; + } }); + _challengeTimeout->start(); } void MixerAvatar::handleChallengeResponse(ReceivedMessage* response) { @@ -337,7 +354,6 @@ void MixerAvatar::handleChallengeResponse(ReceivedMessage* response) { QByteArray encryptedNonce; QMutexLocker certifyLocker(&_avatarCertifyLock); if (_verifyState == challengeClient) { - _challengeTimeout.stop(); _challengeResponse = response->readAll(); _verifyState = challengeResponse; _pendingEvent = true; diff --git a/assignment-client/src/avatars/MixerAvatar.h b/assignment-client/src/avatars/MixerAvatar.h index bafc398a02..e8d9c959db 100644 --- a/assignment-client/src/avatars/MixerAvatar.h +++ b/assignment-client/src/avatars/MixerAvatar.h @@ -21,6 +21,7 @@ class ResourceRequest; class MixerAvatar : public AvatarData { public: + ~MixerAvatar(); bool getNeedsHeroCheck() const { return _needsHeroCheck; } void setNeedsHeroCheck(bool needsHeroCheck = true) { _needsHeroCheck = needsHeroCheck; } @@ -53,7 +54,7 @@ private: QString _ownerPublicKey; QByteArray _challengeNonceHash; QByteArray _challengeResponse; - QTimer _challengeTimeout; + QTimer* _challengeTimeout { nullptr }; bool _needsIdentityUpdate { false }; bool generateFSTHash(); diff --git a/interface/resources/images/AvatarTheftBanner.png b/interface/resources/images/AvatarTheftBanner.png index 3dc76999e084f73842d4d9d53c2600599bda2bbe..6b538ed7b9132c9b06bcae2875a55fd411be75c7 100644 GIT binary patch literal 42841 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 diff --git a/interface/src/commerce/Ledger.cpp b/interface/src/commerce/Ledger.cpp index d72d896638..60fefa5878 100644 --- a/interface/src/commerce/Ledger.cpp +++ b/interface/src/commerce/Ledger.cpp @@ -317,13 +317,13 @@ void Ledger::accountSuccess(QNetworkReply* reply) { const QByteArray locker = data["locker"].toString().toUtf8(); bool isOverride = wallet->wasSoftReset(); - wallet->setSalt(salt); wallet->setIv(iv); wallet->setCKey(ckey); if (!locker.isEmpty()) { wallet->setWallet(locker); wallet->setPassphrase("ACCOUNT"); // We only locker wallets that have been converted to account-based auth. } + wallet->setSalt(salt); QString keyStatus = "ok"; QStringList localPublicKeys = wallet->listPublicKeys(); diff --git a/interface/src/commerce/Wallet.cpp b/interface/src/commerce/Wallet.cpp index ea2de73db3..127bca9eba 100644 --- a/interface/src/commerce/Wallet.cpp +++ b/interface/src/commerce/Wallet.cpp @@ -313,6 +313,8 @@ Wallet::Wallet() { walletScriptingInterface->setWalletStatus(status); }); + connect(ledger.data(), &Ledger::accountResult, this, &Wallet::sendChallengeOwnershipResponses); + auto accountManager = DependencyManager::get(); connect(accountManager.data(), &AccountManager::usernameChanged, this, [&]() { getWalletStatus(); @@ -823,88 +825,101 @@ bool Wallet::changePassphrase(const QString& newPassphrase) { } void Wallet::handleChallengeOwnershipPacket(QSharedPointer packet, SharedNodePointer sendingNode) { + _pendingChallenges.push_back(packet); + sendChallengeOwnershipResponses(); +} + +void Wallet::sendChallengeOwnershipResponses() { + if (_pendingChallenges.size() == 0 || getSalt().length() == 0) { + return; + } auto nodeList = DependencyManager::get(); - // With EC keys, we receive a nonce from the metaverse server, which is signed - // here with the private key and returned. Verification is done at server. - - bool challengeOriginatedFromClient = packet->getType() == PacketType::ChallengeOwnershipRequest; - int status; - int idByteArraySize; - int textByteArraySize; - int challengingNodeUUIDByteArraySize; - - packet->readPrimitive(&idByteArraySize); - packet->readPrimitive(&textByteArraySize); // returns a cast char*, size - if (challengeOriginatedFromClient) { - packet->readPrimitive(&challengingNodeUUIDByteArraySize); - } - - // "encryptedText" is now a series of random bytes, a nonce - QByteArray id = packet->read(idByteArraySize); - QByteArray text = packet->read(textByteArraySize); - QByteArray challengingNodeUUID; - if (challengeOriginatedFromClient) { - challengingNodeUUID = packet->read(challengingNodeUUIDByteArraySize); - } - EC_KEY* ec = readKeys(keyFilePath()); - QString sig; - if (ec) { - ERR_clear_error(); - sig = signWithKey(text, ""); // base64 signature, QByteArray cast (on return) to QString FIXME should pass ec as string so we can tell which key to sign with - status = 1; - } else { - qCDebug(commerce) << "During entity ownership challenge, creating the EC-signed nonce failed."; - status = -1; + for (const auto& packet: _pendingChallenges) { + + // With EC keys, we receive a nonce from the metaverse server, which is signed + // here with the private key and returned. Verification is done at server. + + QString sig; + bool challengeOriginatedFromClient = packet->getType() == PacketType::ChallengeOwnershipRequest; + int status; + int idByteArraySize; + int textByteArraySize; + int challengingNodeUUIDByteArraySize; + + packet->readPrimitive(&idByteArraySize); + packet->readPrimitive(&textByteArraySize); // returns a cast char*, size + if (challengeOriginatedFromClient) { + packet->readPrimitive(&challengingNodeUUIDByteArraySize); + } + + // "encryptedText" is now a series of random bytes, a nonce + QByteArray id = packet->read(idByteArraySize); + QByteArray text = packet->read(textByteArraySize); + QByteArray challengingNodeUUID; + if (challengeOriginatedFromClient) { + challengingNodeUUID = packet->read(challengingNodeUUIDByteArraySize); + } + + if (ec) { + ERR_clear_error(); + sig = signWithKey(text, ""); // base64 signature, QByteArray cast (on return) to QString FIXME should pass ec as string so we can tell which key to sign with + status = 1; + } else { + qCDebug(commerce) << "During entity ownership challenge, creating the EC-signed nonce failed."; + status = -1; + } + + QByteArray textByteArray; + if (status > -1) { + textByteArray = sig.toUtf8(); + } + textByteArraySize = textByteArray.size(); + int idSize = id.size(); + // setup the packet + Node& sendingNode = *nodeList->nodeWithLocalID(packet->getSourceID()); + if (challengeOriginatedFromClient) { + auto textPacket = NLPacket::create(PacketType::ChallengeOwnershipReply, + idSize + textByteArraySize + challengingNodeUUIDByteArraySize + 3 * sizeof(int), + true); + + textPacket->writePrimitive(idSize); + textPacket->writePrimitive(textByteArraySize); + textPacket->writePrimitive(challengingNodeUUIDByteArraySize); + textPacket->write(id); + textPacket->write(textByteArray); + textPacket->write(challengingNodeUUID); + + qCDebug(commerce) << "Sending ChallengeOwnershipReply Packet containing signed text" << textByteArray << "for id" << id; + + nodeList->sendPacket(std::move(textPacket), sendingNode); + } else { + auto textPacket = NLPacket::create(PacketType::ChallengeOwnership, idSize + textByteArraySize + 2 * sizeof(int), true); + + textPacket->writePrimitive(idSize); + textPacket->writePrimitive(textByteArraySize); + textPacket->write(id); + textPacket->write(textByteArray); + + qCDebug(commerce) << "Sending ChallengeOwnership Packet containing signed text" << textByteArray << "for id" << id; + + nodeList->sendPacket(std::move(textPacket), sendingNode); + } + + if (status == -1) { + qCDebug(commerce) << "During entity ownership challenge, signing the text failed."; + long error = ERR_get_error(); + if (error != 0) { + const char* error_str = ERR_error_string(error, NULL); + qCWarning(entities) << "EC error:" << error_str; + } + } } EC_KEY_free(ec); - - QByteArray textByteArray; - if (status > -1) { - textByteArray = sig.toUtf8(); - } - textByteArraySize = textByteArray.size(); - int idSize = id.size(); - // setup the packet - if (challengeOriginatedFromClient) { - auto textPacket = NLPacket::create(PacketType::ChallengeOwnershipReply, - idSize + textByteArraySize + challengingNodeUUIDByteArraySize + 3 * sizeof(int), - true); - - textPacket->writePrimitive(idSize); - textPacket->writePrimitive(textByteArraySize); - textPacket->writePrimitive(challengingNodeUUIDByteArraySize); - textPacket->write(id); - textPacket->write(textByteArray); - textPacket->write(challengingNodeUUID); - - qCDebug(commerce) << "Sending ChallengeOwnershipReply Packet containing signed text" << textByteArray << "for id" << id; - - nodeList->sendPacket(std::move(textPacket), *sendingNode); - } else { - auto textPacket = NLPacket::create(PacketType::ChallengeOwnership, idSize + textByteArraySize + 2 * sizeof(int), true); - - textPacket->writePrimitive(idSize); - textPacket->writePrimitive(textByteArraySize); - textPacket->write(id); - textPacket->write(textByteArray); - - qCDebug(commerce) << "Sending ChallengeOwnership Packet containing signed text" << textByteArray << "for id" << id; - - nodeList->sendPacket(std::move(textPacket), *sendingNode); - } - - if (status == -1) { - qCDebug(commerce) << "During entity ownership challenge, signing the text failed."; - long error = ERR_get_error(); - if (error != 0) { - const char* error_str = ERR_error_string(error, NULL); - qCWarning(entities) << "EC error:" << error_str; - } - } + _pendingChallenges.clear(); } void Wallet::account() { diff --git a/interface/src/commerce/Wallet.h b/interface/src/commerce/Wallet.h index fdd6b5e2a6..52b956dc5b 100644 --- a/interface/src/commerce/Wallet.h +++ b/interface/src/commerce/Wallet.h @@ -94,6 +94,7 @@ signals: private slots: void handleChallengeOwnershipPacket(QSharedPointer packet, SharedNodePointer sendingNode); + void sendChallengeOwnershipResponses(); private: friend class Ledger; @@ -104,6 +105,7 @@ private: QByteArray _ckey; QString* _passphrase { nullptr }; bool _isOverridingServer { false }; + std::vector> _pendingChallenges; bool writeWallet(const QString& newPassphrase = QString("")); void updateImageProvider();