debug
This commit is contained in:
parent
a66d2c97e0
commit
c0d4dd741c
|
@ -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.activity_create_private_chat.viewPager
|
||||||
import kotlinx.android.synthetic.main.fragment_enter_public_key.*
|
import kotlinx.android.synthetic.main.fragment_enter_public_key.*
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
|
import nl.komponents.kovenant.ui.failUi
|
||||||
import org.session.libsession.snode.SnodeAPI
|
import org.session.libsession.snode.SnodeAPI
|
||||||
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
||||||
import org.thoughtcrime.securesms.conversation.ConversationActivity
|
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.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragmentDelegate
|
||||||
import org.session.libsession.utilities.recipients.Recipient
|
import org.session.libsession.utilities.recipients.Recipient
|
||||||
import org.session.libsession.utilities.TextSecurePreferences
|
import org.session.libsession.utilities.TextSecurePreferences
|
||||||
|
import org.session.libsession.utilities.Util
|
||||||
import org.session.libsignal.utilities.PublicKeyValidation
|
import org.session.libsignal.utilities.PublicKeyValidation
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,7 +85,7 @@ class CreatePrivateChatActivity : PassphraseRequiredActionBarActivity(), ScanQRC
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createPrivateChatIfPossible(onsNameOrPublicKey: String) {
|
fun createPrivateChatIfPossible(onsNameOrPublicKey: String) {
|
||||||
if (!PublicKeyValidation.isValid(onsNameOrPublicKey)) {
|
if (PublicKeyValidation.isValid(onsNameOrPublicKey)) {
|
||||||
createPrivateChat(onsNameOrPublicKey)
|
createPrivateChat(onsNameOrPublicKey)
|
||||||
} else {
|
} else {
|
||||||
// This could be an ONS name
|
// This could be an ONS name
|
||||||
|
@ -91,7 +93,7 @@ class CreatePrivateChatActivity : PassphraseRequiredActionBarActivity(), ScanQRC
|
||||||
SnodeAPI.getSessionIDFor(onsNameOrPublicKey).success { hexEncodedPublicKey ->
|
SnodeAPI.getSessionIDFor(onsNameOrPublicKey).success { hexEncodedPublicKey ->
|
||||||
hideLoader()
|
hideLoader()
|
||||||
this.createPrivateChat(hexEncodedPublicKey)
|
this.createPrivateChat(hexEncodedPublicKey)
|
||||||
}.fail { exception ->
|
}.failUi { exception ->
|
||||||
hideLoader()
|
hideLoader()
|
||||||
var message = "Please check the Session ID or ONS name and try again."
|
var message = "Please check the Session ID or ONS name and try again."
|
||||||
exception.localizedMessage?.let {
|
exception.localizedMessage?.let {
|
||||||
|
|
|
@ -182,7 +182,7 @@ object SnodeAPI {
|
||||||
"endpoint" to "ons_resolve",
|
"endpoint" to "ons_resolve",
|
||||||
"params" to mapOf( "type" to 0, "name_hash" to base64EncodedNameHash )
|
"params" to mapOf( "type" to 0, "name_hash" to base64EncodedNameHash )
|
||||||
)
|
)
|
||||||
val promises = (0..validationCount).map {
|
val promises = (1..validationCount).map {
|
||||||
getRandomSnode().bind { snode ->
|
getRandomSnode().bind { snode ->
|
||||||
invoke(Snode.Method.OxenDaemonRPCCall, snode, null, parameters)
|
invoke(Snode.Method.OxenDaemonRPCCall, snode, null, parameters)
|
||||||
}
|
}
|
||||||
|
@ -193,26 +193,25 @@ object SnodeAPI {
|
||||||
val intermediate = json["result"] as? Map<*, *>
|
val intermediate = json["result"] as? Map<*, *>
|
||||||
val hexEncodedCiphertext = intermediate?.get("encrypted_value") as? String
|
val hexEncodedCiphertext = intermediate?.get("encrypted_value") as? String
|
||||||
if (hexEncodedCiphertext != null) {
|
if (hexEncodedCiphertext != null) {
|
||||||
|
val ciphertext = Hex.fromStringCondensed(hexEncodedCiphertext)
|
||||||
val isArgon2Based = (intermediate["nonce"] == null)
|
val isArgon2Based = (intermediate["nonce"] == null)
|
||||||
if (isArgon2Based) {
|
if (isArgon2Based) {
|
||||||
// Handle old Argon2-based encryption used before HF16
|
// Handle old Argon2-based encryption used before HF16
|
||||||
val salt = ByteArray(PwHash.SALTBYTES)
|
val salt = ByteArray(PwHash.SALTBYTES)
|
||||||
val key: String
|
val key: ByteArray
|
||||||
val nonce = ByteArray(SecretBox.NONCEBYTES)
|
val nonce = ByteArray(SecretBox.NONCEBYTES)
|
||||||
val sessionID: String
|
val sessionIDAsData = ByteArray(sessionIDByteCount)
|
||||||
try {
|
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) {
|
} catch (e: SodiumException) {
|
||||||
deferred.reject(Error.HashingFailed)
|
deferred.reject(Error.HashingFailed)
|
||||||
return@success
|
return@success
|
||||||
}
|
}
|
||||||
try {
|
if (!sodium.cryptoSecretBoxOpenEasy(sessionIDAsData, ciphertext, ciphertext.size.toLong(), nonce, key)) {
|
||||||
sessionID = sodium.cryptoSecretBoxOpenEasy(hexEncodedCiphertext, nonce, Key.fromHexString(key))
|
|
||||||
} catch (e: SodiumException) {
|
|
||||||
deferred.reject(Error.DecryptionFailed)
|
deferred.reject(Error.DecryptionFailed)
|
||||||
return@success
|
return@success
|
||||||
}
|
}
|
||||||
sessionIDs.add(sessionID)
|
sessionIDs.add(Hex.toStringCondensed(sessionIDAsData))
|
||||||
} else {
|
} else {
|
||||||
val hexEncodedNonce = intermediate["nonce"] as? String
|
val hexEncodedNonce = intermediate["nonce"] as? String
|
||||||
if (hexEncodedNonce == null) {
|
if (hexEncodedNonce == null) {
|
||||||
|
|
Loading…
Reference in New Issue