From c0d4dd741cfb5c981927ebf58f3e3ba1f89d83ec Mon Sep 17 00:00:00 2001 From: ryanzhao Date: Fri, 28 May 2021 11:22:06 +1000 Subject: [PATCH] debug --- .../loki/activities/CreatePrivateChatActivity.kt | 6 ++++-- .../java/org/session/libsession/snode/SnodeAPI.kt | 15 +++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreatePrivateChatActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreatePrivateChatActivity.kt index eae640763..101a3a90b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreatePrivateChatActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreatePrivateChatActivity.kt @@ -19,6 +19,7 @@ import kotlinx.android.synthetic.main.activity_create_private_chat.tabLayout import kotlinx.android.synthetic.main.activity_create_private_chat.viewPager import kotlinx.android.synthetic.main.fragment_enter_public_key.* import network.loki.messenger.R +import nl.komponents.kovenant.ui.failUi import org.session.libsession.snode.SnodeAPI import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity import org.thoughtcrime.securesms.conversation.ConversationActivity @@ -29,6 +30,7 @@ import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragment import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragmentDelegate import org.session.libsession.utilities.recipients.Recipient import org.session.libsession.utilities.TextSecurePreferences +import org.session.libsession.utilities.Util import org.session.libsignal.utilities.PublicKeyValidation @@ -83,7 +85,7 @@ class CreatePrivateChatActivity : PassphraseRequiredActionBarActivity(), ScanQRC } fun createPrivateChatIfPossible(onsNameOrPublicKey: String) { - if (!PublicKeyValidation.isValid(onsNameOrPublicKey)) { + if (PublicKeyValidation.isValid(onsNameOrPublicKey)) { createPrivateChat(onsNameOrPublicKey) } else { // This could be an ONS name @@ -91,7 +93,7 @@ class CreatePrivateChatActivity : PassphraseRequiredActionBarActivity(), ScanQRC SnodeAPI.getSessionIDFor(onsNameOrPublicKey).success { hexEncodedPublicKey -> hideLoader() this.createPrivateChat(hexEncodedPublicKey) - }.fail { exception -> + }.failUi { exception -> hideLoader() var message = "Please check the Session ID or ONS name and try again." exception.localizedMessage?.let { diff --git a/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt b/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt index 5856633cb..78878c6d3 100644 --- a/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt +++ b/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt @@ -182,7 +182,7 @@ object SnodeAPI { "endpoint" to "ons_resolve", "params" to mapOf( "type" to 0, "name_hash" to base64EncodedNameHash ) ) - val promises = (0..validationCount).map { + val promises = (1..validationCount).map { getRandomSnode().bind { snode -> invoke(Snode.Method.OxenDaemonRPCCall, snode, null, parameters) } @@ -193,26 +193,25 @@ object SnodeAPI { val intermediate = json["result"] as? Map<*, *> val hexEncodedCiphertext = intermediate?.get("encrypted_value") as? String if (hexEncodedCiphertext != null) { + val ciphertext = Hex.fromStringCondensed(hexEncodedCiphertext) val isArgon2Based = (intermediate["nonce"] == null) if (isArgon2Based) { // Handle old Argon2-based encryption used before HF16 val salt = ByteArray(PwHash.SALTBYTES) - val key: String + val key: ByteArray val nonce = ByteArray(SecretBox.NONCEBYTES) - val sessionID: String + val sessionIDAsData = ByteArray(sessionIDByteCount) try { - key = sodium.cryptoPwHash(onsName, SecretBox.KEYBYTES, salt, PwHash.OPSLIMIT_MODERATE, PwHash.MEMLIMIT_MODERATE, PwHash.Alg.PWHASH_ALG_ARGON2ID13) + key = Key.fromHexString(sodium.cryptoPwHash(onsName, SecretBox.KEYBYTES, salt, PwHash.OPSLIMIT_MODERATE, PwHash.MEMLIMIT_MODERATE, PwHash.Alg.PWHASH_ALG_ARGON2ID13)).asBytes } catch (e: SodiumException) { deferred.reject(Error.HashingFailed) return@success } - try { - sessionID = sodium.cryptoSecretBoxOpenEasy(hexEncodedCiphertext, nonce, Key.fromHexString(key)) - } catch (e: SodiumException) { + if (!sodium.cryptoSecretBoxOpenEasy(sessionIDAsData, ciphertext, ciphertext.size.toLong(), nonce, key)) { deferred.reject(Error.DecryptionFailed) return@success } - sessionIDs.add(sessionID) + sessionIDs.add(Hex.toStringCondensed(sessionIDAsData)) } else { val hexEncodedNonce = intermediate["nonce"] as? String if (hexEncodedNonce == null) {