From 7f29eea6299f90ed4a8fd22b4bb3d633c86f9a90 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 8 May 2020 10:37:04 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../src/main/java/com/tangem/TangemSdkError.kt | 12 ++---------- .../com/tangem/commands/CheckWalletCommand.kt | 2 +- .../src/main/java/com/tangem/commands/Command.kt | 14 +++++++------- .../com/tangem/commands/CreateWalletCommand.kt | 8 ++++---- .../com/tangem/commands/PurgeWalletCommand.kt | 8 ++++---- .../main/java/com/tangem/commands/ReadCommand.kt | 15 +++++++++++++++ .../com/tangem/commands/ReadIssuerDataCommand.kt | 2 +- .../com/tangem/commands/ReadUserDataCommand.kt | 2 +- .../main/java/com/tangem/commands/SignCommand.kt | 8 ++++---- .../com/tangem/commands/WriteIssuerDataCommand.kt | 8 ++++---- .../commands/WriteIssuerExtraDataCommand.kt | 2 +- .../com/tangem/commands/WriteUserDataCommand.kt | 8 ++++---- .../personalization/DepersonalizeCommand.kt | 2 +- .../personalization/PersonalizeCommand.kt | 2 +- .../main/java/com/tangem/common/tlv/TlvBuilder.kt | 2 +- .../main/java/com/tangem/common/tlv/TlvDecoder.kt | 2 +- tangem-devkit/build.gradle | 4 ++-- .../ucase/resources/initializers/TlvResources.kt | 2 +- .../com/tangem/tangem_sdk_new/nfc/NfcReader.kt | 1 + 19 files changed, 56 insertions(+), 48 deletions(-) diff --git a/tangem-core/src/main/java/com/tangem/TangemSdkError.kt b/tangem-core/src/main/java/com/tangem/TangemSdkError.kt index 5167aff71f..4ea2612c51 100644 --- a/tangem-core/src/main/java/com/tangem/TangemSdkError.kt +++ b/tangem-core/src/main/java/com/tangem/TangemSdkError.kt @@ -59,14 +59,6 @@ sealed class TangemSdkError(val code: Int) : Exception(code.toString()) { */ class NeedEncryption : TangemSdkError(30006) - class Pin1Changed : TangemSdkError(30007) - - class Pin2Changed : TangemSdkError(30008) - - class PinsChanged : TangemSdkError(30009) - - - //Personalization Errors class AlreadyPersonalized : TangemSdkError(40101) @@ -77,12 +69,12 @@ sealed class TangemSdkError(val code: Int) : Exception(code.toString()) { class Pin1Required : TangemSdkError(40401) /** * This error is returned when a [Task] expects a user to use a particular card, - * and a user tries to use a different card. + * but the user tries to use a different card. */ class WrongCard : TangemSdkError(40403) /** * This error is returned when a user scans a card of a [com.tangem.common.extensions.CardType] - * that is not specified in [Config.allowedCards]. + * that is not specified in [Config.cardFilter]. */ class WrongCardType : TangemSdkError(40404) diff --git a/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt b/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt index ab33a2cc3c..e3cbdf970a 100644 --- a/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt @@ -70,7 +70,7 @@ class CheckWalletCommand( } } - override fun handlePreRunErrors( + override fun performPreCheck( session: CardSession, callback: (result: CompletionResult) -> Unit ): Boolean { diff --git a/tangem-core/src/main/java/com/tangem/commands/Command.kt b/tangem-core/src/main/java/com/tangem/commands/Command.kt index a0c28b2ba6..fad1b0d025 100644 --- a/tangem-core/src/main/java/com/tangem/commands/Command.kt +++ b/tangem-core/src/main/java/com/tangem/commands/Command.kt @@ -40,24 +40,24 @@ abstract class Command : CardSessionRunnable { override fun run(session: CardSession, callback: (result: CompletionResult) -> Unit) { Log.i("Command", "Sending ${this::class.java.simpleName}") if (session.environment.handleErrors) { - if (handlePreRunErrors(session, callback)) return + if (performPreCheck(session, callback)) return } transceive(session) { result -> if (session.environment.handleErrors) { - if (handleResponseErrors(session, result, callback)) return@transceive + if (performAfterCheck(session, result, callback)) return@transceive } callback(result) } } - open fun handlePreRunErrors(session: CardSession, - callback: (result: CompletionResult) -> Unit): Boolean { + open fun performPreCheck(session: CardSession, + callback: (result: CompletionResult) -> Unit): Boolean { return false } - open fun handleResponseErrors(session: CardSession, - result: CompletionResult, - callback: (result: CompletionResult) -> Unit): Boolean { + open fun performAfterCheck(session: CardSession, + result: CompletionResult, + callback: (result: CompletionResult) -> Unit): Boolean { return false } diff --git a/tangem-core/src/main/java/com/tangem/commands/CreateWalletCommand.kt b/tangem-core/src/main/java/com/tangem/commands/CreateWalletCommand.kt index b5563bd747..e0bf433c99 100644 --- a/tangem-core/src/main/java/com/tangem/commands/CreateWalletCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/CreateWalletCommand.kt @@ -39,7 +39,7 @@ class CreateWalletResponse( */ class CreateWalletCommand : Command() { - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { if (session.environment.card?.status == CardStatus.NotPersonalized) { callback(CompletionResult.Failure(TangemSdkError.NotPersonalized())) return true @@ -59,9 +59,9 @@ class CreateWalletCommand : Command() { return false } - override fun handleResponseErrors(session: CardSession, - result: CompletionResult, - callback: (result: CompletionResult) -> Unit): Boolean { + override fun performAfterCheck(session: CardSession, + result: CompletionResult, + callback: (result: CompletionResult) -> Unit): Boolean { when (result) { is CompletionResult.Failure -> { if (result.error is TangemSdkError.InvalidParams) { diff --git a/tangem-core/src/main/java/com/tangem/commands/PurgeWalletCommand.kt b/tangem-core/src/main/java/com/tangem/commands/PurgeWalletCommand.kt index 4a406e4c71..bbc3edfbb2 100644 --- a/tangem-core/src/main/java/com/tangem/commands/PurgeWalletCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/PurgeWalletCommand.kt @@ -31,7 +31,7 @@ class PurgeWalletResponse( */ class PurgeWalletCommand : Command() { - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { if (session.environment.card?.status == CardStatus.NotPersonalized) { callback(CompletionResult.Failure(TangemSdkError.NotPersonalized())) return true @@ -47,9 +47,9 @@ class PurgeWalletCommand : Command() { return false } - override fun handleResponseErrors(session: CardSession, - result: CompletionResult, - callback: (result: CompletionResult) -> Unit): Boolean { + override fun performAfterCheck(session: CardSession, + result: CompletionResult, + callback: (result: CompletionResult) -> Unit): Boolean { when (result) { is CompletionResult.Failure -> { if (result.error is TangemSdkError.InvalidParams) { diff --git a/tangem-core/src/main/java/com/tangem/commands/ReadCommand.kt b/tangem-core/src/main/java/com/tangem/commands/ReadCommand.kt index d94ba5de4c..c8bbda44ff 100644 --- a/tangem-core/src/main/java/com/tangem/commands/ReadCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/ReadCommand.kt @@ -1,7 +1,9 @@ package com.tangem.commands +import com.tangem.CardSession import com.tangem.SessionEnvironment import com.tangem.TangemSdkError +import com.tangem.common.CompletionResult import com.tangem.common.apdu.CommandApdu import com.tangem.common.apdu.Instruction import com.tangem.common.apdu.ResponseApdu @@ -366,6 +368,19 @@ class Card( */ class ReadCommand : Command() { + override fun performAfterCheck(session: CardSession, result: CompletionResult, callback: (result: CompletionResult) -> Unit): Boolean { + when (result) { + is CompletionResult.Failure -> { + if (result.error is TangemSdkError.InvalidParams) { + callback(CompletionResult.Failure(TangemSdkError.Pin1Required())) + return true + } + return false + } + else -> return false + } + } + override fun serialize(environment: SessionEnvironment): CommandApdu { val tlvBuilder = TlvBuilder() /** diff --git a/tangem-core/src/main/java/com/tangem/commands/ReadIssuerDataCommand.kt b/tangem-core/src/main/java/com/tangem/commands/ReadIssuerDataCommand.kt index 9b1600c5a7..d01a3adbe8 100644 --- a/tangem-core/src/main/java/com/tangem/commands/ReadIssuerDataCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/ReadIssuerDataCommand.kt @@ -90,7 +90,7 @@ class ReadIssuerDataCommand( } } - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { if (session.environment.card?.status == CardStatus.NotPersonalized) { callback(CompletionResult.Failure(TangemSdkError.NotPersonalized())) return true diff --git a/tangem-core/src/main/java/com/tangem/commands/ReadUserDataCommand.kt b/tangem-core/src/main/java/com/tangem/commands/ReadUserDataCommand.kt index e3cf00b130..b8ee2022d6 100644 --- a/tangem-core/src/main/java/com/tangem/commands/ReadUserDataCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/ReadUserDataCommand.kt @@ -51,7 +51,7 @@ class ReadUserDataResponse( */ class ReadUserDataCommand : Command() { - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { if (session.environment.card?.status == CardStatus.NotPersonalized) { callback(CompletionResult.Failure(TangemSdkError.NotPersonalized())) return true diff --git a/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt b/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt index 5c0c5bea32..607ad41cd7 100644 --- a/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt @@ -37,7 +37,7 @@ class SignCommand(private val hashes: Array) private val hashSizes = if (hashes.isNotEmpty()) hashes.first().size else 0 - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { if (session.environment.card?.status == CardStatus.NotPersonalized) { callback(CompletionResult.Failure(TangemSdkError.NotPersonalized())) return true @@ -73,9 +73,9 @@ class SignCommand(private val hashes: Array) return false } - override fun handleResponseErrors(session: CardSession, - result: CompletionResult, - callback: (result: CompletionResult) -> Unit): Boolean { + override fun performAfterCheck(session: CardSession, + result: CompletionResult, + callback: (result: CompletionResult) -> Unit): Boolean { when (result) { is CompletionResult.Failure -> { if (result.error is TangemSdkError.InvalidParams) { diff --git a/tangem-core/src/main/java/com/tangem/commands/WriteIssuerDataCommand.kt b/tangem-core/src/main/java/com/tangem/commands/WriteIssuerDataCommand.kt index fa817fd392..2574a2f4a6 100644 --- a/tangem-core/src/main/java/com/tangem/commands/WriteIssuerDataCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/WriteIssuerDataCommand.kt @@ -40,7 +40,7 @@ class WriteIssuerDataCommand( verifier: IssuerDataVerifier = DefaultIssuerDataVerifier() ) : Command(), IssuerDataVerifier by verifier { - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { val card = session.environment.card if (card == null) { callback(CompletionResult.Failure(TangemSdkError.MissingPreflightRead())) @@ -74,9 +74,9 @@ class WriteIssuerDataCommand( return false } - override fun handleResponseErrors(session: CardSession, - result: CompletionResult, - callback: (result: CompletionResult) -> Unit + override fun performAfterCheck(session: CardSession, + result: CompletionResult, + callback: (result: CompletionResult) -> Unit ): Boolean { when (result) { is CompletionResult.Failure -> { diff --git a/tangem-core/src/main/java/com/tangem/commands/WriteIssuerExtraDataCommand.kt b/tangem-core/src/main/java/com/tangem/commands/WriteIssuerExtraDataCommand.kt index 188273730c..8cb0dfc949 100644 --- a/tangem-core/src/main/java/com/tangem/commands/WriteIssuerExtraDataCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/WriteIssuerExtraDataCommand.kt @@ -73,7 +73,7 @@ class WriteIssuerExtraDataCommand( } } - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { val card = session.environment.card if (card == null) { callback(CompletionResult.Failure(TangemSdkError.MissingPreflightRead())) diff --git a/tangem-core/src/main/java/com/tangem/commands/WriteUserDataCommand.kt b/tangem-core/src/main/java/com/tangem/commands/WriteUserDataCommand.kt index 8e965cded3..fc0d0467ae 100644 --- a/tangem-core/src/main/java/com/tangem/commands/WriteUserDataCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/WriteUserDataCommand.kt @@ -34,7 +34,7 @@ class WriteUserDataCommand(private val userData: ByteArray? = null, private val private val userCounter: Int? = null, private val userProtectedCounter: Int? = null) : Command() { - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { if (session.environment.card?.status == CardStatus.NotPersonalized) { callback(CompletionResult.Failure(TangemSdkError.NotPersonalized())) return true @@ -50,9 +50,9 @@ class WriteUserDataCommand(private val userData: ByteArray? = null, private val return false } - override fun handleResponseErrors(session: CardSession, - result: CompletionResult, - callback: (result: CompletionResult) -> Unit + override fun performAfterCheck(session: CardSession, + result: CompletionResult, + callback: (result: CompletionResult) -> Unit ): Boolean { when (result) { is CompletionResult.Failure -> { diff --git a/tangem-core/src/main/java/com/tangem/commands/personalization/DepersonalizeCommand.kt b/tangem-core/src/main/java/com/tangem/commands/personalization/DepersonalizeCommand.kt index ac47de6c75..c3bb2d4de8 100644 --- a/tangem-core/src/main/java/com/tangem/commands/personalization/DepersonalizeCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/personalization/DepersonalizeCommand.kt @@ -21,7 +21,7 @@ data class DepersonalizeResponse(val success: Boolean) : CommandResponse */ class DepersonalizeCommand : Command() { - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { if (session.environment.card?.status == CardStatus.NotPersonalized) { callback(CompletionResult.Failure(TangemSdkError.NotPersonalized())) return true diff --git a/tangem-core/src/main/java/com/tangem/commands/personalization/PersonalizeCommand.kt b/tangem-core/src/main/java/com/tangem/commands/personalization/PersonalizeCommand.kt index b7f2c7c9dc..52d85278fa 100644 --- a/tangem-core/src/main/java/com/tangem/commands/personalization/PersonalizeCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/personalization/PersonalizeCommand.kt @@ -39,7 +39,7 @@ class PersonalizeCommand( private val acquirer: Acquirer? = null ) : Command() { - override fun handlePreRunErrors(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { + override fun performPreCheck(session: CardSession, callback: (result: CompletionResult) -> Unit): Boolean { if (session.environment.card?.status != CardStatus.NotPersonalized) { callback(CompletionResult.Failure(TangemSdkError.AlreadyPersonalized())) return true diff --git a/tangem-core/src/main/java/com/tangem/common/tlv/TlvBuilder.kt b/tangem-core/src/main/java/com/tangem/common/tlv/TlvBuilder.kt index 3e3c8557f2..3cade3e92a 100644 --- a/tangem-core/src/main/java/com/tangem/common/tlv/TlvBuilder.kt +++ b/tangem-core/src/main/java/com/tangem/common/tlv/TlvBuilder.kt @@ -14,7 +14,7 @@ class TlvBuilder { fun serialize(): ByteArray { Log.v("TLV", - "List of TLV that are being sent to a card:\n${tlvs.joinToString("\n")}") + "List of encoded TLVs:\n${tlvs.joinToString("\n")}") return tlvs.serialize() } diff --git a/tangem-core/src/main/java/com/tangem/common/tlv/TlvDecoder.kt b/tangem-core/src/main/java/com/tangem/common/tlv/TlvDecoder.kt index 2b9bd3520c..62c0899f2d 100644 --- a/tangem-core/src/main/java/com/tangem/common/tlv/TlvDecoder.kt +++ b/tangem-core/src/main/java/com/tangem/common/tlv/TlvDecoder.kt @@ -20,7 +20,7 @@ class TlvDecoder(val tlvList: List) { init { Log.v("TLV", - "List of TLV received from card:\n${tlvList.joinToString("\n")}") + "List of decoded TLVs:\n${tlvList.joinToString("\n")}") } /** diff --git a/tangem-devkit/build.gradle b/tangem-devkit/build.gradle index e692140432..266e0bf816 100644 --- a/tangem-devkit/build.gradle +++ b/tangem-devkit/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.tangem.devkit" minSdkVersion 21 targetSdkVersion 29 - versionCode 1 - versionName "1.0" + versionCode 3 + versionName "1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/TlvResources.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/TlvResources.kt index 32bb68d840..c7527b36ed 100644 --- a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/TlvResources.kt +++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/TlvResources.kt @@ -18,7 +18,7 @@ class TlvResources { holder.register(TlvId.TransactionOutHash, Resources(R.string.tlv_transaction_out_hash, R.string.info_tlv_transaction_out_hash)) holder.register(TlvId.Counter, Resources(R.string.tlv_counter, R.string.info_tlv_counter)) holder.register(TlvId.IssuerData, Resources(R.string.tlv_issuer_data, R.string.info_tlv_issuer_data)) - holder.register(TlvId.UserData, Resources(R.string.tlv_issuer_data, R.string.info_tlv_user_data)) + holder.register(TlvId.UserData, Resources(R.string.tlv_user_data, R.string.info_tlv_user_data)) holder.register(TlvId.ProtectedUserData, Resources(R.string.tlv_user_protected_data, R.string.info_tlv_protected_user_data)) } } \ No newline at end of file diff --git a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt index 002bf20104..225edfb595 100644 --- a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt +++ b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt @@ -80,6 +80,7 @@ class NfcReader : CardReader { isoDep = null return } catch (exception: Exception) { + Log.i(this::class.simpleName!!, exception.localizedMessage ?: "Error tranceiving data") isoDep = null return }