Updated on 2026-08-14

This commit is contained in:
Tangem 2019-11-01 13:03:01 +03:00
parent ae3fcc0e13
commit 709d4614d2
2 changed files with 14 additions and 14 deletions

View file

@ -56,7 +56,7 @@ enum class ProductMask(val code: Byte) {
}
}
class ReadCardResponse(
class Card(
val cardId: String,
val manufacturerName: String,
val status: CardStatus,
@ -93,7 +93,7 @@ class ReadCardResponse(
) : CommandResponse
class ReadCardCommand : CommandSerializer<ReadCardResponse>() {
class ReadCardCommand : CommandSerializer<Card>() {
override val instruction = Instruction.Read
override val instructionCode = instruction.code
@ -109,13 +109,13 @@ class ReadCardCommand : CommandSerializer<ReadCardResponse>() {
return CommandApdu(instructionCode, tlvData)
}
override fun deserialize(cardEnvironment: CardEnvironment, responseApdu: ResponseApdu): ReadCardResponse? {
override fun deserialize(cardEnvironment: CardEnvironment, responseApdu: ResponseApdu): Card? {
val tlvData = responseApdu.getTlvData() ?: return null
return try {
val tlvMapper = TlvMapper(tlvData)
ReadCardResponse(
Card(
cardId = tlvMapper.map(TlvTag.CardId),
manufacturerName = tlvMapper.map(TlvTag.ManufactureId),
status = tlvMapper.map(TlvTag.Status),

View file

@ -1,23 +1,23 @@
package com.tangem.tasks
import com.tangem.CardEnvironment
import com.tangem.commands.Card
import com.tangem.commands.CheckWalletCommand
import com.tangem.commands.EllipticCurve
import com.tangem.commands.ReadCardCommand
import com.tangem.commands.ReadCardResponse
import com.tangem.common.CompletionResult
import com.tangem.crypto.generateRandomBytes
import com.tangem.crypto.verify
sealed class ScanEvent {
data class OnReadEvent(val result: ReadCardResponse) : ScanEvent()
data class OnVerifyEvent(val verified: Boolean) : ScanEvent()
data class OnReadEvent(val card: Card) : ScanEvent()
data class OnVerifyEvent(val isGenuine: Boolean) : ScanEvent()
}
internal class ScanTask : Task<ScanEvent>() {
private lateinit var readCardData: ReadCardResponse
private lateinit var cardData: Card
private lateinit var challenge: ByteArray
private lateinit var curve: EllipticCurve
private lateinit var walletPublickKey: ByteArray
@ -30,13 +30,13 @@ internal class ScanTask : Task<ScanEvent>() {
when (readEvent) {
is CompletionResult.Success -> {
readCardData = readEvent.data
cardData = readEvent.data
callback(TaskEvent.Event(ScanEvent.OnReadEvent(readCardData)))
callback(TaskEvent.Event(ScanEvent.OnReadEvent(cardData)))
if (readCardData.curve != null && readCardData.walletPublicKey != null) {
curve = readCardData.curve!!
walletPublickKey = readCardData.walletPublicKey!!
if (cardData.curve != null && cardData.walletPublicKey != null) {
curve = cardData.curve!!
walletPublickKey = cardData.walletPublicKey!!
} else {
delegate?.onTaskError()
callback(TaskEvent.Completion(TaskError.CardError()))
@ -81,7 +81,7 @@ internal class ScanTask : Task<ScanEvent>() {
challenge = generateRandomBytes(16)
return CheckWalletCommand(
cardEnvironment.pin1,
readCardData.cardId,
cardData.cardId,
challenge,
byteArrayOf())
}