mirror of
https://github.com/status-im/keycard-connect.git
synced 2025-02-10 18:06:40 +00:00
update deps
This commit is contained in:
parent
9c24dc8a5f
commit
feb533c549
@ -1,16 +1,13 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
|
|
||||||
apply plugin: 'kotlin-android-extensions'
|
apply plugin: 'kotlin-android-extensions'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion 30
|
||||||
buildToolsVersion "29.0.2"
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "im.status.keycard.connect"
|
applicationId "im.status.keycard.connect"
|
||||||
minSdkVersion 24
|
minSdkVersion 24
|
||||||
targetSdkVersion 29
|
targetSdkVersion 30
|
||||||
versionCode 1
|
versionCode 1
|
||||||
versionName "1.0"
|
versionName "1.0"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
@ -43,37 +40,41 @@ android {
|
|||||||
warning 'InvalidPackage' // for bouncycastle
|
warning 'InvalidPackage' // for bouncycastle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
implementation 'androidx.core:core-ktx:1.3.2'
|
||||||
implementation 'androidx.core:core-ktx:1.1.0'
|
implementation 'com.google.android.material:material:1.2.1'
|
||||||
implementation 'com.google.android.material:material:1.0.0'
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
|
||||||
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
|
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
|
||||||
implementation 'androidx.navigation:navigation-fragment:2.1.0'
|
implementation 'androidx.navigation:navigation-fragment:2.3.0'
|
||||||
implementation 'androidx.navigation:navigation-ui:2.1.0'
|
implementation 'androidx.navigation:navigation-ui:2.3.0'
|
||||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
|
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
||||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.1.0'
|
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
|
||||||
implementation 'androidx.navigation:navigation-ui-ktx:2.1.0'
|
implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
|
||||||
implementation 'androidx.security:security-crypto:1.0.0-alpha02'
|
implementation 'androidx.security:security-crypto:1.1.0-alpha02'
|
||||||
implementation 'org.bouncycastle:bcprov-jdk15on:1.64'
|
implementation 'org.bouncycastle:bcprov-jdk15on:1.65'
|
||||||
implementation 'com.github.status-im.status-keycard-java:android:3.0.2'
|
implementation 'com.github.status-im.status-keycard-java:android:3.0.2'
|
||||||
implementation 'com.github.walletconnect:kotlin-walletconnect-lib:0.9.4'
|
implementation 'com.github.walletconnect:kotlin-walletconnect-lib:0.9.7'
|
||||||
implementation 'com.journeyapps:zxing-android-embedded:4.0.0'
|
implementation 'com.journeyapps:zxing-android-embedded:4.0.0'
|
||||||
implementation 'com.google.zxing:core:3.4.0'
|
implementation 'com.google.zxing:core:3.4.1'
|
||||||
implementation 'com.squareup.moshi:moshi:1.9.1'
|
implementation 'com.squareup.moshi:moshi:1.11.0'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.2.1'
|
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
|
||||||
implementation 'com.squareup.moshi:moshi-kotlin:1.9.1'
|
implementation 'com.squareup.moshi:moshi-kotlin:1.11.0'
|
||||||
implementation "com.github.komputing.kethereum:extensions:$kethereum_version"
|
|
||||||
implementation "com.github.komputing.kethereum:model:$kethereum_version"
|
implementation "com.github.komputing.kethereum:model:$kethereum_version"
|
||||||
implementation "com.github.komputing.kethereum:functions:$kethereum_version"
|
|
||||||
implementation "com.github.komputing.kethereum:rpc:$kethereum_version"
|
implementation "com.github.komputing.kethereum:rpc:$kethereum_version"
|
||||||
|
implementation "com.github.komputing.kethereum:extensions_transactions:$kethereum_version"
|
||||||
|
implementation "com.github.komputing.kethereum:extensions_kotlin:$kethereum_version"
|
||||||
implementation "com.github.komputing.kethereum:keccak_shortcut:$kethereum_version"
|
implementation "com.github.komputing.kethereum:keccak_shortcut:$kethereum_version"
|
||||||
implementation 'com.github.komputing:khex:0.6'
|
implementation 'com.github.komputing:khex:1.0.0'
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.13'
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
configurations.all {
|
||||||
|
resolutionStrategy {
|
||||||
|
force 'org.bouncycastle:bcprov-jdk15on:1.65'
|
||||||
|
}
|
||||||
|
}
|
@ -3,15 +3,15 @@ package im.status.keycard.connect.data
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
import androidx.security.crypto.EncryptedSharedPreferences
|
||||||
import androidx.security.crypto.MasterKeys
|
import androidx.security.crypto.MasterKey
|
||||||
|
|
||||||
class SettingsManager(context: Context) {
|
class SettingsManager(context: Context) {
|
||||||
private val sharedPreferences: SharedPreferences
|
private val sharedPreferences: SharedPreferences
|
||||||
|
|
||||||
init {
|
init {
|
||||||
/** encrypted settings used for privacy **/
|
/** encrypted settings used for privacy **/
|
||||||
val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
|
val masterKey = MasterKey.Builder(context).setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build()
|
||||||
sharedPreferences = EncryptedSharedPreferences.create("settings", masterKeyAlias, context, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)
|
sharedPreferences = EncryptedSharedPreferences.create(context,"settings", masterKey, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)
|
||||||
}
|
}
|
||||||
|
|
||||||
val rpcEndpoint
|
val rpcEndpoint
|
||||||
|
@ -5,10 +5,7 @@ import com.squareup.moshi.Moshi
|
|||||||
import com.squareup.moshi.Types
|
import com.squareup.moshi.Types
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import org.kethereum.extensions.maybeHexToBigInteger
|
|
||||||
import org.kethereum.rpc.HttpEthereumRPC
|
import org.kethereum.rpc.HttpEthereumRPC
|
||||||
import org.kethereum.rpc.model.StringResultResponse
|
|
||||||
import java.io.IOException
|
|
||||||
import java.lang.Exception
|
import java.lang.Exception
|
||||||
import java.lang.reflect.Type
|
import java.lang.reflect.Type
|
||||||
import java.math.BigInteger
|
import java.math.BigInteger
|
||||||
@ -29,24 +26,16 @@ class EthereumRPC(endpointURL: String) {
|
|||||||
endpoint = HttpEthereumRPC(endpointURL)
|
endpoint = HttpEthereumRPC(endpointURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun <T> valueOrThrow(res: StringResultResponse?, body: (String) -> T) : T {
|
|
||||||
if (res != null && res.error == null) {
|
|
||||||
return body(res.result)
|
|
||||||
} else {
|
|
||||||
throw IOException("communication error")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ethGetTransactionCount(address: String): BigInteger {
|
fun ethGetTransactionCount(address: String): BigInteger {
|
||||||
return valueOrThrow(endpoint.getTransactionCount(address)) { it.maybeHexToBigInteger() }
|
return endpoint.getTransactionCount(address)!!
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ethGasPrice(): BigInteger {
|
fun ethGasPrice(): BigInteger {
|
||||||
return valueOrThrow(endpoint.gasPrice()) { it.maybeHexToBigInteger() }
|
return endpoint.gasPrice()!!
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ethSendRawTransaction(rawTx: String): String {
|
fun ethSendRawTransaction(rawTx: String): String {
|
||||||
return valueOrThrow(endpoint.sendRawTransaction(rawTx)) { it }
|
return endpoint.sendRawTransaction(rawTx)!!
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ethplorerGetTokenInfo(address: String): Map<String, Any>? {
|
fun ethplorerGetTokenInfo(address: String): Map<String, Any>? {
|
||||||
|
@ -19,21 +19,22 @@ import okhttp3.OkHttpClient
|
|||||||
import org.kethereum.DEFAULT_GAS_LIMIT
|
import org.kethereum.DEFAULT_GAS_LIMIT
|
||||||
import org.kethereum.extensions.maybeHexToBigInteger
|
import org.kethereum.extensions.maybeHexToBigInteger
|
||||||
import org.kethereum.extensions.toBigInteger
|
import org.kethereum.extensions.toBigInteger
|
||||||
import org.kethereum.functions.encodeRLP
|
import org.kethereum.extensions.transactions.encodeRLP
|
||||||
import org.kethereum.functions.getTokenTransferTo
|
import org.kethereum.extensions.transactions.getTokenTransferTo
|
||||||
import org.kethereum.functions.getTokenTransferValue
|
import org.kethereum.extensions.transactions.getTokenTransferValue
|
||||||
import org.kethereum.functions.isTokenTransfer
|
import org.kethereum.extensions.transactions.isTokenTransfer
|
||||||
import org.kethereum.keccakshortcut.keccak
|
import org.kethereum.keccakshortcut.keccak
|
||||||
import org.kethereum.model.*
|
import org.kethereum.model.*
|
||||||
|
import org.komputing.khex.encode
|
||||||
|
import org.komputing.khex.extensions.hexToByteArray
|
||||||
|
import org.komputing.khex.extensions.toHexString
|
||||||
|
import org.komputing.khex.extensions.toNoPrefixHexString
|
||||||
|
import org.komputing.khex.model.HexString
|
||||||
import org.walletconnect.Session
|
import org.walletconnect.Session
|
||||||
import org.walletconnect.Session.Config.Companion.fromWCUri
|
import org.walletconnect.Session.Config.Companion.fromWCUri
|
||||||
import org.walletconnect.impls.*
|
import org.walletconnect.impls.*
|
||||||
import org.walleth.khex.hexToByteArray
|
|
||||||
import org.walleth.khex.toHexString
|
|
||||||
import org.walleth.khex.toNoPrefixHexString
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.Exception
|
import java.lang.Exception
|
||||||
import java.math.BigInteger
|
|
||||||
|
|
||||||
class WalletConnect(var bip32Path: String, var chainID: Long) : ExportKeyCommand.Listener, SignCommand.Listener, Session.Callback {
|
class WalletConnect(var bip32Path: String, var chainID: Long) : ExportKeyCommand.Listener, SignCommand.Listener, Session.Callback {
|
||||||
|
|
||||||
@ -63,6 +64,7 @@ class WalletConnect(var bip32Path: String, var chainID: Long) : ExportKeyCommand
|
|||||||
is Session.MethodCall.SignMessage -> signText(call.id, call.message)
|
is Session.MethodCall.SignMessage -> signText(call.id, call.message)
|
||||||
is Session.MethodCall.SendTransaction -> signTransaction(call.id, toTransaction(call), true)
|
is Session.MethodCall.SendTransaction -> signTransaction(call.id, toTransaction(call), true)
|
||||||
is Session.MethodCall.Custom -> onCustomCall(call)
|
is Session.MethodCall.Custom -> onCustomCall(call)
|
||||||
|
else -> session?.rejectRequest(call.id(), 1L, "Not implemented")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -103,11 +105,11 @@ class WalletConnect(var bip32Path: String, var chainID: Long) : ExportKeyCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun toTransaction(tx: Session.MethodCall.SendTransaction): Transaction {
|
private fun toTransaction(tx: Session.MethodCall.SendTransaction): Transaction {
|
||||||
val gasLimit = tx.gasLimit?.maybeHexToBigInteger() ?: DEFAULT_GAS_LIMIT
|
val gasLimit = if(tx.gasLimit != null) HexString(tx.gasLimit!!).maybeHexToBigInteger() else DEFAULT_GAS_LIMIT
|
||||||
val gasPrice = tx.gasPrice?.maybeHexToBigInteger() ?: Registry.ethereumRPC.ethGasPrice()
|
val gasPrice = if(tx.gasPrice != null) HexString(tx.gasPrice!!).maybeHexToBigInteger() else Registry.ethereumRPC.ethGasPrice()
|
||||||
val nonce = tx.nonce?.maybeHexToBigInteger() ?: Registry.ethereumRPC.ethGetTransactionCount(tx.from)
|
val nonce = if(tx.nonce != null) HexString(tx.nonce!!).maybeHexToBigInteger() else Registry.ethereumRPC.ethGetTransactionCount(tx.from)
|
||||||
|
val to = if(tx.to != null) Address(tx.to!!) else null
|
||||||
return Transaction(chainID.toBigInteger(), null, Address(tx.from), gasLimit, gasPrice, tx.data.hexToByteArray(), nonce, Address(tx.to), null, tx.value.maybeHexToBigInteger())
|
return Transaction(chainID.toBigInteger(), null, Address(tx.from), gasLimit, gasPrice, HexString(tx.data).hexToByteArray(), nonce, to, null, HexString(tx.value).maybeHexToBigInteger(),null, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun relayTX(id: Long, signedTx: String) {
|
private fun relayTX(id: Long, signedTx: String) {
|
||||||
@ -115,7 +117,7 @@ class WalletConnect(var bip32Path: String, var chainID: Long) : ExportKeyCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun signText(id: Long, message: String) {
|
private fun signText(id: Long, message: String) {
|
||||||
val msg = message.hexToByteArray()
|
val msg = HexString(message).hexToByteArray()
|
||||||
val text = String(msg)
|
val text = String(msg)
|
||||||
|
|
||||||
requestId = id
|
requestId = id
|
||||||
@ -124,7 +126,7 @@ class WalletConnect(var bip32Path: String, var chainID: Long) : ExportKeyCommand
|
|||||||
Registry.scriptExecutor.runScript(scriptWithAuthentication().plus(SignCommand(Registry.walletConnect, hash)))
|
Registry.scriptExecutor.runScript(scriptWithAuthentication().plus(SignCommand(Registry.walletConnect, hash)))
|
||||||
}
|
}
|
||||||
|
|
||||||
signAction = { session?.approveRequest(requestId, "0x${it.r.toNoPrefixHexString()}${it.s.toNoPrefixHexString()}${(it.recId + 27).toByte().toHexString()}") }
|
signAction = { session?.approveRequest(requestId, "0x${it.r.toNoPrefixHexString()}${it.s.toNoPrefixHexString()}${encode((it.recId + 27).toByte())}") }
|
||||||
|
|
||||||
val intent = Intent(Registry.mainActivity, SignMessageActivity::class.java).apply {
|
val intent = Intent(Registry.mainActivity, SignMessageActivity::class.java).apply {
|
||||||
putExtra(SIGN_TEXT_MESSAGE, text)
|
putExtra(SIGN_TEXT_MESSAGE, text)
|
||||||
@ -198,7 +200,7 @@ class WalletConnect(var bip32Path: String, var chainID: Long) : ExportKeyCommand
|
|||||||
session?.kill()
|
session?.kill()
|
||||||
|
|
||||||
session = WCSession(
|
session = WCSession(
|
||||||
fromWCUri(uri),
|
fromWCUri(uri).toFullyQualifiedConfig(),
|
||||||
MoshiPayloadAdapter(moshi),
|
MoshiPayloadAdapter(moshi),
|
||||||
sessionStore,
|
sessionStore,
|
||||||
OkHttpTransport.Builder(okHttpClient, moshi),
|
OkHttpTransport.Builder(okHttpClient, moshi),
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.3.50'
|
ext.kotlin_version = '1.4.10'
|
||||||
ext.kethereum_version = '0.79.1'
|
ext.kethereum_version = '0.83.0'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
@ -10,7 +10,7 @@ buildscript {
|
|||||||
|
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.0.0'
|
classpath 'com.android.tools.build:gradle:4.0.2'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip
|
||||||
|
Loading…
x
Reference in New Issue
Block a user