From 16ff7b06db69496c9910534cc9edab1ced053111 Mon Sep 17 00:00:00 2001 From: Oscar Mira Date: Thu, 30 Jan 2025 14:21:57 +0100 Subject: [PATCH] lib: deprecate parseHex and use hexToByteArray instead --- .../im/molly/monero/demo/ui/AddWalletViewModel.kt | 10 ++++------ .../src/main/kotlin/im/molly/monero/util/HexFormat.kt | 11 ----------- .../test/kotlin/im/molly/monero/util/Base58Test.kt | 3 ++- 3 files changed, 6 insertions(+), 18 deletions(-) delete mode 100644 lib/android/src/main/kotlin/im/molly/monero/util/HexFormat.kt diff --git a/demo/android/src/main/kotlin/im/molly/monero/demo/ui/AddWalletViewModel.kt b/demo/android/src/main/kotlin/im/molly/monero/demo/ui/AddWalletViewModel.kt index 4f5b2e0..0122edb 100644 --- a/demo/android/src/main/kotlin/im/molly/monero/demo/ui/AddWalletViewModel.kt +++ b/demo/android/src/main/kotlin/im/molly/monero/demo/ui/AddWalletViewModel.kt @@ -12,14 +12,12 @@ import im.molly.monero.demo.data.WalletRepository import im.molly.monero.demo.data.model.DefaultMoneroNetwork import im.molly.monero.demo.data.model.RemoteNode import im.molly.monero.mnemonics.MoneroMnemonic -import im.molly.monero.util.parseHex -import im.molly.monero.util.toHex import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import java.time.LocalDate -@OptIn(ExperimentalCoroutinesApi::class) +@OptIn(ExperimentalCoroutinesApi::class, ExperimentalStdlibApi::class) class AddWalletViewModel( private val remoteNodeRepository: RemoteNodeRepository = AppModule.remoteNodeRepository, private val walletRepository: WalletRepository = AppModule.walletRepository, @@ -66,7 +64,7 @@ class AddWalletViewModel( MoneroMnemonic.recoverEntropy(words)?.use { mnemonicCode -> val secretKey = SecretKey(mnemonicCode.entropy) viewModelState.update { - it.copy(secretSpendKeyHex = secretKey.bytes.toHex()) + it.copy(secretSpendKeyHex = secretKey.bytes.toHexString()) } secretKey.destroy() return true @@ -85,7 +83,7 @@ class AddWalletViewModel( fun validateSecretSpendKeyHex(): Boolean = with(viewModelState.value) { return secretSpendKeyHex.length == 64 && runCatching { - secretSpendKeyHex.parseHex() + secretSpendKeyHex.hexToByteArray() }.isSuccess } @@ -125,7 +123,7 @@ class AddWalletViewModel( else -> RestorePoint.Genesis } - SecretKey(state.secretSpendKeyHex.parseHex()).use { secretSpendKey -> + SecretKey(state.secretSpendKeyHex.hexToByteArray()).use { secretSpendKey -> walletRepository.restoreWallet( state.network, state.walletName, diff --git a/lib/android/src/main/kotlin/im/molly/monero/util/HexFormat.kt b/lib/android/src/main/kotlin/im/molly/monero/util/HexFormat.kt deleted file mode 100644 index 0d55ea8..0000000 --- a/lib/android/src/main/kotlin/im/molly/monero/util/HexFormat.kt +++ /dev/null @@ -1,11 +0,0 @@ -package im.molly.monero.util - -fun CharSequence.parseHex(): ByteArray { - check(length % 2 == 0) { "Must have an even length" } - - return ByteArray(length / 2) { - Integer.parseInt(substring(it * 2, (it + 1) * 2), 16).toByte() - } -} - -fun ByteArray.toHex(): String = joinToString(separator = "") { "%02x".format(it) } diff --git a/lib/android/src/test/kotlin/im/molly/monero/util/Base58Test.kt b/lib/android/src/test/kotlin/im/molly/monero/util/Base58Test.kt index c92b8f4..e3c6e8d 100644 --- a/lib/android/src/test/kotlin/im/molly/monero/util/Base58Test.kt +++ b/lib/android/src/test/kotlin/im/molly/monero/util/Base58Test.kt @@ -4,6 +4,7 @@ import com.google.common.truth.Truth.assertThat import org.junit.Assert import org.junit.Test +@OptIn(ExperimentalStdlibApi::class) class Base58Test { // Test cases from monero unit_tests/base58.cpp @@ -134,7 +135,7 @@ class Base58Test { @Test fun `decode valid base58 strings`() { base58ToHex.forEach { (input, expected) -> - assertThat(input.decodeBase58()).isEqualTo(expected.parseHex()) + assertThat(input.decodeBase58()).isEqualTo(expected.hexToByteArray()) } }