Skip to content

Commit

Permalink
changes after merge with main
Browse files Browse the repository at this point in the history
  • Loading branch information
jakub-rdx committed Jun 25, 2024
1 parent f677081 commit 89f7ae8
Show file tree
Hide file tree
Showing 21 changed files with 14 additions and 133 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.babylon.wallet.android

import Constants
import androidx.compose.ui.graphics.Color
import com.babylon.wallet.android.di.coroutines.ApplicationScope
import com.babylon.wallet.android.utils.Constants
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/babylon/wallet/android/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,9 @@ class MainActivity : FragmentActivity() {
}
}

override fun onNewIntent(intent: Intent?) {
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
intent?.data?.let { viewModel.handleDeepLink(it) }
intent.data?.let { viewModel.handleDeepLink(it) }
}

private fun setSplashExitAnimation(splashScreen: SplashScreen) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.babylon.wallet.android.data.dapp

import Constants
import com.babylon.wallet.android.data.dapp.model.IncompatibleRequestVersionException
import com.babylon.wallet.android.data.dapp.model.LedgerInteractionResponse
import com.babylon.wallet.android.data.dapp.model.toDomainModel
import com.babylon.wallet.android.domain.RadixWalletException
import com.babylon.wallet.android.domain.model.IncomingMessage
import com.babylon.wallet.android.utils.Constants
import com.radixdlt.sargon.DappToWalletInteractionUnvalidated
import com.radixdlt.sargon.DappWalletInteractionErrorType
import com.radixdlt.sargon.RadixConnectPassword
Expand Down Expand Up @@ -146,7 +146,7 @@ class PeerdroidClientImpl @Inject constructor(
if (interactionVersion != Constants.WALLET_INTERACTION_VERSION) {
throw IncompatibleRequestVersionException(
requestVersion = interactionVersion,
requestId = dappInteraction.interactionId.toString()
requestId = dappInteraction.interactionId
)
}
dappInteraction.toDomainModel(remoteEntityId = IncomingMessage.RemoteEntityID.ConnectorId(remoteConnectorId)).getOrThrow()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import com.babylon.wallet.android.data.gateway.generated.models.StateEntityDetai
import com.babylon.wallet.android.data.gateway.generated.models.StateEntityDetailsRequest
import com.babylon.wallet.android.di.ShortTimeoutStateApi
import com.babylon.wallet.android.domain.model.AccountWithOnLedgerStatus
import com.babylon.wallet.android.utils.Constants
import com.radixdlt.sargon.Account
import com.radixdlt.sargon.AccountAddress
import com.radixdlt.sargon.DepositRule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import com.babylon.wallet.android.presentation.common.OneOffEventHandler
import com.babylon.wallet.android.presentation.common.OneOffEventHandlerImpl
import com.babylon.wallet.android.presentation.common.StateViewModel
import com.babylon.wallet.android.presentation.common.UiState
import com.babylon.wallet.android.utils.Constants
import com.radixdlt.sargon.Account
import com.radixdlt.sargon.DerivationPathScheme
import com.radixdlt.sargon.DisplayName
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.babylon.wallet.android.presentation.account.createaccount

import Constants.ACCOUNT_NAME_MAX_LENGTH
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.babylon.wallet.android.domain.usecases.CreateAccountUseCase
Expand All @@ -14,7 +15,6 @@ import com.babylon.wallet.android.presentation.common.UiMessage
import com.babylon.wallet.android.presentation.common.UiState
import com.babylon.wallet.android.utils.AppEvent
import com.babylon.wallet.android.utils.AppEventBus
import com.babylon.wallet.android.utils.Constants.ACCOUNT_NAME_MAX_LENGTH
import com.radixdlt.sargon.Account
import com.radixdlt.sargon.AccountAddress
import com.radixdlt.sargon.DisplayName
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.babylon.wallet.android.presentation.account.settings

import Constants.ACCOUNT_NAME_MAX_LENGTH
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.babylon.wallet.android.BuildConfig
Expand All @@ -14,7 +15,6 @@ import com.babylon.wallet.android.presentation.common.UiMessage
import com.babylon.wallet.android.presentation.common.UiState
import com.babylon.wallet.android.utils.AppEvent
import com.babylon.wallet.android.utils.AppEventBus
import com.babylon.wallet.android.utils.Constants.ACCOUNT_NAME_MAX_LENGTH
import com.radixdlt.sargon.Account
import com.radixdlt.sargon.AccountAddress
import com.radixdlt.sargon.DepositRule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import com.babylon.wallet.android.designsystem.composable.RadixTextButton
import com.babylon.wallet.android.designsystem.theme.RadixTheme
import com.babylon.wallet.android.presentation.incompatibleprofile.IncompatibleProfileViewModel.Event
import com.babylon.wallet.android.presentation.ui.RadixWalletPreviewTheme
import com.babylon.wallet.android.utils.Constants
import com.babylon.wallet.android.utils.openEmail

const val ROUTE_INCOMPATIBLE_PROFILE = "incompatible_profile_route"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import com.babylon.wallet.android.presentation.common.StateViewModel
import com.babylon.wallet.android.presentation.common.UiMessage
import com.babylon.wallet.android.presentation.common.UiState
import com.babylon.wallet.android.utils.CanSignInToGoogle
import com.babylon.wallet.android.utils.Constants
import com.radixdlt.sargon.Header
import com.radixdlt.sargon.Timestamp
import dagger.hilt.android.lifecycle.HiltViewModel
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.babylon.wallet.android.presentation.settings

import Constants.RADIX_SUPPORT_EMAIL_ADDRESS
import Constants.RADIX_SUPPORT_EMAIL_SUBJECT
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import com.babylon.wallet.android.R
import com.babylon.wallet.android.domain.model.SecurityProblem
import com.babylon.wallet.android.presentation.ui.composables.DSR
import com.babylon.wallet.android.utils.Constants.RADIX_SUPPORT_EMAIL_ADDRESS
import com.babylon.wallet.android.utils.Constants.RADIX_SUPPORT_EMAIL_SUBJECT
import kotlinx.collections.immutable.ImmutableSet
import kotlinx.collections.immutable.persistentSetOf

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import com.babylon.wallet.android.presentation.settings.SettingsItem.TopLevelSet
import com.babylon.wallet.android.presentation.settings.SettingsItem.TopLevelSettings.LinkToConnector
import com.babylon.wallet.android.presentation.settings.SettingsItem.TopLevelSettings.Personas
import com.babylon.wallet.android.presentation.settings.SettingsItem.TopLevelSettings.Preferences
import com.babylon.wallet.android.utils.Constants
import com.radixdlt.sargon.SargonBuildInformation
import com.radixdlt.sargon.extensions.Sargon
import dagger.hilt.android.lifecycle.HiltViewModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.babylon.wallet.android.presentation.settings.debug

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.babylon.wallet.android.utils.Constants
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.SharingStarted
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ import com.babylon.wallet.android.presentation.ui.composables.RadixSnackbarHost
import com.babylon.wallet.android.presentation.ui.composables.SimpleAccountCard
import com.babylon.wallet.android.presentation.ui.composables.SnackbarUIMessage
import com.babylon.wallet.android.presentation.ui.modifier.throttleClickable
import com.babylon.wallet.android.utils.Constants
import com.babylon.wallet.android.utils.biometricAuthenticateSuspend
import com.babylon.wallet.android.utils.formattedSpans
import com.radixdlt.sargon.Account
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import com.babylon.wallet.android.presentation.common.UiMessage
import com.babylon.wallet.android.presentation.common.UiState
import com.babylon.wallet.android.utils.AppEvent
import com.babylon.wallet.android.utils.AppEventBus
import com.babylon.wallet.android.utils.Constants
import com.radixdlt.sargon.Account
import com.radixdlt.sargon.FactorSource
import com.radixdlt.sargon.MnemonicWithPassphrase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

package com.babylon.wallet.android.presentation.settings.troubleshooting.importlegacywallet

import Constants.ACCOUNT_NAME_MAX_LENGTH
import Constants.DELAY_300_MS
import androidx.lifecycle.viewModelScope
import com.babylon.wallet.android.data.dapp.LedgerMessenger
import com.babylon.wallet.android.data.dapp.model.Curve
Expand All @@ -22,8 +24,6 @@ import com.babylon.wallet.android.presentation.model.LedgerDeviceUiModel
import com.babylon.wallet.android.presentation.settings.securitycenter.ledgerhardwarewallets.AddLedgerDeviceUiState
import com.babylon.wallet.android.utils.AppEvent
import com.babylon.wallet.android.utils.AppEventBus
import com.babylon.wallet.android.utils.Constants.ACCOUNT_NAME_MAX_LENGTH
import com.babylon.wallet.android.utils.Constants.DELAY_300_MS
import com.radixdlt.sargon.FactorSource
import com.radixdlt.sargon.FactorSourceId
import com.radixdlt.sargon.HierarchicalDeterministicPublicKey
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.babylon.wallet.android.presentation.wallet

import Constants.RADIX_START_PAGE_URL
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
Expand Down Expand Up @@ -58,7 +59,6 @@ import com.babylon.wallet.android.presentation.ui.composables.actionableaddress.
import com.babylon.wallet.android.presentation.ui.composables.assets.TotalFiatBalanceView
import com.babylon.wallet.android.presentation.ui.composables.assets.TotalFiatBalanceViewToggle
import com.babylon.wallet.android.presentation.ui.modifier.throttleClickable
import com.babylon.wallet.android.utils.Constants.RADIX_START_PAGE_URL
import com.babylon.wallet.android.utils.biometricAuthenticateSuspend
import com.babylon.wallet.android.utils.openUrl
import com.radixdlt.sargon.Account
Expand Down
10 changes: 0 additions & 10 deletions app/src/main/java/com/babylon/wallet/android/utils/Constants.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
package com.babylon.wallet.android.utils

object Constants {
const val SNACKBAR_SHOW_DURATION_MS = 2000L
const val VM_STOP_TIMEOUT_MS = 5000L
Expand All @@ -10,14 +8,6 @@ object Constants {
const val MAX_ITEMS_PER_ENTITY_DETAILS_REQUEST = 20
const val WALLET_INTERACTION_VERSION = 2L

object RadixMobileConnect {
const val CONNECT_URL_PARAM_PUBLIC_KEY = "publicKey"
const val CONNECT_URL_PARAM_SESSION_ID = "sessionId"
const val CONNECT_URL_PARAM_ORIGIN = "origin"
const val CONNECT_URL_PARAM_INTERACTION_ID = "interactionId"
const val CONNECT_URL_PARAM_BROWSER = "browser"
}

const val RADIX_SUPPORT_EMAIL_ADDRESS = "[email protected]"
const val RADIX_SUPPORT_EMAIL_SUBJECT = "Customer Support Case"
}
1 change: 0 additions & 1 deletion core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ dependencies {
implementation libs.kotlinxSerialization
implementation libs.firebaseCrashlytics
implementation libs.immutableCollections
implementation libs.crypto

// Datastore
implementation libs.datastorePreferences
Expand Down
30 changes: 0 additions & 30 deletions core/src/main/java/rdx/works/core/EncryptionHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,6 @@ import android.security.keystore.KeyProperties.KEY_ALGORITHM_AES
import android.security.keystore.KeyProperties.PURPOSE_DECRYPT
import android.security.keystore.KeyProperties.PURPOSE_ENCRYPT
import android.util.Base64
import org.bouncycastle.crypto.AsymmetricCipherKeyPair
import org.bouncycastle.crypto.agreement.X25519Agreement
import org.bouncycastle.crypto.generators.X25519KeyPairGenerator
import org.bouncycastle.crypto.params.X25519KeyGenerationParameters
import org.bouncycastle.crypto.params.X25519PrivateKeyParameters
import org.bouncycastle.crypto.params.X25519PublicKeyParameters
import rdx.works.core.KeystoreManager.Companion.KEY_ALIAS_MNEMONIC
import rdx.works.core.KeystoreManager.Companion.KEY_ALIAS_PROFILE
import rdx.works.core.KeystoreManager.Companion.PROVIDER
Expand Down Expand Up @@ -200,27 +194,3 @@ fun String.decodeHex(): ByteArray {
.map { it.toInt(16).toByte() }
.toByteArray()
}

fun generateX25519KeyPair(): Result<Pair<String, String>> {
return runCatching {
val generator = X25519KeyPairGenerator()
val params = X25519KeyGenerationParameters(SecureRandom())
generator.init(params)
val keypair1: AsymmetricCipherKeyPair = generator.generateKeyPair()
val priv1 = keypair1.private as X25519PrivateKeyParameters
val pub1 = keypair1.public as X25519PublicKeyParameters
Pair(priv1.encoded.toHexString(), pub1.encoded.toHexString())
}
}

fun generateX25519SharedSecret(privateKeyCompressed: ByteArray, publicKeyCompressed: ByteArray): Result<String> {
return runCatching {
val agreement = X25519Agreement().apply {
init(X25519PrivateKeyParameters(privateKeyCompressed))
}

val secret = ByteArray(agreement.agreementSize)
agreement.calculateAgreement(X25519PublicKeyParameters(publicKeyCompressed), secret, 0)
secret.toHexString()
}
}
68 changes: 0 additions & 68 deletions core/src/test/java/com/babylon/wallet/core/EncryptionHelperTest.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
package com.babylon.wallet.core

import com.radixdlt.sargon.extensions.hexToBagOfBytes
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import org.junit.Assert
import org.junit.Test
import rdx.works.core.decodeHex
import rdx.works.core.decrypt
import rdx.works.core.encrypt
import rdx.works.core.generateX25519KeyPair
import rdx.works.core.generateX25519SharedSecret
import rdx.works.core.toByteArray
import rdx.works.core.toHexString
import java.nio.ByteBuffer
Expand Down Expand Up @@ -57,37 +51,6 @@ class EncryptionHelperTest {
Assert.assertNotEquals(encryptedMessage1, encryptedMessage2)
}

@Test
fun `test x25519 key exchange and using shared secret with AES`() {
val testString = "Hello Android"
val x25519TestVectors = generateX25519TestVectors()

val testVectors = Json.decodeFromString<List<X25519TestVector>>(x25519TestVectors)

testVectors.forEach {
val sharedSecret1 = generateX25519SharedSecret(
it.privateKey1.decodeHex(),
it.publicKey2.decodeHex()
).getOrThrow()

val sharedSecret2 = generateX25519SharedSecret(
it.privateKey2.decodeHex(),
it.publicKey1.decodeHex()
).getOrThrow()

Assert.assertEquals(it.sharedSecret, sharedSecret1)
Assert.assertEquals(it.sharedSecret, sharedSecret2)
val encryptedTestString = testString.toByteArray().encrypt(
withEncryptionKey = sharedSecret1.decodeHex()
).getOrThrow().toHexString()

val decryptedTestString = encryptedTestString.decodeHex().decrypt(
withEncryptionKey = sharedSecret2.decodeHex()
).getOrThrow().toString(UTF_8)
Assert.assertEquals(testString, decryptedTestString)
}
}

private fun getEncryptionKeyData(): ByteBuffer {
val byteBuffer = ByteBuffer.allocate(32)
for (i in 0..31) {
Expand All @@ -102,35 +65,4 @@ class EncryptionHelperTest {
return copy
}

private fun generateX25519TestVectors(): String {
val result = mutableListOf<X25519TestVector>()
repeat(10) {
val kp1 = generateX25519KeyPair().getOrThrow()
val kp2 = generateX25519KeyPair().getOrThrow()
val secret1 = generateX25519SharedSecret(kp1.first.decodeHex(), kp2.second.decodeHex()).getOrThrow()
val secret2 = generateX25519SharedSecret(kp2.first.decodeHex(), kp1.second.decodeHex()).getOrThrow()
if (secret1 != secret2) {
throw IllegalStateException("Secrets do not match")
}
result.add(
X25519TestVector(
kp1.first,
kp1.second,
kp2.first,
kp2.second,
secret1
)
)
}
return Json.encodeToString(result)
}

@Serializable
data class X25519TestVector(
val privateKey1: String,
val publicKey1: String,
val privateKey2: String,
val publicKey2: String,
val sharedSecret: String
)
}
6 changes: 2 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ turbine = "1.1.0"
zxing = "3.5.3"
apacheCommonsValidator = "1.9.0"
jsonAssert = "1.5.1"
firebaseCrashlytics = "19.0.1"
firebaseCrashlytics = "19.0.2"
appsFlyer = "6.14.2"
installReferrer = "2.2"
playServicesAuth = "21.2.0"
Expand All @@ -66,7 +66,7 @@ kotlinJvmPlugin = "2.0.0"
benManesVersionsPlugin = "0.51.0"
versionCatalogUpdatePlugin = "0.8.4"
googleServicesPlugin = "4.4.2"
firebaseCrashlyticsPlugin = "3.0.1"
firebaseCrashlyticsPlugin = "3.0.2"
hiltPlugin = "2.51.1"
sonarqubePlugin = "5.0.0.4638"
kspPlugin = "2.0.0-1.0.22"
Expand Down Expand Up @@ -95,7 +95,6 @@ splash = { module = "androidx.core:core-splashscreen", version.ref = "splash" }
immutableCollections = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version.ref = "immutableCollections" }
accompanistPagerIndicators = { module = "com.google.accompanist:accompanist-pager-indicators", version.ref = "accompanist" }
accompanistDrawablePainter = { module = "com.google.accompanist:accompanist-drawablepainter", version.ref = "accompanist" }
accompanistNavigationAnimation = { module = "com.google.accompanist:accompanist-navigation-animation", version.ref = "accompanist" }
accompanistPermissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" }
accompanistSystemUiController = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" }
accompanistPlaceholder = { module = "com.google.accompanist:accompanist-placeholder", version.ref = "accompanist" }
Expand All @@ -117,7 +116,6 @@ coilComposeGif = { module = "io.coil-kt:coil-gif", version.ref = "coilCompose" }
kotlinxSerialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
sargonAndroid = { module = "com.radixdlt.sargon:sargon-android", version.ref = "sargon" }
sargonDesktop = { module = "com.radixdlt.sargon:sargon-desktop-bins", version.ref = "sargon" }
crypto = { module = "org.bouncycastle:bcprov-jdk15to18", version.ref = "crypto" }
okhttpBom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttpBom" }
okhttp = { module = "com.squareup.okhttp3:okhttp" }
okhttpInterceptor = { module = "com.squareup.okhttp3:logging-interceptor" }
Expand Down

0 comments on commit 89f7ae8

Please sign in to comment.