diff --git a/app/src/main/java/org/session/libsession/messaging/file_server/FileServer.kt b/app/src/main/java/org/session/libsession/messaging/file_server/FileServer.kt index c4abf41298..de34f2407d 100644 --- a/app/src/main/java/org/session/libsession/messaging/file_server/FileServer.kt +++ b/app/src/main/java/org/session/libsession/messaging/file_server/FileServer.kt @@ -9,9 +9,9 @@ import org.session.libsession.utilities.serializable.HttpSerializer data class FileServer( @Serializable(with = HttpSerializer::class) val url: HttpUrl, - val publicKeyHex: String + val ed25519PublicKeyHex: String ) { - constructor(url: String, publicKeyHex: String) : this(url.toHttpUrl(), publicKeyHex) + constructor(url: String, ed25519PublicKeyHex: String) : this(url.toHttpUrl(), ed25519PublicKeyHex) } val HttpUrl.isOfficial: Boolean diff --git a/app/src/main/java/org/session/libsession/messaging/file_server/FileServerApi.kt b/app/src/main/java/org/session/libsession/messaging/file_server/FileServerApi.kt index c3aa6e34ee..e5128232f7 100644 --- a/app/src/main/java/org/session/libsession/messaging/file_server/FileServerApi.kt +++ b/app/src/main/java/org/session/libsession/messaging/file_server/FileServerApi.kt @@ -2,9 +2,9 @@ package org.session.libsession.messaging.file_server import android.util.Base64 import kotlinx.coroutines.CancellationException +import network.loki.messenger.libsession_util.Curve25519 +import network.loki.messenger.libsession_util.ED25519 import network.loki.messenger.libsession_util.util.BlindKeyAPI -import nl.komponents.kovenant.Promise -import nl.komponents.kovenant.functional.map import okhttp3.Headers.Companion.toHeaders import okhttp3.HttpUrl import okhttp3.MediaType.Companion.toMediaType @@ -15,6 +15,7 @@ import org.session.libsession.snode.OnionRequestAPI import org.session.libsession.snode.utilities.await import org.session.libsignal.utilities.ByteArraySlice import org.session.libsignal.utilities.HTTP +import org.session.libsignal.utilities.Hex import org.session.libsignal.utilities.JsonUtil import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.toHexString @@ -36,7 +37,7 @@ class FileServerApi @Inject constructor( val DEFAULT_FILE_SERVER: FileServer = FileServer( url = "http://filev2.getsession.org", - publicKeyHex = "da21e1d886c6fbaea313f75298bd64aab03a97ce985b46bb2dad9f2089c8ee59" + ed25519PublicKeyHex = "b8eef9821445ae16e2e97ef8aa6fe782fd11ad5253cd6723b281341dba22e371" ) } @@ -97,7 +98,10 @@ class FileServerApi @Inject constructor( val response = OnionRequestAPI.sendOnionRequest( request = requestBuilder.build(), server = request.fileServer.url.host, - x25519PublicKey = request.fileServer.publicKeyHex + x25519PublicKey = + Hex.toStringCondensed( + Curve25519.pubKeyFromED25519(Hex.fromStringCondensed(request.fileServer.ed25519PublicKeyHex)) + ) ).await() check(response.code in 200..299) { @@ -192,8 +196,8 @@ class FileServerApi @Inject constructor( ): HttpUrl { val urlFragment = sequenceOf( "d".takeIf { usesDeterministicEncryption }, - if (!fileServer.url.isOfficial || fileServer.publicKeyHex != DEFAULT_FILE_SERVER.publicKeyHex) { - "p=${fileServer.publicKeyHex}" + if (!fileServer.url.isOfficial || fileServer.ed25519PublicKeyHex != DEFAULT_FILE_SERVER.ed25519PublicKeyHex) { + "p=${fileServer.ed25519PublicKeyHex}" } else { null } @@ -254,7 +258,7 @@ class FileServerApi @Inject constructor( // We'll use the public key we get from the URL return URLParseResult( fileId = id, - fileServer = FileServer(url = fileServerUrl, publicKeyHex = fileServerPubKeyHex), + fileServer = FileServer(url = fileServerUrl, ed25519PublicKeyHex = fileServerPubKeyHex), usesDeterministicEncryption = deterministicEncryption ) } @@ -275,7 +279,7 @@ class FileServerApi @Inject constructor( fileId = id, fileServer = FileServer( url = fileServerUrl, - publicKeyHex = DEFAULT_FILE_SERVER.publicKeyHex + ed25519PublicKeyHex = DEFAULT_FILE_SERVER.ed25519PublicKeyHex ), usesDeterministicEncryption = deterministicEncryption ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/debugmenu/DebugMenuViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/debugmenu/DebugMenuViewModel.kt index 3be0858c2f..b88a47d3ea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/debugmenu/DebugMenuViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/debugmenu/DebugMenuViewModel.kt @@ -495,11 +495,11 @@ class DebugMenuViewModel @Inject constructor( private val TEST_FILE_SERVERS: List = listOf( FileServer( url = "http://potatofiles.getsession.org", - publicKeyHex = "fc097b06821c98a2db75ce02e521cef5fd9d3446e42e81d843c4c8c4e9260f48", + ed25519PublicKeyHex = "ff86dcd4b26d1bfec944c59859494248626d6428efc12168749d65a1b92f5e28", ), FileServer( url = "http://superduperfiles.oxen.io", - publicKeyHex = "16d6c60aebb0851de7e6f4dc0a4734671dbf80f73664c008596511454cb6576d", + ed25519PublicKeyHex = "929e33ded05e653fec04b49645117f51851f102a947e04806791be416ed76602", ) ) } diff --git a/app/src/test/java/org/session/libsession/messaging/file_server/FileServerApiTest.kt b/app/src/test/java/org/session/libsession/messaging/file_server/FileServerApiTest.kt index 92c75fcb00..ba148e2e26 100644 --- a/app/src/test/java/org/session/libsession/messaging/file_server/FileServerApiTest.kt +++ b/app/src/test/java/org/session/libsession/messaging/file_server/FileServerApiTest.kt @@ -28,7 +28,7 @@ class FileServerApiTest { usesDeterministicEncryption = true, fileServer = FileServer( url = "http://fileserver".toHttpUrl(), - publicKeyHex = "1234" + ed25519PublicKeyHex = "1234" ) ) ), @@ -40,7 +40,7 @@ class FileServerApiTest { usesDeterministicEncryption = true, fileServer = FileServer( url = "http://fileserver".toHttpUrl(), - publicKeyHex = "1234" + ed25519PublicKeyHex = "1234" ) ) ), @@ -52,7 +52,7 @@ class FileServerApiTest { usesDeterministicEncryption = false, fileServer = FileServer( url = "http://fileserver".toHttpUrl(), - publicKeyHex = "1234" + ed25519PublicKeyHex = "1234" ) ) ), @@ -73,7 +73,7 @@ class FileServerApiTest { usesDeterministicEncryption = false, fileServer = FileServer( "http://fileabc.getsession.org", - FileServerApi.DEFAULT_FILE_SERVER.publicKeyHex + FileServerApi.DEFAULT_FILE_SERVER.ed25519PublicKeyHex ) ), ),