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 90c70a00f7..dc4d4c9229 100644 --- a/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt @@ -15,7 +15,7 @@ import com.tangem.tasks.TaskError * Deserialized response from the Tangem card after [CheckWalletCommand]. * * @property cardId Unique Tangem card ID number - * @property salt Random salt generated by the card + * @property salt Random salt generated by the card. * @property walletSignature Challenge and salt signed with the wallet private key. */ class CheckWalletResponse( @@ -44,7 +44,6 @@ class CheckWalletCommand( Tlv(TlvTag.CardId, cardId.hexToBytes()), Tlv(TlvTag.Challenge, challenge) ) - return CommandApdu(Instruction.CheckWallet, tlvData) } @@ -62,6 +61,4 @@ class CheckWalletCommand( throw TaskError.SerializeCommandError() } } - - } \ No newline at end of file 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 be79679f14..eee726622f 100644 --- a/tangem-core/src/main/java/com/tangem/commands/ReadCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/ReadCommand.kt @@ -125,27 +125,124 @@ class CardData( * Response for [ReadCommand]. Contains detailed card information. */ class Card( + + /** + * Unique Tangem card ID number. + */ val cardId: String, + + /** + * Name of Tangem card manufacturer. + */ val manufacturerName: String, + + /** + * Current status of the card. + */ val status: CardStatus, + /** + * Version of Tangem COS. + */ val firmwareVersion: String?, + + /** + * Public key that is used to authenticate the card against manufacturer’s database. + * It is generated one time during card manufacturing. + */ val cardPublicKey: ByteArray?, + + /** + * Card settings defined by personalization (bit mask: 0 – Enabled, 1 – Disabled). + */ val settingsMask: SettingsMask?, + + /** + * Public key that is used by the card issuer to sign IssuerData field. + */ val issuerPublicKey: ByteArray?, + + /** + * Explicit text name of the elliptic curve used for all wallet key operations. + * Supported curves: ‘secp256k1’ and ‘ed25519’. + */ val curve: EllipticCurve?, + + /** + * Total number of signatures allowed for the wallet when the card was personalized. + */ val maxSignatures: Int?, + + /** + * Defines what data should be submitted to SIGN command. + */ val signingMethod: SigningMethod?, + + /** + * Delay in seconds before COS executes commands protected by PIN2. + */ val pauseBeforePin2: Int?, + + /** + * Public key of the blockchain wallet. + */ val walletPublicKey: ByteArray?, + + /** + * Remaining number of [SignCommand] operations before the wallet will stop signing transactions. + */ val walletRemainingSignatures: Int?, + + /** + * Total number of signed single hashes returned by the card in + * [SignCommand] responses since card personalization. + * Sums up array elements within all [SignCommand]. + */ val walletSignedHashes: Int?, + + /** + * Any non-zero value indicates that the card experiences some hardware problems. + * User should withdraw the value to other blockchain wallet as soon as possible. + * Non-zero Health tag will also appear in responses of all other commands. + */ val health: Int?, + + /** + * Whether the card requires issuer’s confirmation of activation. + */ val isActivated: Boolean, + + /** + * A random challenge generated by personalisation that should be signed and returned + * to COS by the issuer to confirm the card has been activated. + * This field will not be returned if the card is activated. + */ val activationSeed: ByteArray?, + + /** + * Returned only if [SigningMethod.SignPos] enabling POS transactions is supported by card. + */ val paymentFlowVersion: ByteArray?, + + /** + * This value can be initialized by terminal and will be increased by COS on execution of every [SignCommand]. + * For example, this field can store blockchain “nonce” for quick one-touch transaction on POS terminals. + * Returned only if [SigningMethod.SignPos] enabling POS transactions is supported by card. + */ val userCounter: Int?, + + /** + * When this value is true, it means that the application is linked to the card, + * and COS will not enforce security delay if [SignCommand] will be called + * with [TlvTag.TerminalTransactionSignature] parameter containing a correct signature of raw data + * to be signed made with [TlvTag.TerminalPublicKey]. + */ val terminalIsLinked: Boolean, + + /** + * Detailed information about card contents. Format is defined by the card issuer. + * Cards complaint with Tangem Wallet application should have TLV format. + */ val cardData: CardData? ) : CommandResponse 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 a825db3efa..a81a179f49 100644 --- a/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt @@ -15,15 +15,15 @@ import com.tangem.tasks.TaskError /** * @param cardId CID, Unique Tangem card ID number * @param signature Signed hashes (array of resulting signatures) - * @param remainingSignatures Remaining number of sign operations before the wallet will stop signing transactions. - * @param signedHashes Total number of signed single hashes returned by the card in sign command responses. + * @param walletRemainingSignatures Remaining number of sign operations before the wallet will stop signing transactions. + * @param walletSignedHashes Total number of signed single hashes returned by the card in sign command responses. * Sums up array elements within all SIGN commands */ class SignResponse( val cardId: String, val signature: ByteArray, - val remainingSignatures: Int, - val signedHashes: Int + val walletRemainingSignatures: Int, + val walletSignedHashes: Int ) : CommandResponse /** @@ -64,7 +64,6 @@ class SignCommand(private val hashes: Array, private val cardId: Stri } /** -d * Application can optionally submit a public key Terminal_PublicKey in [SignCommand]. * Submitted key is stored by the Tangem card if it differs from a previous submitted Terminal_PublicKey. * The Tangem card will not enforce security delay if [SignCommand] will be called with @@ -86,8 +85,8 @@ d return SignResponse( cardId = tlvMapper.map(TlvTag.CardId), signature = tlvMapper.map(TlvTag.Signature), - remainingSignatures = tlvMapper.map(TlvTag.RemainingSignatures), - signedHashes = tlvMapper.map(TlvTag.SignedHashes) + walletRemainingSignatures = tlvMapper.map(TlvTag.RemainingSignatures), + walletSignedHashes = tlvMapper.map(TlvTag.SignedHashes) ) } } \ No newline at end of file