Updated on 2026-08-14

This commit is contained in:
Tangem 2020-04-29 18:16:03 +00:00
commit ce36af8a5a
44 changed files with 966 additions and 363 deletions

View file

@ -44,7 +44,7 @@ class ReadIssuerExtraDataResponse(
val issuerDataSignature: ByteArray?,
/**
* An optional counter that protect issuer data against replay attack.
* An optional counter that protects issuer data against replay attack.
* When flag [Settings.ProtectIssuerDataAgainstReplay] set in [SettingsMask]
* then this value is mandatory and must increase on each execution of [WriteIssuerDataCommand].
*/

View file

@ -17,7 +17,7 @@ class WriteUserDataResponse(
) : CommandResponse
/**
* This command write some of User_Data, User_ProtectedData, User_Counter and User_ProtectedCounter fields.
* This command writes to the card any of User_Data, User_ProtectedData, User_Counter and User_ProtectedCounter fields.
* User_Data and User_ProtectedData are never changed or parsed by the executable code the Tangem COS.
* The App defines purpose of use, format and it's payload. For example, this field may contain cashed information
* from blockchain to accelerate preparing new transaction.

View file

@ -3,7 +3,15 @@ package com.tangem.devkit._arch.structure
/**
[REDACTED_AUTHOR]
*/
interface Id
interface Id {
companion object {
fun getTag(id: Id): String {
val className = id.javaClass.simpleName
return if (id is Enum<*>) "$className.${id.name}" else className
}
}
}
class StringId(val value: String) : Id

View file

@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.ColorRes
import com.tangem.devkit.R
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.StringId
import com.tangem.devkit._arch.structure.StringResId
import com.tangem.devkit._arch.structure.abstraction.Item
@ -37,6 +38,7 @@ abstract class BaseViewWidget(
init {
subscribeToViewStateChanges(item.viewModel.viewState)
initViewState(item.viewModel.viewState)
view.tag = Id.getTag(item.id)
}
protected open fun subscribeToViewStateChanges(viewState: ViewState) {

View file

@ -63,15 +63,15 @@ class ActionListFragment : BaseFragment() {
ActionType.Scan,
ActionType.Sign,
ActionType.Personalize,
ActionType.Depersonalize
// ActionType.CreateWallet,
// ActionType.PurgeWallet,
// ActionType.ReadIssuerData,
// ActionType.WriteIssuerData,
// ActionType.ReadIssuerExData,
// ActionType.WriteIssuerExData,
// ActionType.ReadUserData,
// ActionType.WriteUserData
ActionType.Depersonalize,
ActionType.CreateWallet,
ActionType.PurgeWallet,
ActionType.ReadIssuerData,
ActionType.WriteIssuerData,
ActionType.ReadIssuerExData,
ActionType.WriteIssuerExData,
ActionType.ReadUserData,
ActionType.WriteUserData
)
}
}

View file

@ -0,0 +1,23 @@
package com.tangem.devkit.ucase.domain.actions
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.PayloadHolder
import com.tangem.devkit._arch.structure.abstraction.findItem
import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.variants.TlvId
class CreateWalletAction : BaseAction() {
override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
val item = attrs.itemList.findItem(TlvId.CardId) ?: return
val cardId = item.viewModel.data as? String ?: return
attrs.tangemSdk.createWallet(cardId) { handleResult(payload, it, null, attrs, callback) }
}
override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
return when (id) {
TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
else -> null
}
}
}

View file

@ -9,7 +9,7 @@ import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.domain.paramsManager.PayloadKey
import com.tangem.devkit.ucase.tunnel.ActionView
import com.tangem.devkit.ucase.tunnel.ItemError
import com.tangem.devkit.ucase.variants.personalize.CardNumber
import com.tangem.devkit.ucase.variants.personalize.CardNumberId
import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationConfigConverter
import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationConfigToCardConfig
import com.tangem.devkit.ucase.variants.personalize.dto.DefaultPersonalizationParams
@ -46,7 +46,7 @@ class PersonalizeAction : BaseAction() {
}
private fun checkSeries(itemList: List<Item>): Boolean {
val seriesItem = itemList.findItem(CardNumber.Series) as? EditTextItem ?: return false
val seriesItem = itemList.findItem(CardNumberId.Series) as? EditTextItem ?: return false
val data = seriesItem.getData() as? String ?: return false
seriesItem.setData(data.toUpperCase())
@ -54,8 +54,8 @@ class PersonalizeAction : BaseAction() {
}
private fun checkNumber(itemList: List<Item>): Boolean {
val seriesItem = itemList.findItem(CardNumber.Series) as? EditTextItem ?: return false
val numberItem = itemList.findItem(CardNumber.Number) as? NumberItem ?: return false
val seriesItem = itemList.findItem(CardNumberId.Series) as? EditTextItem ?: return false
val numberItem = itemList.findItem(CardNumberId.Number) as? NumberItem ?: return false
val seriesData = seriesItem.getData() as? String ?: return false
val numberData = stringOf(numberItem.getData() as? Number)

View file

@ -0,0 +1,23 @@
package com.tangem.devkit.ucase.domain.actions
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.PayloadHolder
import com.tangem.devkit._arch.structure.abstraction.findItem
import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.variants.TlvId
class PurgeWalletAction : BaseAction() {
override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
val item = attrs.itemList.findItem(TlvId.CardId) ?: return
val cardId = item.viewModel.data as? String ?: return
attrs.tangemSdk.purgeWallet(cardId) { handleResult(payload, it, null, attrs, callback) }
}
override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
return when (id) {
TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
else -> null
}
}
}

View file

@ -0,0 +1,23 @@
package com.tangem.devkit.ucase.domain.actions
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.PayloadHolder
import com.tangem.devkit._arch.structure.abstraction.findItem
import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.variants.TlvId
class ReadIssuerDataAction : BaseAction() {
override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
val item = attrs.itemList.findItem(TlvId.CardId) ?: return
val cardId = item.viewModel.data as? String ?: return
attrs.tangemSdk.readIssuerData(cardId) { handleResult(payload, it, null, attrs, callback) }
}
override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
return when (id) {
TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
else -> null
}
}
}

View file

@ -0,0 +1,23 @@
package com.tangem.devkit.ucase.domain.actions
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.PayloadHolder
import com.tangem.devkit._arch.structure.abstraction.findItem
import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.variants.TlvId
class ReadIssuerExtraDataAction : BaseAction() {
override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
val item = attrs.itemList.findItem(TlvId.CardId) ?: return
val cardId = item.viewModel.data as? String ?: return
attrs.tangemSdk.readIssuerExtraData(cardId) { handleResult(payload, it, null, attrs, callback) }
}
override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
return when (id) {
TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
else -> null
}
}
}

View file

@ -0,0 +1,23 @@
package com.tangem.devkit.ucase.domain.actions
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.PayloadHolder
import com.tangem.devkit._arch.structure.abstraction.findItem
import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.variants.TlvId
class ReadUserDataAction : BaseAction() {
override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
val item = attrs.itemList.findItem(TlvId.CardId) ?: return
val cardId = item.viewModel.data as? String ?: return
attrs.tangemSdk.readUserData(cardId) { handleResult(payload, it, null, attrs, callback) }
}
override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
return when (id) {
TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
else -> null
}
}
}

View file

@ -0,0 +1,37 @@
package com.tangem.devkit.ucase.domain.actions
import com.tangem.common.extensions.hexToBytes
import com.tangem.common.extensions.toByteArray
import com.tangem.crypto.sign
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.PayloadHolder
import com.tangem.devkit._arch.structure.abstraction.findItem
import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.variants.TlvId
import com.tangem.devkit.ucase.variants.personalize.dto.DefaultPersonalizationParams
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
class WriteIssuerDataAction : BaseAction() {
override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
val cardId = attrs.itemList.findItem(TlvId.CardId)?.viewModel?.data ?: return
val counter = (attrs.itemList.findItem(TlvId.Counter)?.viewModel?.data as? Int) ?: 1
val issuerDataItem = attrs.itemList.findItem(TlvId.IssuerData) ?: return
val issuerData = (issuerDataItem.getData() as? String)?.toByteArray() ?: return
val signedIssuerData = (
stringOf(cardId).hexToBytes() + issuerData + counter.toByteArray(4))
.sign(DefaultPersonalizationParams.issuer().dataKeyPair.privateKey)
attrs.tangemSdk.writeIssuerData(stringOf(cardId), issuerData, signedIssuerData, counter) {
handleResult(payload, it, null, attrs, callback)
}
}
override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
return when (id) {
TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
else -> null
}
}
}

View file

@ -0,0 +1,45 @@
package com.tangem.devkit.ucase.domain.actions
import com.tangem.commands.WriteIssuerExtraDataCommand
import com.tangem.common.extensions.hexToBytes
import com.tangem.common.extensions.toByteArray
import com.tangem.crypto.CryptoUtils
import com.tangem.crypto.sign
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.PayloadHolder
import com.tangem.devkit._arch.structure.abstraction.findItem
import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.variants.TlvId
import com.tangem.devkit.ucase.variants.personalize.dto.DefaultPersonalizationParams
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
class WriteIssuerExtraDataAction : BaseAction() {
override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
val cardId = attrs.itemList.findItem(TlvId.CardId)?.viewModel?.data ?: return
val counter = (attrs.itemList.findItem(TlvId.Counter)?.viewModel?.data as? String)?.toInt() ?: 1
val issuerData = CryptoUtils.generateRandomBytes(WriteIssuerExtraDataCommand.SINGLE_WRITE_SIZE * 5)
val startingSignature = (
stringOf(cardId).hexToBytes() + counter.toByteArray(4) + issuerData.size.toByteArray(2))
.sign(DefaultPersonalizationParams.issuer().dataKeyPair.privateKey)
val finalizingSignature = (
stringOf(cardId).hexToBytes() + issuerData + counter.toByteArray(4))
.sign(DefaultPersonalizationParams.issuer().dataKeyPair.privateKey)
attrs.tangemSdk.writeIssuerExtraData(
stringOf(cardId), issuerData, startingSignature, finalizingSignature, counter
) {
handleResult(payload, it, null, attrs, callback)
}
}
override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
return when (id) {
TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
else -> null
}
}
}

View file

@ -0,0 +1,31 @@
package com.tangem.devkit.ucase.domain.actions
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.PayloadHolder
import com.tangem.devkit._arch.structure.abstraction.findItem
import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
import com.tangem.devkit.ucase.variants.TlvId
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
class WriteUserDataAction : BaseAction() {
override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
val userData = (attrs.itemList.findItem(TlvId.UserData)?.getData() as? String)?.toByteArray()
?: return
val protectedUserData = (attrs.itemList.findItem(TlvId.ProtectedUserData)?.getData() as? String)?.toByteArray()
?: return
val cardId = attrs.itemList.findItem(TlvId.CardId)?.viewModel?.data ?: return
val counter = (attrs.itemList.findItem(TlvId.Counter)?.viewModel?.data as? Int) ?: 1
attrs.tangemSdk.writeUserData(stringOf(cardId), userData, protectedUserData, counter, counter) {
handleResult(payload, it, null, attrs, callback)
}
}
override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
return when (id) {
TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
TlvId.Counter -> { callback -> ReadUserDataAction().executeMainAction(payload, attrs, callback) }
else -> null
}
}
}

View file

@ -1,9 +1,7 @@
package com.tangem.devkit.ucase.domain.paramsManager.managers
import com.tangem.devkit._arch.structure.impl.EditTextItem
import com.tangem.devkit.ucase.domain.actions.DepersonalizeAction
import com.tangem.devkit.ucase.domain.actions.ScanAction
import com.tangem.devkit.ucase.domain.actions.SignAction
import com.tangem.devkit.ucase.domain.actions.*
import com.tangem.devkit.ucase.domain.paramsManager.triggers.changeConsequence.CardIdConsequence
import com.tangem.devkit.ucase.variants.TlvId
@ -29,4 +27,78 @@ class SignItemsManager : BaseItemsManager(SignAction()) {
EditTextItem(TlvId.TransactionOutHash, "Data used for hashing")
))
}
}
class CreateWalletItemsManager : BaseItemsManager(CreateWalletAction()) {
init {
setItemChangeConsequences(CardIdConsequence())
setItems(listOf(EditTextItem(TlvId.CardId, null)))
}
}
class PurgeWalletItemsManager : BaseItemsManager(PurgeWalletAction()) {
init {
setItemChangeConsequences(CardIdConsequence())
setItems(listOf(EditTextItem(TlvId.CardId, null)))
}
}
class ReadIssuerDataItemsManager : BaseItemsManager(ReadIssuerDataAction()) {
init {
setItemChangeConsequences(CardIdConsequence())
setItems(listOf(EditTextItem(TlvId.CardId, null)))
}
}
class WriteIssuerDataItemsManager : BaseItemsManager(WriteIssuerDataAction()) {
init {
setItemChangeConsequences(CardIdConsequence())
setItems(listOf(
EditTextItem(TlvId.CardId, null),
EditTextItem(TlvId.IssuerData, "Data to be written on a card as issuer data"),
EditTextItem(TlvId.Counter, "1")
))
}
}
class ReadIssuerExtraDataItemsManager : BaseItemsManager(ReadIssuerExtraDataAction()) {
init {
setItemChangeConsequences(CardIdConsequence())
setItems(listOf(EditTextItem(TlvId.CardId, null)))
}
}
class WriteIssuerExtraDataItemsManager : BaseItemsManager(WriteIssuerExtraDataAction()) {
init {
setItemChangeConsequences(CardIdConsequence())
setItems(listOf(
EditTextItem(TlvId.CardId, null),
EditTextItem(TlvId.Counter, "1")
))
}
}
class ReadUserDataItemsManager : BaseItemsManager(ReadUserDataAction()) {
init {
setItemChangeConsequences(CardIdConsequence())
setItems(listOf(EditTextItem(TlvId.CardId, null)))
}
}
class WriteUserDataItemsManager : BaseItemsManager(WriteUserDataAction()) {
init {
setItemChangeConsequences(CardIdConsequence())
setItems(listOf(
EditTextItem(TlvId.CardId, null),
EditTextItem(TlvId.Counter, "1"),
EditTextItem(TlvId.UserData, "User data to be written on a card"),
EditTextItem(TlvId.ProtectedUserData, "Protected user data to be written on a card")
))
}
}

View file

@ -41,94 +41,94 @@ class PersonalizationResources() {
}
private fun initCardNumber(holder: TypedHolder<Id, Resources>) {
holder.register(CardNumber.Series, Resources(R.string.pers_item_series, R.string.info_pers_item_series))
holder.register(CardNumber.Number, Resources(R.string.pers_item_number, R.string.info_pers_item_number))
holder.register(CardNumber.BatchId, Resources(R.string.pers_item_batch_id, R.string.info_pers_item_batch_id))
holder.register(CardNumberId.Series, Resources(R.string.pers_item_series, R.string.info_pers_item_series))
holder.register(CardNumberId.Number, Resources(R.string.pers_item_number, R.string.info_pers_item_number))
holder.register(CardNumberId.BatchId, Resources(R.string.pers_item_batch_id, R.string.info_pers_item_batch_id))
}
private fun initCommon(holder: TypedHolder<Id, Resources>) {
holder.register(Common.Curve, Resources(R.string.pers_item_curve, R.string.info_pers_item_curve))
holder.register(Common.Blockchain, Resources(R.string.pers_item_blockchain, R.string.info_pers_item_blockchain))
holder.register(Common.BlockchainCustom, Resources(R.string.pers_item_custom_blockchain, R.string.info_pers_item_custom_blockchain))
holder.register(Common.MaxSignatures, Resources(R.string.pers_item_max_signatures, R.string.info_pers_item_max_signatures))
holder.register(Common.CreateWallet, Resources(R.string.pers_item_create_wallet, R.string.info_pers_item_create_wallet))
holder.register(CommonId.Curve, Resources(R.string.pers_item_curve, R.string.info_pers_item_curve))
holder.register(CommonId.Blockchain, Resources(R.string.pers_item_blockchain, R.string.info_pers_item_blockchain))
holder.register(CommonId.BlockchainCustom, Resources(R.string.pers_item_custom_blockchain, R.string.info_pers_item_custom_blockchain))
holder.register(CommonId.MaxSignatures, Resources(R.string.pers_item_max_signatures, R.string.info_pers_item_max_signatures))
holder.register(CommonId.CreateWallet, Resources(R.string.pers_item_create_wallet, R.string.info_pers_item_create_wallet))
}
private fun initSigningMethod(holder: TypedHolder<Id, Resources>) {
holder.register(SigningMethod.SignTx, Resources(R.string.pers_item_sign_tx_hashes, R.string.info_pers_item_sign_tx_hashes))
holder.register(SigningMethod.SignTxRaw, Resources(R.string.pers_item_sign_raw_tx, R.string.info_pers_item_sign_raw_tx))
holder.register(SigningMethod.SignValidatedTx, Resources(R.string.pers_item_sign_validated_tx_hashes, R.string.info_pers_item_sign_validated_tx_hashes))
holder.register(SigningMethod.SignValidatedTxRaw, Resources(R.string.pers_item_sign_validated_raw_tx, R.string.info_pers_item_sign_validated_raw_tx))
holder.register(SigningMethod.SignValidatedTxIssuer, Resources(R.string.pers_item_sign_validated_tx_hashes_with_iss_data, R.string.info_pers_item_sign_validated_tx_hashes_with_iss_data))
holder.register(SigningMethod.SignValidatedTxRawIssuer, Resources(R.string.pers_item_sign_validated_raw_tx_with_iss_data, R.string.info_pers_item_sign_validated_raw_tx_with_iss_data))
holder.register(SigningMethod.SignExternal, Resources(R.string.pers_item_sign_hash_ex, R.string.info_pers_item_sign_hash_ex))
holder.register(SigningMethodId.SignTx, Resources(R.string.pers_item_sign_tx_hashes, R.string.info_pers_item_sign_tx_hashes))
holder.register(SigningMethodId.SignTxRaw, Resources(R.string.pers_item_sign_raw_tx, R.string.info_pers_item_sign_raw_tx))
holder.register(SigningMethodId.SignValidatedTx, Resources(R.string.pers_item_sign_validated_tx_hashes, R.string.info_pers_item_sign_validated_tx_hashes))
holder.register(SigningMethodId.SignValidatedTxRaw, Resources(R.string.pers_item_sign_validated_raw_tx, R.string.info_pers_item_sign_validated_raw_tx))
holder.register(SigningMethodId.SignValidatedTxIssuer, Resources(R.string.pers_item_sign_validated_tx_hashes_with_iss_data, R.string.info_pers_item_sign_validated_tx_hashes_with_iss_data))
holder.register(SigningMethodId.SignValidatedTxRawIssuer, Resources(R.string.pers_item_sign_validated_raw_tx_with_iss_data, R.string.info_pers_item_sign_validated_raw_tx_with_iss_data))
holder.register(SigningMethodId.SignExternal, Resources(R.string.pers_item_sign_hash_ex, R.string.info_pers_item_sign_hash_ex))
}
private fun initSignHashExProp(holder: TypedHolder<Id, Resources>) {
holder.register(SignHashExProp.PinLessFloorLimit, Resources(R.string.pers_item_pin_less_floor_limit, R.string.info_pers_item_pin_less_floor_limit))
holder.register(SignHashExProp.CryptoExKey, Resources(R.string.pers_item_cr_ex_key, R.string.info_pers_item_cr_ex_key))
holder.register(SignHashExProp.RequireTerminalCertSig, Resources(R.string.pers_item_require_terminal_cert_sig, R.string.info_pers_item_require_terminal_cert_sig))
holder.register(SignHashExProp.RequireTerminalTxSig, Resources(R.string.pers_item_require_terminal_tx_sig, R.string.info_pers_item_require_terminal_tx_sig))
holder.register(SignHashExProp.CheckPin3, Resources(R.string.pers_item_check_pin3_on_card, R.string.info_pers_item_check_pin3_on_card))
holder.register(SignHashExPropId.PinLessFloorLimit, Resources(R.string.pers_item_pin_less_floor_limit, R.string.info_pers_item_pin_less_floor_limit))
holder.register(SignHashExPropId.CryptoExKey, Resources(R.string.pers_item_cr_ex_key, R.string.info_pers_item_cr_ex_key))
holder.register(SignHashExPropId.RequireTerminalCertSig, Resources(R.string.pers_item_require_terminal_cert_sig, R.string.info_pers_item_require_terminal_cert_sig))
holder.register(SignHashExPropId.RequireTerminalTxSig, Resources(R.string.pers_item_require_terminal_tx_sig, R.string.info_pers_item_require_terminal_tx_sig))
holder.register(SignHashExPropId.CheckPin3, Resources(R.string.pers_item_check_pin3_on_card, R.string.info_pers_item_check_pin3_on_card))
}
private fun initDenomination(holder: TypedHolder<Id, Resources>) {
holder.register(Denomination.WriteOnPersonalize, Resources(R.string.pers_item_write_on_personalize, R.string.info_pers_item_write_on_personalize))
holder.register(Denomination.Denomination, Resources(R.string.pers_item_denomination, R.string.info_pers_item_denomination))
holder.register(DenominationId.WriteOnPersonalize, Resources(R.string.pers_item_write_on_personalize, R.string.info_pers_item_write_on_personalize))
holder.register(DenominationId.Denomination, Resources(R.string.pers_item_denomination, R.string.info_pers_item_denomination))
}
private fun initToken(holder: TypedHolder<Id, Resources>) {
holder.register(Token.ItsToken, Resources(R.string.pers_item_its_token, R.string.info_pers_item_its_token))
holder.register(Token.Symbol, Resources(R.string.pers_item_symbol, R.string.info_pers_item_symbol))
holder.register(Token.ContractAddress, Resources(R.string.pers_item_contract_address, R.string.info_pers_item_contract_address))
holder.register(Token.Decimal, Resources(R.string.pers_item_decimal, R.string.info_pers_item_decimal))
holder.register(TokenId.ItsToken, Resources(R.string.pers_item_its_token, R.string.info_pers_item_its_token))
holder.register(TokenId.Symbol, Resources(R.string.pers_item_symbol, R.string.info_pers_item_symbol))
holder.register(TokenId.ContractAddress, Resources(R.string.pers_item_contract_address, R.string.info_pers_item_contract_address))
holder.register(TokenId.Decimal, Resources(R.string.pers_item_decimal, R.string.info_pers_item_decimal))
}
private fun initProductMask(holder: TypedHolder<Id, Resources>) {
holder.register(ProductMask.Note, Resources(R.string.pers_item_note, R.string.info_pers_item_note))
holder.register(ProductMask.Tag, Resources(R.string.pers_item_tag, R.string.info_pers_item_tag))
holder.register(ProductMask.IdCard, Resources(R.string.pers_item_id_card, R.string.info_pers_item_id_card))
holder.register(ProductMask.IdIssuerCard, Resources(R.string.pers_item_id_issuer_card, R.string.info_pers_item_id_issuer_card))
holder.register(ProductMaskId.Note, Resources(R.string.pers_item_note, R.string.info_pers_item_note))
holder.register(ProductMaskId.Tag, Resources(R.string.pers_item_tag, R.string.info_pers_item_tag))
holder.register(ProductMaskId.IdCard, Resources(R.string.pers_item_id_card, R.string.info_pers_item_id_card))
holder.register(ProductMaskId.IdIssuerCard, Resources(R.string.pers_item_id_issuer_card, R.string.info_pers_item_id_issuer_card))
}
private fun initSettingsMask(holder: TypedHolder<Id, Resources>) {
holder.register(SettingsMask.IsReusable, Resources(R.string.pers_item_is_reusable, R.string.info_pers_item_is_reusable))
holder.register(SettingsMask.NeedActivation, Resources(R.string.pers_item_need_activation, R.string.info_pers_item_need_activation))
holder.register(SettingsMask.ForbidPurge, Resources(R.string.pers_item_forbid_purge, R.string.info_pers_item_forbid_purge))
holder.register(SettingsMask.AllowSelectBlockchain, Resources(R.string.pers_item_allow_select_blockchain, R.string.info_pers_item_allow_select_blockchain))
holder.register(SettingsMask.UseBlock, Resources(R.string.pers_item_use_block, R.string.info_pers_item_use_block))
holder.register(SettingsMask.OneApdu, Resources(R.string.pers_item_one_apdu_at_once, R.string.info_pers_item_one_apdu_at_once))
holder.register(SettingsMask.UseCvc, Resources(R.string.pers_item_use_cvc, R.string.info_pers_item_use_cvc))
holder.register(SettingsMask.AllowSwapPin, Resources(R.string.pers_item_allow_swap_pin, R.string.info_pers_item_allow_swap_pin))
holder.register(SettingsMask.AllowSwapPin2, Resources(R.string.pers_item_allow_swap_pin2, R.string.info_pers_item_allow_swap_pin2))
holder.register(SettingsMask.ForbidDefaultPin, Resources(R.string.pers_item_forbid_default_pin, R.string.info_pers_item_forbid_default_pin))
holder.register(SettingsMask.SmartSecurityDelay, Resources(R.string.pers_item_smart_security_delay, R.string.info_pers_item_smart_security_delay))
holder.register(SettingsMask.ProtectIssuerDataAgainstReplay, Resources(R.string.pers_item_protect_issuer_data_against_replay, R.string.info_pers_item_protect_issuer_data_against_replay))
holder.register(SettingsMask.SkipSecurityDelayIfValidated, Resources(R.string.pers_item_skip_security_delay_if_validated, R.string.info_pers_item_skip_security_delay_if_validated))
holder.register(SettingsMask.SkipPin2CvcIfValidated, Resources(R.string.pers_item_skip_pin2_and_cvc_if_validated, R.string.info_pers_item_skip_pin2_and_cvc_if_validated))
holder.register(SettingsMask.SkipSecurityDelayOnLinkedTerminal, Resources(R.string.pers_item_skip_security_delay_on_linked_terminal, R.string.info_pers_item_skip_security_delay_on_linked_terminal))
holder.register(SettingsMask.RestrictOverwriteExtraIssuerData, Resources(R.string.pers_item_restrict_overwrite_ex_issuer_data, R.string.info_pers_item_restrict_overwrite_ex_issuer_data))
holder.register(SettingsMaskId.IsReusable, Resources(R.string.pers_item_is_reusable, R.string.info_pers_item_is_reusable))
holder.register(SettingsMaskId.NeedActivation, Resources(R.string.pers_item_need_activation, R.string.info_pers_item_need_activation))
holder.register(SettingsMaskId.ForbidPurge, Resources(R.string.pers_item_forbid_purge, R.string.info_pers_item_forbid_purge))
holder.register(SettingsMaskId.AllowSelectBlockchain, Resources(R.string.pers_item_allow_select_blockchain, R.string.info_pers_item_allow_select_blockchain))
holder.register(SettingsMaskId.UseBlock, Resources(R.string.pers_item_use_block, R.string.info_pers_item_use_block))
holder.register(SettingsMaskId.OneApdu, Resources(R.string.pers_item_one_apdu_at_once, R.string.info_pers_item_one_apdu_at_once))
holder.register(SettingsMaskId.UseCvc, Resources(R.string.pers_item_use_cvc, R.string.info_pers_item_use_cvc))
holder.register(SettingsMaskId.AllowSwapPin, Resources(R.string.pers_item_allow_swap_pin, R.string.info_pers_item_allow_swap_pin))
holder.register(SettingsMaskId.AllowSwapPin2, Resources(R.string.pers_item_allow_swap_pin2, R.string.info_pers_item_allow_swap_pin2))
holder.register(SettingsMaskId.ForbidDefaultPin, Resources(R.string.pers_item_forbid_default_pin, R.string.info_pers_item_forbid_default_pin))
holder.register(SettingsMaskId.SmartSecurityDelay, Resources(R.string.pers_item_smart_security_delay, R.string.info_pers_item_smart_security_delay))
holder.register(SettingsMaskId.ProtectIssuerDataAgainstReplay, Resources(R.string.pers_item_protect_issuer_data_against_replay, R.string.info_pers_item_protect_issuer_data_against_replay))
holder.register(SettingsMaskId.SkipSecurityDelayIfValidated, Resources(R.string.pers_item_skip_security_delay_if_validated, R.string.info_pers_item_skip_security_delay_if_validated))
holder.register(SettingsMaskId.SkipPin2CvcIfValidated, Resources(R.string.pers_item_skip_pin2_and_cvc_if_validated, R.string.info_pers_item_skip_pin2_and_cvc_if_validated))
holder.register(SettingsMaskId.SkipSecurityDelayOnLinkedTerminal, Resources(R.string.pers_item_skip_security_delay_on_linked_terminal, R.string.info_pers_item_skip_security_delay_on_linked_terminal))
holder.register(SettingsMaskId.RestrictOverwriteExtraIssuerData, Resources(R.string.pers_item_restrict_overwrite_ex_issuer_data, R.string.info_pers_item_restrict_overwrite_ex_issuer_data))
}
private fun initSettingsMaskProtocolEnc(holder: TypedHolder<Id, Resources>) {
holder.register(SettingsMaskProtocolEnc.AllowUnencrypted, Resources(R.string.pers_item_allow_unencrypted, R.string.info_pers_item_allow_unencrypted))
holder.register(SettingsMaskProtocolEnc.AllowStaticEncryption, Resources(R.string.pers_item_allow_fast_encryption, R.string.info_pers_item_allow_fast_encryption))
holder.register(SettingsMaskProtocolEncId.AllowUnencrypted, Resources(R.string.pers_item_allow_unencrypted, R.string.info_pers_item_allow_unencrypted))
holder.register(SettingsMaskProtocolEncId.AllowStaticEncryption, Resources(R.string.pers_item_allow_fast_encryption, R.string.info_pers_item_allow_fast_encryption))
}
private fun initSettingsMaskNdef(holder: TypedHolder<Id, Resources>) {
holder.register(SettingsMaskNdef.UseNdef, Resources(R.string.pers_item_use_ndef, R.string.info_pers_item_use_ndef))
holder.register(SettingsMaskNdef.DynamicNdef, Resources(R.string.pers_item_dynamic_ndef, R.string.info_pers_item_dynamic_ndef))
holder.register(SettingsMaskNdef.DisablePrecomputedNdef, Resources(R.string.pers_item_disable_precomputed_ndef, R.string.info_pers_item_disable_precomputed_ndef))
holder.register(SettingsMaskNdef.Aar, Resources(R.string.pers_item_aar, R.string.info_pers_item_aar))
holder.register(SettingsMaskNdef.AarCustom, Resources(R.string.pers_item_custom_aar_package_name, R.string.info_pers_item_custom_aar_package_name))
holder.register(SettingsMaskNdef.Uri, Resources(R.string.pers_item_uri, R.string.info_pers_item_uri))
holder.register(SettingsMaskNdefId.UseNdef, Resources(R.string.pers_item_use_ndef, R.string.info_pers_item_use_ndef))
holder.register(SettingsMaskNdefId.DynamicNdef, Resources(R.string.pers_item_dynamic_ndef, R.string.info_pers_item_dynamic_ndef))
holder.register(SettingsMaskNdefId.DisablePrecomputedNdef, Resources(R.string.pers_item_disable_precomputed_ndef, R.string.info_pers_item_disable_precomputed_ndef))
holder.register(SettingsMaskNdefId.Aar, Resources(R.string.pers_item_aar, R.string.info_pers_item_aar))
holder.register(SettingsMaskNdefId.AarCustom, Resources(R.string.pers_item_custom_aar_package_name, R.string.info_pers_item_custom_aar_package_name))
holder.register(SettingsMaskNdefId.Uri, Resources(R.string.pers_item_uri, R.string.info_pers_item_uri))
}
private fun initPins(holder: TypedHolder<Id, Resources>) {
holder.register(Pins.Pin, Resources(R.string.pers_item_pin, R.string.info_pers_item_pin))
holder.register(Pins.Pin2, Resources(R.string.pers_item_pin2, R.string.info_pers_item_pin2))
holder.register(Pins.Pin3, Resources(R.string.pers_item_pin3, R.string.info_pers_item_pin3))
holder.register(Pins.Cvc, Resources(R.string.pers_item_cvc, R.string.info_pers_item_cvc))
holder.register(Pins.PauseBeforePin2, Resources(R.string.pers_item_pause_before_pin2, R.string.info_pers_item_pause_before_pin2))
holder.register(PinsId.Pin, Resources(R.string.pers_item_pin, R.string.info_pers_item_pin))
holder.register(PinsId.Pin2, Resources(R.string.pers_item_pin2, R.string.info_pers_item_pin2))
holder.register(PinsId.Pin3, Resources(R.string.pers_item_pin3, R.string.info_pers_item_pin3))
holder.register(PinsId.Cvc, Resources(R.string.pers_item_cvc, R.string.info_pers_item_cvc))
holder.register(PinsId.PauseBeforePin2, Resources(R.string.pers_item_pause_before_pin2, R.string.info_pers_item_pause_before_pin2))
}
}

View file

@ -3,10 +3,7 @@ package com.tangem.devkit.ucase.resources.initializers
import com.tangem.devkit.R
import com.tangem.devkit.ucase.resources.MainResourceHolder
import com.tangem.devkit.ucase.resources.Resources
import com.tangem.devkit.ucase.variants.responses.CardDataId
import com.tangem.devkit.ucase.variants.responses.CardId
import com.tangem.devkit.ucase.variants.responses.DepersonalizeId
import com.tangem.devkit.ucase.variants.responses.SignId
import com.tangem.devkit.ucase.variants.responses.*
/**
[REDACTED_AUTHOR]
@ -17,6 +14,13 @@ class ResponseResources {
initCardData(holder)
initSignResponse(holder)
initDepersonalizeResponse(holder)
initCreateWalletResponse(holder)
initPurgeWalletResponse(holder)
initReadIssuerDataResponse(holder)
initWriteIssuerDataResponse(holder)
initReadIssuerExtraDataResponse(holder)
initReadUserDataResponse(holder)
initWriteUserDataResponse(holder)
}
private fun initCard(holder: MainResourceHolder) {
@ -65,4 +69,46 @@ class ResponseResources {
private fun initDepersonalizeResponse(holder: MainResourceHolder) {
holder.register(DepersonalizeId.isSuccess, Resources(R.string.response_depersonalize_is_success, R.string.info_response_depersonalize_is_success))
}
private fun initCreateWalletResponse(holder: MainResourceHolder) {
holder.register(CreateWalletId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
holder.register(CreateWalletId.cardStatus, Resources(R.string.response_card_status, R.string.info_response_card_status))
holder.register(CreateWalletId.walletPublicKey, Resources(R.string.response_card_wallet_public_key, R.string.info_response_card_wallet_public_key))
}
private fun initPurgeWalletResponse(holder: MainResourceHolder) {
holder.register(PurgeWalletId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
holder.register(PurgeWalletId.cardStatus, Resources(R.string.response_card_status, R.string.info_response_card_status))
}
private fun initReadIssuerDataResponse(holder: MainResourceHolder) {
holder.register(ReadIssuerDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
holder.register(ReadIssuerDataId.issuerData, Resources(R.string.response_issuer_data, R.string.info_response_issuer_data))
holder.register(ReadIssuerDataId.issuerDataSignature, Resources(R.string.response_issuer_data_signature, R.string.info_response_issuer_data_signature))
holder.register(ReadIssuerDataId.issuerDataCounter, Resources(R.string.response_issuer_data_counter, R.string.info_response_issuer_data_counter))
}
private fun initWriteIssuerDataResponse(holder: MainResourceHolder) {
holder.register(ReadIssuerDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
}
private fun initReadIssuerExtraDataResponse(holder: MainResourceHolder) {
holder.register(ReadIssuerExtraDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
holder.register(ReadIssuerExtraDataId.size, Resources(R.string.response_issuer_data_size, R.string.info_response_issuer_data_size))
holder.register(ReadIssuerExtraDataId.issuerData, Resources(R.string.response_issuer_data, R.string.info_response_issuer_data))
holder.register(ReadIssuerExtraDataId.issuerDataSignature, Resources(R.string.response_issuer_data_signature, R.string.info_response_issuer_data_signature))
holder.register(ReadIssuerExtraDataId.issuerDataCounter, Resources(R.string.response_issuer_data_counter, R.string.info_response_issuer_data_counter))
}
private fun initReadUserDataResponse(holder: MainResourceHolder) {
holder.register(ReadUserDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
holder.register(ReadUserDataId.userData, Resources(R.string.response_user_data, R.string.info_response_user_data))
holder.register(ReadUserDataId.userProtectedData, Resources(R.string.response_user_protected_data, R.string.info_response_user_protected_data))
holder.register(ReadUserDataId.userCounter, Resources(R.string.response_user_data_counter, R.string.info_response_user_data_counter))
holder.register(ReadUserDataId.userProtectedCounter, Resources(R.string.response_user_data_protected_counter, R.string.info_response_user_data_protected_counter))
}
private fun initWriteUserDataResponse(holder: MainResourceHolder) {
holder.register(ReadIssuerDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
}
}

View file

@ -16,5 +16,9 @@ class TlvResources {
private fun initScan(holder: MainResourceHolder) {
holder.register(TlvId.CardId, Resources(R.string.tlv_card_id, R.string.info_tlv_card_id))
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.ProtectedUserData, Resources(R.string.tlv_user_protected_data, R.string.info_tlv_protected_user_data))
}
}

View file

@ -140,7 +140,7 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView {
})
}
private fun inflateParamView(where: ViewGroup): ViewGroup {
protected fun inflateParamView(where: ViewGroup): ViewGroup {
val inflater = LayoutInflater.from(where.context)
val view = inflater.inflate(R.layout.w_card_incoming_param, where, false)
where.plusAssign(view)

View file

@ -56,6 +56,7 @@ class ParameterWidget(
btnAction.setText(getResNameId(ActionType.Scan))
toggleActionBtnVisibility()
initDescriptionWidget()
parent.tag = Id.getTag(typedItem.id)
}
fun changeParamValue(data: Any?, silent: Boolean = true) {

View file

@ -8,4 +8,8 @@ import com.tangem.devkit._arch.structure.Id
enum class TlvId : Id {
CardId,
TransactionOutHash,
IssuerData,
Counter,
UserData,
ProtectedUserData
}

View file

@ -0,0 +1,10 @@
package com.tangem.devkit.ucase.variants.createwallet.ui
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.paramsManager.managers.CreateWalletItemsManager
import com.tangem.devkit.ucase.ui.BaseCardActionFragment
class CreateWalletActionFragment : BaseCardActionFragment() {
override val itemsManager: ItemsManager by lazy { CreateWalletItemsManager() }
}

View file

@ -0,0 +1,10 @@
package com.tangem.devkit.ucase.variants.issuerdata.ui
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.paramsManager.managers.ReadIssuerDataItemsManager
import com.tangem.devkit.ucase.ui.BaseCardActionFragment
class ReadIssuerDataFragment : BaseCardActionFragment() {
override val itemsManager: ItemsManager by lazy { ReadIssuerDataItemsManager() }
}

View file

@ -0,0 +1,10 @@
package com.tangem.devkit.ucase.variants.issuerdata.ui
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.paramsManager.managers.ReadIssuerExtraDataItemsManager
import com.tangem.devkit.ucase.ui.BaseCardActionFragment
class ReadIssuerExtraDataFragment : BaseCardActionFragment() {
override val itemsManager: ItemsManager by lazy { ReadIssuerExtraDataItemsManager() }
}

View file

@ -0,0 +1,10 @@
package com.tangem.devkit.ucase.variants.issuerdata.ui
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.paramsManager.managers.WriteIssuerDataItemsManager
import com.tangem.devkit.ucase.ui.BaseCardActionFragment
class WriteIssuerDataFragment : BaseCardActionFragment() {
override val itemsManager: ItemsManager by lazy { WriteIssuerDataItemsManager() }
}

View file

@ -0,0 +1,10 @@
package com.tangem.devkit.ucase.variants.issuerdata.ui
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.paramsManager.managers.WriteIssuerExtraDataItemsManager
import com.tangem.devkit.ucase.ui.BaseCardActionFragment
class WriteIssuerExtraDataFragment : BaseCardActionFragment() {
override val itemsManager: ItemsManager by lazy { WriteIssuerExtraDataItemsManager() }
}

View file

@ -22,13 +22,13 @@ enum class BlockId : PersonalizationId {
Pins,
}
enum class CardNumber : PersonalizationId {
enum class CardNumberId : PersonalizationId {
Series,
Number,
BatchId,
}
enum class Common : PersonalizationId {
enum class CommonId : PersonalizationId {
Curve,
Blockchain,
BlockchainCustom,
@ -36,7 +36,7 @@ enum class Common : PersonalizationId {
CreateWallet,
}
enum class SigningMethod : PersonalizationId {
enum class SigningMethodId : PersonalizationId {
SignTx,
SignTxRaw,
SignValidatedTx,
@ -46,7 +46,7 @@ enum class SigningMethod : PersonalizationId {
SignExternal,
}
enum class SignHashExProp : PersonalizationId {
enum class SignHashExPropId : PersonalizationId {
PinLessFloorLimit,
CryptoExKey,
RequireTerminalCertSig,
@ -54,26 +54,26 @@ enum class SignHashExProp : PersonalizationId {
CheckPin3,
}
enum class Denomination : PersonalizationId {
enum class DenominationId : PersonalizationId {
WriteOnPersonalize,
Denomination,
}
enum class Token : PersonalizationId {
enum class TokenId : PersonalizationId {
ItsToken,
Symbol,
ContractAddress,
Decimal
}
enum class ProductMask : PersonalizationId {
enum class ProductMaskId : PersonalizationId {
Note,
Tag,
IdCard,
IdIssuerCard
}
enum class SettingsMask : PersonalizationId {
enum class SettingsMaskId : PersonalizationId {
IsReusable,
NeedActivation,
ForbidPurge,
@ -92,12 +92,12 @@ enum class SettingsMask : PersonalizationId {
RestrictOverwriteExtraIssuerData,
}
enum class SettingsMaskProtocolEnc : PersonalizationId {
enum class SettingsMaskProtocolEncId : PersonalizationId {
AllowUnencrypted,
AllowStaticEncryption
}
enum class SettingsMaskNdef : PersonalizationId {
enum class SettingsMaskNdefId : PersonalizationId {
UseNdef,
DynamicNdef,
DisablePrecomputedNdef,
@ -106,7 +106,7 @@ enum class SettingsMaskNdef : PersonalizationId {
Uri,
}
enum class Pins : PersonalizationId {
enum class PinsId : PersonalizationId {
Pin,
Pin2,
Pin3,

View file

@ -14,65 +14,65 @@ class ConfigValuesHolder : BaseTypedHolder<Id, Value>() {
// All registered association values can't be objects
fun init(default: PersonalizationConfig) {
register(CardNumber.Series, Value(default.series))
register(CardNumber.Number, Value(default.startNumber))
register(CardNumber.BatchId, Value(default.batchId))
register(Common.Curve, Value(default.curveID, Helper.listOfCurves()))
register(Common.Blockchain, Value(default.blockchain, Helper.listOfBlockchain()))
register(Common.BlockchainCustom, Value(default.blockchainCustom))
register(Common.MaxSignatures, Value(default.MaxSignatures))
register(Common.CreateWallet, Value(default.createWallet))
register(SigningMethod.SignTx, Value(default.SigningMethod0))
register(SigningMethod.SignTxRaw, Value(default.SigningMethod1))
register(SigningMethod.SignValidatedTx, Value(default.SigningMethod2))
register(SigningMethod.SignValidatedTxRaw, Value(default.SigningMethod3))
register(SigningMethod.SignValidatedTxIssuer, Value(default.SigningMethod4))
register(SigningMethod.SignValidatedTxRawIssuer, Value(default.SigningMethod5))
register(SigningMethod.SignExternal, Value(default.SigningMethod6))
register(SignHashExProp.PinLessFloorLimit, Value(default.pinLessFloorLimit))
register(SignHashExProp.CryptoExKey, Value(default.hexCrExKey))
register(SignHashExProp.RequireTerminalCertSig, Value(default.requireTerminalCertSignature))
register(SignHashExProp.RequireTerminalTxSig, Value(default.requireTerminalTxSignature))
register(SignHashExProp.CheckPin3, Value(default.checkPIN3onCard))
register(Denomination.WriteOnPersonalize, Value(default.writeOnPersonalization))
register(Denomination.Denomination, Value(default.denomination))
register(Token.ItsToken, Value(default.itsToken))
register(Token.Symbol, Value(default.symbol))
register(Token.ContractAddress, Value(default.contractAddress))
register(Token.Decimal, Value(default.decimal))
register(ProductMask.Note, Value(default.cardData.product_note))
register(ProductMask.Tag, Value(default.cardData.product_tag))
register(ProductMask.IdCard, Value(default.cardData.product_id_card))
register(ProductMask.IdIssuerCard, Value(default.cardData.product_id_issuer))
register(SettingsMask.IsReusable, Value(default.isReusable))
register(SettingsMask.NeedActivation, Value(default.useActivation))
register(SettingsMask.ForbidPurge, Value(default.forbidPurgeWallet))
register(SettingsMask.AllowSelectBlockchain, Value(default.allowSelectBlockchain))
register(SettingsMask.UseBlock, Value(default.useBlock))
register(SettingsMask.OneApdu, Value(default.oneApdu))
register(SettingsMask.UseCvc, Value(default.useCVC))
register(SettingsMask.AllowSwapPin, Value(default.allowSwapPIN))
register(SettingsMask.AllowSwapPin2, Value(default.allowSwapPIN2))
register(SettingsMask.ForbidDefaultPin, Value(default.forbidDefaultPIN))
register(SettingsMask.SmartSecurityDelay, Value(default.smartSecurityDelay))
register(SettingsMask.ProtectIssuerDataAgainstReplay, Value(default.protectIssuerDataAgainstReplay))
register(SettingsMask.SkipSecurityDelayIfValidated, Value(default.skipSecurityDelayIfValidatedByIssuer))
register(SettingsMask.SkipPin2CvcIfValidated, Value(default.skipCheckPIN2andCVCIfValidatedByIssuer))
register(SettingsMask.SkipSecurityDelayOnLinkedTerminal, Value(default.skipSecurityDelayIfValidatedByLinkedTerminal))
register(SettingsMask.RestrictOverwriteExtraIssuerData, Value(default.restrictOverwriteIssuerDataEx))
register(SettingsMaskProtocolEnc.AllowUnencrypted, Value(default.protocolAllowUnencrypted))
register(SettingsMaskProtocolEnc.AllowStaticEncryption, Value(default.protocolAllowStaticEncryption))
register(SettingsMaskNdef.UseNdef, Value(default.useNDEF))
register(SettingsMaskNdef.DynamicNdef, Value(default.useDynamicNDEF))
register(SettingsMaskNdef.DisablePrecomputedNdef, Value(default.disablePrecomputedNDEF))
register(SettingsMaskNdef.Aar, Value(default.aar, Helper.aarList()))
register(SettingsMaskNdef.AarCustom, Value(default.aarCustom))
register(SettingsMaskNdef.Uri, Value(default.uri))
register(Pins.Pin, Value(default.PIN))
register(Pins.Pin2, Value(default.PIN2))
register(Pins.Pin3, Value(default.PIN3))
register(Pins.Cvc, Value(default.CVC))
register(Pins.PauseBeforePin2, Value(default.pauseBeforePIN2, Helper.pauseBeforePin()))
register(CardNumberId.Series, Value(default.series))
register(CardNumberId.Number, Value(default.startNumber))
register(CardNumberId.BatchId, Value(default.batchId))
register(CommonId.Curve, Value(default.curveID, Helper.listOfCurves()))
register(CommonId.Blockchain, Value(default.blockchain, Helper.listOfBlockchain()))
register(CommonId.BlockchainCustom, Value(default.blockchainCustom))
register(CommonId.MaxSignatures, Value(default.MaxSignatures))
register(CommonId.CreateWallet, Value(default.createWallet))
register(SigningMethodId.SignTx, Value(default.SigningMethod0))
register(SigningMethodId.SignTxRaw, Value(default.SigningMethod1))
register(SigningMethodId.SignValidatedTx, Value(default.SigningMethod2))
register(SigningMethodId.SignValidatedTxRaw, Value(default.SigningMethod3))
register(SigningMethodId.SignValidatedTxIssuer, Value(default.SigningMethod4))
register(SigningMethodId.SignValidatedTxRawIssuer, Value(default.SigningMethod5))
register(SigningMethodId.SignExternal, Value(default.SigningMethod6))
register(SignHashExPropId.PinLessFloorLimit, Value(default.pinLessFloorLimit))
register(SignHashExPropId.CryptoExKey, Value(default.hexCrExKey))
register(SignHashExPropId.RequireTerminalCertSig, Value(default.requireTerminalCertSignature))
register(SignHashExPropId.RequireTerminalTxSig, Value(default.requireTerminalTxSignature))
register(SignHashExPropId.CheckPin3, Value(default.checkPIN3onCard))
register(DenominationId.WriteOnPersonalize, Value(default.writeOnPersonalization))
register(DenominationId.Denomination, Value(default.denomination))
register(TokenId.ItsToken, Value(default.itsToken))
register(TokenId.Symbol, Value(default.symbol))
register(TokenId.ContractAddress, Value(default.contractAddress))
register(TokenId.Decimal, Value(default.decimal))
register(ProductMaskId.Note, Value(default.cardData.product_note))
register(ProductMaskId.Tag, Value(default.cardData.product_tag))
register(ProductMaskId.IdCard, Value(default.cardData.product_id_card))
register(ProductMaskId.IdIssuerCard, Value(default.cardData.product_id_issuer))
register(SettingsMaskId.IsReusable, Value(default.isReusable))
register(SettingsMaskId.NeedActivation, Value(default.useActivation))
register(SettingsMaskId.ForbidPurge, Value(default.forbidPurgeWallet))
register(SettingsMaskId.AllowSelectBlockchain, Value(default.allowSelectBlockchain))
register(SettingsMaskId.UseBlock, Value(default.useBlock))
register(SettingsMaskId.OneApdu, Value(default.oneApdu))
register(SettingsMaskId.UseCvc, Value(default.useCVC))
register(SettingsMaskId.AllowSwapPin, Value(default.allowSwapPIN))
register(SettingsMaskId.AllowSwapPin2, Value(default.allowSwapPIN2))
register(SettingsMaskId.ForbidDefaultPin, Value(default.forbidDefaultPIN))
register(SettingsMaskId.SmartSecurityDelay, Value(default.smartSecurityDelay))
register(SettingsMaskId.ProtectIssuerDataAgainstReplay, Value(default.protectIssuerDataAgainstReplay))
register(SettingsMaskId.SkipSecurityDelayIfValidated, Value(default.skipSecurityDelayIfValidatedByIssuer))
register(SettingsMaskId.SkipPin2CvcIfValidated, Value(default.skipCheckPIN2andCVCIfValidatedByIssuer))
register(SettingsMaskId.SkipSecurityDelayOnLinkedTerminal, Value(default.skipSecurityDelayIfValidatedByLinkedTerminal))
register(SettingsMaskId.RestrictOverwriteExtraIssuerData, Value(default.restrictOverwriteIssuerDataEx))
register(SettingsMaskProtocolEncId.AllowUnencrypted, Value(default.protocolAllowUnencrypted))
register(SettingsMaskProtocolEncId.AllowStaticEncryption, Value(default.protocolAllowStaticEncryption))
register(SettingsMaskNdefId.UseNdef, Value(default.useNDEF))
register(SettingsMaskNdefId.DynamicNdef, Value(default.useDynamicNDEF))
register(SettingsMaskNdefId.DisablePrecomputedNdef, Value(default.disablePrecomputedNDEF))
register(SettingsMaskNdefId.Aar, Value(default.aar, Helper.aarList()))
register(SettingsMaskNdefId.AarCustom, Value(default.aarCustom))
register(SettingsMaskNdefId.Uri, Value(default.uri))
register(PinsId.Pin, Value(default.PIN))
register(PinsId.Pin2, Value(default.PIN2))
register(PinsId.Pin3, Value(default.PIN3))
register(PinsId.Cvc, Value(default.CVC))
register(PinsId.PauseBeforePin2, Value(default.pauseBeforePIN2, Helper.pauseBeforePin()))
}
}

View file

@ -11,37 +11,37 @@ class ItemTypes {
BlockId.SettingsMaskNdef, BlockId.Pins
)
val listItemList = mutableListOf(Common.Curve, Common.Blockchain, SettingsMaskNdef.Aar, Pins.PauseBeforePin2)
val listItemList = mutableListOf(CommonId.Curve, CommonId.Blockchain, SettingsMaskNdefId.Aar, PinsId.PauseBeforePin2)
val boolList = mutableListOf(
Common.CreateWallet, SigningMethod.SignTx, SigningMethod.SignTxRaw, SigningMethod.SignValidatedTx,
SigningMethod.SignValidatedTxRaw, SigningMethod.SignValidatedTxIssuer,
SigningMethod.SignValidatedTxRawIssuer, SigningMethod.SignExternal, SignHashExProp.RequireTerminalCertSig,
SignHashExProp.RequireTerminalTxSig, SignHashExProp.CheckPin3, Denomination.WriteOnPersonalize, Token.ItsToken,
ProductMask.Note, ProductMask.Tag, ProductMask.IdCard, ProductMask.IdIssuerCard, SettingsMask.IsReusable, SettingsMask.NeedActivation,
SettingsMask.ForbidPurge, SettingsMask.AllowSelectBlockchain, SettingsMask.UseBlock, SettingsMask.OneApdu,
SettingsMask.UseCvc, SettingsMask.AllowSwapPin, SettingsMask.AllowSwapPin2, SettingsMask.ForbidDefaultPin,
SettingsMask.SmartSecurityDelay, SettingsMask.ProtectIssuerDataAgainstReplay,
SettingsMask.SkipSecurityDelayIfValidated, SettingsMask.SkipPin2CvcIfValidated,
SettingsMask.SkipSecurityDelayOnLinkedTerminal, SettingsMask.RestrictOverwriteExtraIssuerData,
SettingsMaskProtocolEnc.AllowUnencrypted, SettingsMaskProtocolEnc.AllowStaticEncryption,
SettingsMaskNdef.UseNdef, SettingsMaskNdef.DynamicNdef, SettingsMaskNdef.DisablePrecomputedNdef
CommonId.CreateWallet, SigningMethodId.SignTx, SigningMethodId.SignTxRaw, SigningMethodId.SignValidatedTx,
SigningMethodId.SignValidatedTxRaw, SigningMethodId.SignValidatedTxIssuer,
SigningMethodId.SignValidatedTxRawIssuer, SigningMethodId.SignExternal, SignHashExPropId.RequireTerminalCertSig,
SignHashExPropId.RequireTerminalTxSig, SignHashExPropId.CheckPin3, DenominationId.WriteOnPersonalize, TokenId.ItsToken,
ProductMaskId.Note, ProductMaskId.Tag, ProductMaskId.IdCard, ProductMaskId.IdIssuerCard, SettingsMaskId.IsReusable, SettingsMaskId.NeedActivation,
SettingsMaskId.ForbidPurge, SettingsMaskId.AllowSelectBlockchain, SettingsMaskId.UseBlock, SettingsMaskId.OneApdu,
SettingsMaskId.UseCvc, SettingsMaskId.AllowSwapPin, SettingsMaskId.AllowSwapPin2, SettingsMaskId.ForbidDefaultPin,
SettingsMaskId.SmartSecurityDelay, SettingsMaskId.ProtectIssuerDataAgainstReplay,
SettingsMaskId.SkipSecurityDelayIfValidated, SettingsMaskId.SkipPin2CvcIfValidated,
SettingsMaskId.SkipSecurityDelayOnLinkedTerminal, SettingsMaskId.RestrictOverwriteExtraIssuerData,
SettingsMaskProtocolEncId.AllowUnencrypted, SettingsMaskProtocolEncId.AllowStaticEncryption,
SettingsMaskNdefId.UseNdef, SettingsMaskNdefId.DynamicNdef, SettingsMaskNdefId.DisablePrecomputedNdef
)
val editTextList = mutableListOf(
CardNumber.Series, CardNumber.BatchId, Common.BlockchainCustom, SignHashExProp.CryptoExKey, Token.Symbol,
Token.ContractAddress, Pins.Pin, Pins.Pin2, Pins.Pin3, Pins.Cvc, SettingsMaskNdef.AarCustom, SettingsMaskNdef.Uri
CardNumberId.Series, CardNumberId.BatchId, CommonId.BlockchainCustom, SignHashExPropId.CryptoExKey, TokenId.Symbol,
TokenId.ContractAddress, PinsId.Pin, PinsId.Pin2, PinsId.Pin3, PinsId.Cvc, SettingsMaskNdefId.AarCustom, SettingsMaskNdefId.Uri
)
val numberList = mutableListOf(
CardNumber.Number, Common.MaxSignatures, SignHashExProp.PinLessFloorLimit, Denomination.Denomination, Token.Decimal
CardNumberId.Number, CommonId.MaxSignatures, SignHashExPropId.PinLessFloorLimit, DenominationId.Denomination, TokenId.Decimal
)
val hiddenList = mutableListOf<Id>(
CardNumber.Series, CardNumber.BatchId, Pins.Pin3, SigningMethod.SignExternal,
SignHashExProp.CryptoExKey, SignHashExProp.CheckPin3, SettingsMask.OneApdu,
SettingsMask.UseBlock, SettingsMask.ProtectIssuerDataAgainstReplay,
SignHashExProp.RequireTerminalCertSig, SignHashExProp.RequireTerminalTxSig
CardNumberId.Series, CardNumberId.BatchId, PinsId.Pin3, SigningMethodId.SignExternal,
SignHashExPropId.CryptoExKey, SignHashExPropId.CheckPin3, SettingsMaskId.OneApdu,
SettingsMaskId.UseBlock, SettingsMaskId.ProtectIssuerDataAgainstReplay,
SignHashExPropId.RequireTerminalCertSig, SignHashExPropId.RequireTerminalTxSig
)
val oftenUsedList = listOf<Id>(
@ -56,11 +56,11 @@ class ItemTypes {
// BlockId.SettingsMaskProtocolEnc,
BlockId.SettingsMaskNdef,
// BlockId.Pins,
Common.Curve,
Common.Blockchain,
Common.BlockchainCustom,
CommonId.Curve,
CommonId.Blockchain,
CommonId.BlockchainCustom,
// Common.MaxSignatures,
Common.CreateWallet,
CommonId.CreateWallet,
// SigningMethod.SignTx,
// SigningMethod.SignTxRaw,
// SigningMethod.SignValidatedTx,
@ -79,10 +79,10 @@ class ItemTypes {
// Token.Symbol,
// Token.ContractAddress,
// Token.Decimal,
ProductMask.Note,
ProductMask.Tag,
ProductMask.IdCard,
ProductMask.IdIssuerCard,
ProductMaskId.Note,
ProductMaskId.Tag,
ProductMaskId.IdCard,
ProductMaskId.IdIssuerCard,
// SettingsMask.IsReusable,
// SettingsMask.NeedActivation,
// SettingsMask.ForbidPurge,
@ -104,14 +104,14 @@ class ItemTypes {
// SettingsMaskNdef.UseNdef,
// SettingsMaskNdef.DynamicNdef,
// SettingsMaskNdef.DisablePrecomputedNdef,
SettingsMaskNdef.Aar,
SettingsMaskNdef.AarCustom,
SettingsMaskNdef.Uri,
SettingsMaskNdefId.Aar,
SettingsMaskNdefId.AarCustom,
SettingsMaskNdefId.Uri,
// Pins.Pin,
// Pins.Pin2,
// Pins.Pin3,
// Pins.Cvc,
Pins.PauseBeforePin2
PinsId.PauseBeforePin2
)
}

View file

@ -50,65 +50,65 @@ class ItemsToPersonalizationConfig : ItemsToModel<PersonalizationConfig> {
private fun createModel(): PersonalizationConfig {
val export = PersonalizationConfig()
export.series = getTyped(CardNumber.Series)
export.startNumber = getTyped(CardNumber.Number)
export.batchId = getTyped(CardNumber.BatchId)
export.curveID = getTyped(Common.Curve)
export.blockchain = getTyped(Common.Blockchain)
export.blockchainCustom = getTyped(Common.BlockchainCustom)
export.MaxSignatures = getTyped(Common.MaxSignatures)
export.createWallet = getTyped(Common.CreateWallet)
export.SigningMethod0 = getTyped(SigningMethod.SignTx)
export.SigningMethod1 = getTyped(SigningMethod.SignTxRaw)
export.SigningMethod2 = getTyped(SigningMethod.SignValidatedTx)
export.SigningMethod3 = getTyped(SigningMethod.SignValidatedTxRaw)
export.SigningMethod4 = getTyped(SigningMethod.SignValidatedTxIssuer)
export.SigningMethod5 = getTyped(SigningMethod.SignValidatedTxRawIssuer)
export.SigningMethod6 = getTyped(SigningMethod.SignExternal)
export.pinLessFloorLimit = getTyped(SignHashExProp.PinLessFloorLimit)
export.hexCrExKey = getTyped(SignHashExProp.CryptoExKey)
export.requireTerminalCertSignature = getTyped(SignHashExProp.RequireTerminalCertSig)
export.requireTerminalTxSignature = getTyped(SignHashExProp.RequireTerminalTxSig)
export.checkPIN3onCard = getTyped(SignHashExProp.CheckPin3)
export.writeOnPersonalization = getTyped(Denomination.WriteOnPersonalize)
export.denomination = getTyped(Denomination.Denomination)
export.itsToken = getTyped(Token.ItsToken)
export.symbol = getTyped(Token.Symbol)
export.contractAddress = getTyped(Token.ContractAddress)
export.decimal = getTyped(Token.Decimal)
export.cardData = export.cardData.apply { this.product_note = getTyped(ProductMask.Note) }
export.cardData = export.cardData.apply { this.product_tag = getTyped(ProductMask.Tag) }
export.cardData = export.cardData.apply { this.product_id_card = getTyped(ProductMask.IdCard) }
export.cardData = export.cardData.apply { this.product_id_issuer = getTyped(ProductMask.IdIssuerCard) }
export.isReusable = getTyped(SettingsMask.IsReusable)
export.useActivation = getTyped(SettingsMask.NeedActivation)
export.forbidPurgeWallet = getTyped(SettingsMask.ForbidPurge)
export.allowSelectBlockchain = getTyped(SettingsMask.AllowSelectBlockchain)
export.useBlock = getTyped(SettingsMask.UseBlock)
export.oneApdu = getTyped(SettingsMask.OneApdu)
export.useCVC = getTyped(SettingsMask.UseCvc)
export.allowSwapPIN = getTyped(SettingsMask.AllowSwapPin)
export.allowSwapPIN2 = getTyped(SettingsMask.AllowSwapPin2)
export.forbidDefaultPIN = getTyped(SettingsMask.ForbidDefaultPin)
export.smartSecurityDelay = getTyped(SettingsMask.SmartSecurityDelay)
export.protectIssuerDataAgainstReplay = getTyped(SettingsMask.ProtectIssuerDataAgainstReplay)
export.skipSecurityDelayIfValidatedByIssuer = getTyped(SettingsMask.SkipSecurityDelayIfValidated)
export.skipCheckPIN2andCVCIfValidatedByIssuer = getTyped(SettingsMask.SkipPin2CvcIfValidated)
export.skipSecurityDelayIfValidatedByLinkedTerminal = getTyped(SettingsMask.SkipSecurityDelayOnLinkedTerminal)
export.restrictOverwriteIssuerDataEx = getTyped(SettingsMask.RestrictOverwriteExtraIssuerData)
export.protocolAllowUnencrypted = getTyped(SettingsMaskProtocolEnc.AllowUnencrypted)
export.protocolAllowStaticEncryption = getTyped(SettingsMaskProtocolEnc.AllowStaticEncryption)
export.useNDEF = getTyped(SettingsMaskNdef.UseNdef)
export.useDynamicNDEF = getTyped(SettingsMaskNdef.DynamicNdef)
export.disablePrecomputedNDEF = getTyped(SettingsMaskNdef.DisablePrecomputedNdef)
export.aar = getTyped(SettingsMaskNdef.Aar)
export.aarCustom = getTyped(SettingsMaskNdef.AarCustom)
export.uri = getTyped(SettingsMaskNdef.Uri)
export.PIN = getTyped(Pins.Pin)
export.PIN2 = getTyped(Pins.Pin2)
export.PIN3 = getTyped(Pins.Pin3)
export.CVC = getTyped(Pins.Cvc)
export.pauseBeforePIN2 = getTyped(Pins.PauseBeforePin2)
export.series = getTyped(CardNumberId.Series)
export.startNumber = getTyped(CardNumberId.Number)
export.batchId = getTyped(CardNumberId.BatchId)
export.curveID = getTyped(CommonId.Curve)
export.blockchain = getTyped(CommonId.Blockchain)
export.blockchainCustom = getTyped(CommonId.BlockchainCustom)
export.MaxSignatures = getTyped(CommonId.MaxSignatures)
export.createWallet = getTyped(CommonId.CreateWallet)
export.SigningMethod0 = getTyped(SigningMethodId.SignTx)
export.SigningMethod1 = getTyped(SigningMethodId.SignTxRaw)
export.SigningMethod2 = getTyped(SigningMethodId.SignValidatedTx)
export.SigningMethod3 = getTyped(SigningMethodId.SignValidatedTxRaw)
export.SigningMethod4 = getTyped(SigningMethodId.SignValidatedTxIssuer)
export.SigningMethod5 = getTyped(SigningMethodId.SignValidatedTxRawIssuer)
export.SigningMethod6 = getTyped(SigningMethodId.SignExternal)
export.pinLessFloorLimit = getTyped(SignHashExPropId.PinLessFloorLimit)
export.hexCrExKey = getTyped(SignHashExPropId.CryptoExKey)
export.requireTerminalCertSignature = getTyped(SignHashExPropId.RequireTerminalCertSig)
export.requireTerminalTxSignature = getTyped(SignHashExPropId.RequireTerminalTxSig)
export.checkPIN3onCard = getTyped(SignHashExPropId.CheckPin3)
export.writeOnPersonalization = getTyped(DenominationId.WriteOnPersonalize)
export.denomination = getTyped(DenominationId.Denomination)
export.itsToken = getTyped(TokenId.ItsToken)
export.symbol = getTyped(TokenId.Symbol)
export.contractAddress = getTyped(TokenId.ContractAddress)
export.decimal = getTyped(TokenId.Decimal)
export.cardData = export.cardData.apply { this.product_note = getTyped(ProductMaskId.Note) }
export.cardData = export.cardData.apply { this.product_tag = getTyped(ProductMaskId.Tag) }
export.cardData = export.cardData.apply { this.product_id_card = getTyped(ProductMaskId.IdCard) }
export.cardData = export.cardData.apply { this.product_id_issuer = getTyped(ProductMaskId.IdIssuerCard) }
export.isReusable = getTyped(SettingsMaskId.IsReusable)
export.useActivation = getTyped(SettingsMaskId.NeedActivation)
export.forbidPurgeWallet = getTyped(SettingsMaskId.ForbidPurge)
export.allowSelectBlockchain = getTyped(SettingsMaskId.AllowSelectBlockchain)
export.useBlock = getTyped(SettingsMaskId.UseBlock)
export.oneApdu = getTyped(SettingsMaskId.OneApdu)
export.useCVC = getTyped(SettingsMaskId.UseCvc)
export.allowSwapPIN = getTyped(SettingsMaskId.AllowSwapPin)
export.allowSwapPIN2 = getTyped(SettingsMaskId.AllowSwapPin2)
export.forbidDefaultPIN = getTyped(SettingsMaskId.ForbidDefaultPin)
export.smartSecurityDelay = getTyped(SettingsMaskId.SmartSecurityDelay)
export.protectIssuerDataAgainstReplay = getTyped(SettingsMaskId.ProtectIssuerDataAgainstReplay)
export.skipSecurityDelayIfValidatedByIssuer = getTyped(SettingsMaskId.SkipSecurityDelayIfValidated)
export.skipCheckPIN2andCVCIfValidatedByIssuer = getTyped(SettingsMaskId.SkipPin2CvcIfValidated)
export.skipSecurityDelayIfValidatedByLinkedTerminal = getTyped(SettingsMaskId.SkipSecurityDelayOnLinkedTerminal)
export.restrictOverwriteIssuerDataEx = getTyped(SettingsMaskId.RestrictOverwriteExtraIssuerData)
export.protocolAllowUnencrypted = getTyped(SettingsMaskProtocolEncId.AllowUnencrypted)
export.protocolAllowStaticEncryption = getTyped(SettingsMaskProtocolEncId.AllowStaticEncryption)
export.useNDEF = getTyped(SettingsMaskNdefId.UseNdef)
export.useDynamicNDEF = getTyped(SettingsMaskNdefId.DynamicNdef)
export.disablePrecomputedNDEF = getTyped(SettingsMaskNdefId.DisablePrecomputedNdef)
export.aar = getTyped(SettingsMaskNdefId.Aar)
export.aarCustom = getTyped(SettingsMaskNdefId.AarCustom)
export.uri = getTyped(SettingsMaskNdefId.Uri)
export.PIN = getTyped(PinsId.Pin)
export.PIN2 = getTyped(PinsId.Pin2)
export.PIN3 = getTyped(PinsId.Pin3)
export.CVC = getTyped(PinsId.Cvc)
export.pauseBeforePIN2 = getTyped(PinsId.PauseBeforePin2)
return export
}
@ -138,14 +138,14 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
blocList.add(cardNumber())
blocList.add(common())
blocList.add(signingMethod())
blocList.add(signHashExProperties())
blocList.add(denomination())
blocList.add(token())
blocList.add(productMask())
blocList.add(settingsMask())
blocList.add(settingsMaskProtocolEnc())
blocList.add(settingsMaskNdef())
blocList.add(pins())
// blocList.add(signHashExProperties())
// blocList.add(denomination())
// blocList.add(token())
// blocList.add(productMask())
// blocList.add(settingsMask())
// blocList.add(settingsMaskProtocolEnc())
// blocList.add(settingsMaskNdef())
// blocList.add(pins())
blocList.iterate {
if (itemTypes.hiddenList.contains(it.id)) {
it.viewModel.viewState.isVisibleState.value = false
@ -157,9 +157,9 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun cardNumber(): ItemGroup {
val block = createGroup(BlockId.CardNumber)
mutableListOf(
CardNumber.Series,
CardNumber.Number,
CardNumber.BatchId
CardNumberId.Series,
CardNumberId.Number,
CardNumberId.BatchId
).forEach { createItem(block, it as Id) }
return block
}
@ -167,12 +167,12 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun common(): ItemGroup {
val block = createGroup(BlockId.Common)
mutableListOf(
Common.Blockchain,
Common.BlockchainCustom,
Common.Curve,
Common.MaxSignatures,
Common.CreateWallet,
Pins.PauseBeforePin2
CommonId.Blockchain,
CommonId.BlockchainCustom,
CommonId.Curve,
CommonId.MaxSignatures,
CommonId.CreateWallet,
PinsId.PauseBeforePin2
).forEach { createItem(block, it as Id) }
return block
}
@ -180,13 +180,13 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun signingMethod(): ItemGroup {
val block = createGroup(BlockId.SigningMethod)
mutableListOf(
SigningMethod.SignTx,
SigningMethod.SignTxRaw,
SigningMethod.SignValidatedTx,
SigningMethod.SignValidatedTxRaw,
SigningMethod.SignValidatedTxIssuer,
SigningMethod.SignValidatedTxRawIssuer,
SigningMethod.SignExternal
SigningMethodId.SignTx,
SigningMethodId.SignTxRaw,
SigningMethodId.SignValidatedTx,
SigningMethodId.SignValidatedTxRaw,
SigningMethodId.SignValidatedTxIssuer,
SigningMethodId.SignValidatedTxRawIssuer,
SigningMethodId.SignExternal
).forEach { createItem(block, it) }
return block
}
@ -194,11 +194,11 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun signHashExProperties(): ItemGroup {
val block = createGroup(BlockId.SignHashExProp)
mutableListOf(
SignHashExProp.PinLessFloorLimit,
SignHashExProp.CryptoExKey,
SignHashExProp.RequireTerminalCertSig,
SignHashExProp.RequireTerminalTxSig,
SignHashExProp.CheckPin3
SignHashExPropId.PinLessFloorLimit,
SignHashExPropId.CryptoExKey,
SignHashExPropId.RequireTerminalCertSig,
SignHashExPropId.RequireTerminalTxSig,
SignHashExPropId.CheckPin3
).forEach { createItem(block, it) }
return block
}
@ -206,8 +206,8 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun denomination(): ItemGroup {
val block = createGroup(BlockId.Denomination)
mutableListOf(
Denomination.WriteOnPersonalize,
Denomination.Denomination
DenominationId.WriteOnPersonalize,
DenominationId.Denomination
).forEach { createItem(block, it) }
return block
}
@ -215,10 +215,10 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun token(): ItemGroup {
val block = createGroup(BlockId.Token)
mutableListOf(
Token.ItsToken,
Token.Symbol,
Token.ContractAddress,
Token.Decimal
TokenId.ItsToken,
TokenId.Symbol,
TokenId.ContractAddress,
TokenId.Decimal
).forEach { createItem(block, it) }
return block
}
@ -226,10 +226,10 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun productMask(): ItemGroup {
val block = createGroup(BlockId.ProdMask)
mutableListOf(
ProductMask.Note,
ProductMask.Tag,
ProductMask.IdCard,
ProductMask.IdIssuerCard
ProductMaskId.Note,
ProductMaskId.Tag,
ProductMaskId.IdCard,
ProductMaskId.IdIssuerCard
).forEach { createItem(block, it) }
return block
}
@ -237,22 +237,22 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun settingsMask(): ItemGroup {
val block = createGroup(BlockId.SettingsMask)
mutableListOf(
SettingsMask.IsReusable,
SettingsMask.NeedActivation,
SettingsMask.ForbidPurge,
SettingsMask.AllowSelectBlockchain,
SettingsMask.UseBlock,
SettingsMask.OneApdu,
SettingsMask.UseCvc,
SettingsMask.AllowSwapPin,
SettingsMask.AllowSwapPin2,
SettingsMask.ForbidDefaultPin,
SettingsMask.SmartSecurityDelay,
SettingsMask.ProtectIssuerDataAgainstReplay,
SettingsMask.SkipSecurityDelayIfValidated,
SettingsMask.SkipPin2CvcIfValidated,
SettingsMask.SkipSecurityDelayOnLinkedTerminal,
SettingsMask.RestrictOverwriteExtraIssuerData
SettingsMaskId.IsReusable,
SettingsMaskId.NeedActivation,
SettingsMaskId.ForbidPurge,
SettingsMaskId.AllowSelectBlockchain,
SettingsMaskId.UseBlock,
SettingsMaskId.OneApdu,
SettingsMaskId.UseCvc,
SettingsMaskId.AllowSwapPin,
SettingsMaskId.AllowSwapPin2,
SettingsMaskId.ForbidDefaultPin,
SettingsMaskId.SmartSecurityDelay,
SettingsMaskId.ProtectIssuerDataAgainstReplay,
SettingsMaskId.SkipSecurityDelayIfValidated,
SettingsMaskId.SkipPin2CvcIfValidated,
SettingsMaskId.SkipSecurityDelayOnLinkedTerminal,
SettingsMaskId.RestrictOverwriteExtraIssuerData
).forEach { createItem(block, it) }
return block
}
@ -260,8 +260,8 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun settingsMaskProtocolEnc(): ItemGroup {
val block = createGroup(BlockId.SettingsMaskProtocolEnc)
mutableListOf(
SettingsMaskProtocolEnc.AllowUnencrypted,
SettingsMaskProtocolEnc.AllowStaticEncryption
SettingsMaskProtocolEncId.AllowUnencrypted,
SettingsMaskProtocolEncId.AllowStaticEncryption
).forEach { createItem(block, it) }
return block
}
@ -269,12 +269,12 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun settingsMaskNdef(): ItemGroup {
val block = createGroup(BlockId.SettingsMaskNdef)
mutableListOf(
SettingsMaskNdef.UseNdef,
SettingsMaskNdef.DynamicNdef,
SettingsMaskNdef.DisablePrecomputedNdef,
SettingsMaskNdef.Aar,
SettingsMaskNdef.AarCustom,
SettingsMaskNdef.Uri
SettingsMaskNdefId.UseNdef,
SettingsMaskNdefId.DynamicNdef,
SettingsMaskNdefId.DisablePrecomputedNdef,
SettingsMaskNdefId.Aar,
SettingsMaskNdefId.AarCustom,
SettingsMaskNdefId.Uri
).forEach { createItem(block, it) }
return block
}
@ -282,10 +282,10 @@ class PersonalizationConfigToItems : ModelToItems<PersonalizationConfig> {
private fun pins(): ItemGroup {
val block = createGroup(BlockId.Pins)
mutableListOf(
Pins.Pin,
Pins.Pin2,
Pins.Pin3,
Pins.Cvc
PinsId.Pin,
PinsId.Pin2,
PinsId.Pin3,
PinsId.Cvc
).forEach { createItem(block, it) }
return block
}

View file

@ -4,6 +4,7 @@ import com.tangem.KeyPair
import com.tangem.commands.personalization.entities.Acquirer
import com.tangem.commands.personalization.entities.Issuer
import com.tangem.commands.personalization.entities.Manufacturer
import com.tangem.common.extensions.hexToBytes
/**
[REDACTED_AUTHOR]
@ -18,12 +19,14 @@ interface DefaultPersonalizationParams {
name = name,
id = name + "\u0000",
dataKeyPair = KeyPair(
"".toByteArray(),
"11121314151617184771ED81F2BACF57479E4735EB1405083927372D40DA9E92".toByteArray()
("045f16bd1d2eafe463e62a335a09e6b2bbcbd04452526885cb679fc4d27af1bd22f553c7deefb54fd3d4f" +
"361d14e6dc3f11b7d4ea183250a60720ebdf9e110cd26").hexToBytes(),
"11121314151617184771ED81F2BACF57479E4735EB1405083927372D40DA9E92".hexToBytes()
),
transactionKeyPair = KeyPair(
"".toByteArray(),
"11121314151617184771ED81F2BACF57479E4735EB1405081918171615141312".toByteArray()
("0484c5192e9bfa6c528a344f442137a92b89ea835bfef1d04cb4362eb906b508c5889846cfea71ba6dc7b" +
"3120c2208df9c46127d3d85cb5cfbd1479e97133a39d8").hexToBytes(),
"11121314151617184771ED81F2BACF57479E4735EB1405081918171615141312".hexToBytes()
)
)
}
@ -34,8 +37,9 @@ interface DefaultPersonalizationParams {
name = name,
id = name + "\u0000",
keyPair = KeyPair(
"".toByteArray(),
"21222324252627284771ED81F2BACF57479E4735EB1405083927372D40DA9E92".toByteArray()
("0456ad1a82b22bcb40c38fd08939f87e6b80e40dec5b3bdb351c55fcd709e47f9fb2ed00c2304d3a9" +
"86f79c5ae0ac3c84e88da46dc8f513b7542c716af8c9a2daf").hexToBytes(),
"21222324252627284771ED81F2BACF57479E4735EB1405083927372D40DA9E92".hexToBytes()
)
)
}

View file

@ -8,7 +8,7 @@ import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout
import com.tangem.devkit.R
import com.tangem.devkit._arch.structure.impl.NumberItem
import com.tangem.devkit.ucase.variants.personalize.CardNumber
import com.tangem.devkit.ucase.variants.personalize.CardNumberId
import ru.dev.gbixahue.eu4d.lib.android._android.views.addInputFilter
import ru.dev.gbixahue.eu4d.lib.android._android.views.moveCursorToEnd
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
@ -39,7 +39,7 @@ class NumberWidget(
tilItem.hint = getName()
//TODO: remove from Widget
if (item.id == CardNumber.Number) etItem.addInputFilter(InputFilter.LengthFilter(13))
if (item.id == CardNumberId.Number) etItem.addInputFilter(InputFilter.LengthFilter(13))
etItem.setText(stringOf(typedItem.getTypedData()))
etItem.addTextChangedListener(watcher)

View file

@ -0,0 +1,10 @@
package com.tangem.devkit.ucase.variants.purgewallet.ui
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.paramsManager.managers.PurgeWalletItemsManager
import com.tangem.devkit.ucase.ui.BaseCardActionFragment
class PurgeWalletActionFragment : BaseCardActionFragment() {
override val itemsManager: ItemsManager by lazy { PurgeWalletItemsManager() }
}

View file

@ -53,4 +53,38 @@ enum class SignId : ResponseId {
enum class DepersonalizeId: ResponseId {
isSuccess
}
enum class CreateWalletId : ResponseId {
cid,
cardStatus,
walletPublicKey,
}
enum class PurgeWalletId : ResponseId {
cid,
cardStatus
}
enum class ReadIssuerDataId : ResponseId {
cid,
issuerData,
issuerDataSignature,
issuerDataCounter
}
enum class ReadIssuerExtraDataId : ResponseId {
cid,
size,
issuerData,
issuerDataSignature,
issuerDataCounter
}
enum class ReadUserDataId : ResponseId {
cid,
userData,
userProtectedData,
userCounter,
userProtectedCounter
}

View file

@ -2,9 +2,7 @@ package com.tangem.devkit.ucase.variants.responses
import android.view.View
import androidx.lifecycle.ViewModel
import com.tangem.commands.Card
import com.tangem.commands.CommandResponse
import com.tangem.commands.SignResponse
import com.tangem.commands.*
import com.tangem.commands.personalization.DepersonalizeResponse
import com.tangem.devkit.R
import com.tangem.devkit._arch.structure.abstraction.Item
@ -44,6 +42,14 @@ class ResponseViewModel : ViewModel() {
is Card -> R.string.fg_name_response_personalization
is SignResponse -> R.string.fg_name_response_sign
is DepersonalizeResponse -> R.string.fg_name_response_depersonalization
is CreateWalletResponse -> R.string.fg_name_response_create_wallet
is PurgeWalletResponse -> R.string.fg_name_response_purge_wallet
is ReadIssuerDataResponse -> R.string.fg_name_response_read_issuer_data
is WriteIssuerDataResponse -> R.string.fg_name_response_write_issuer_data
is ReadIssuerExtraDataResponse -> R.string.fg_name_response_read_issuer_extra_data
is ReadUserDataResponse -> R.string.fg_name_response_read_user_data
is WriteUserDataResponse -> R.string.fg_name_response_write_user_data
else -> R.string.unknown
}
}

View file

@ -1,7 +1,6 @@
package com.tangem.devkit.ucase.variants.responses.converter
import com.tangem.commands.Card
import com.tangem.commands.SignResponse
import com.tangem.commands.*
import com.tangem.commands.personalization.DepersonalizeResponse
import ru.dev.gbixahue.eu4d.lib.kotlin.common.BaseTypedHolder
import java.lang.reflect.Type
@ -12,5 +11,12 @@ class ConvertersStore : BaseTypedHolder<Type, Any>() {
register(SignResponse::class.java, SignResponseConverter())
register(Card::class.java, CardConverter())
register(DepersonalizeResponse::class.java, DepersonalizeResponseConverter())
register(CreateWalletResponse::class.java, CreateWalletResponseConverter())
register(PurgeWalletResponse::class.java, PurgeWalletResponseConverter())
register(ReadIssuerDataResponse::class.java, ReadIssuerDataResponseConverter())
register(ReadIssuerExtraDataResponse::class.java, ReadIssuerExtraDataResponseConverter())
register(WriteIssuerDataResponse::class.java, WriteIssuerDataResponseConverter())
register(ReadUserDataResponse::class.java, ReadUserDataResponseConverter())
register(WriteUserDataResponse::class.java, WriteUserDataResponseConverter())
}
}

View file

@ -1,11 +1,10 @@
package com.tangem.devkit.ucase.variants.responses.converter
import com.tangem.commands.SignResponse
import com.tangem.commands.*
import com.tangem.commands.personalization.DepersonalizeResponse
import com.tangem.devkit._arch.structure.abstraction.Item
import com.tangem.devkit._arch.structure.impl.TextItem
import com.tangem.devkit.ucase.variants.responses.DepersonalizeId
import com.tangem.devkit.ucase.variants.responses.SignId
import com.tangem.devkit.ucase.variants.responses.*
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
/**
@ -27,4 +26,74 @@ class DepersonalizeResponseConverter : BaseResponseConverter<DepersonalizeRespon
override fun convert(from: DepersonalizeResponse): List<Item> {
return listOf(TextItem(DepersonalizeId.isSuccess, stringOf(from.success)))
}
}
class CreateWalletResponseConverter : BaseResponseConverter<CreateWalletResponse>() {
override fun convert(from: CreateWalletResponse): List<Item> {
return listOf(
TextItem(CreateWalletId.cid, from.cardId),
TextItem(CreateWalletId.cardStatus, valueToString(from.status)),
TextItem(CreateWalletId.walletPublicKey, fieldConverter.byteArray(from.walletPublicKey))
)
}
}
class PurgeWalletResponseConverter : BaseResponseConverter<PurgeWalletResponse>() {
override fun convert(from: PurgeWalletResponse): List<Item> {
return listOf(
TextItem(CreateWalletId.cid, from.cardId),
TextItem(CreateWalletId.cardStatus, valueToString(from.status))
)
}
}
class ReadIssuerDataResponseConverter : BaseResponseConverter<ReadIssuerDataResponse>() {
override fun convert(from: ReadIssuerDataResponse): List<Item> {
return listOf(
TextItem(ReadIssuerDataId.cid, from.cardId),
TextItem(ReadIssuerDataId.issuerData, fieldConverter.byteArray(from.issuerData)),
TextItem(ReadIssuerDataId.issuerDataSignature, fieldConverter.byteArray(from.issuerDataSignature)),
TextItem(ReadIssuerDataId.issuerDataCounter, valueToString(from.issuerDataCounter))
)
}
}
class ReadIssuerExtraDataResponseConverter : BaseResponseConverter<ReadIssuerExtraDataResponse>() {
override fun convert(from: ReadIssuerExtraDataResponse): List<Item> {
return listOf(
TextItem(ReadIssuerExtraDataId.cid, from.cardId),
TextItem(ReadIssuerExtraDataId.size, valueToString(from.size)),
TextItem(ReadIssuerExtraDataId.issuerData, fieldConverter.byteArray(from.issuerData)),
TextItem(ReadIssuerExtraDataId.issuerDataSignature, fieldConverter.byteArray(from.issuerDataSignature)),
TextItem(ReadIssuerExtraDataId.issuerDataCounter, valueToString(from.issuerDataCounter))
)
}
}
class WriteIssuerDataResponseConverter : BaseResponseConverter<WriteIssuerDataResponse>() {
override fun convert(from: WriteIssuerDataResponse): List<Item> {
return listOf(
TextItem(CardId.cardId, from.cardId)
)
}
}
class ReadUserDataResponseConverter : BaseResponseConverter<ReadUserDataResponse>() {
override fun convert(from: ReadUserDataResponse): List<Item> {
return listOf(
TextItem(ReadUserDataId.cid, from.cardId),
TextItem(ReadUserDataId.userData, fieldConverter.byteArray(from.userData)),
TextItem(ReadUserDataId.userProtectedData, fieldConverter.byteArray(from.userProtectedData)),
TextItem(ReadUserDataId.userCounter, valueToString(from.userCounter)),
TextItem(ReadUserDataId.userProtectedCounter, valueToString(from.userProtectedCounter))
)
}
}
class WriteUserDataResponseConverter : BaseResponseConverter<WriteUserDataResponse>() {
override fun convert(from: WriteUserDataResponse): List<Item> {
return listOf(
TextItem(CardId.cardId, from.cardId)
)
}
}

View file

@ -0,0 +1,10 @@
package com.tangem.devkit.ucase.variants.userdata.ui
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.paramsManager.managers.ReadUserDataItemsManager
import com.tangem.devkit.ucase.ui.BaseCardActionFragment
class ReadUserDataFragment : BaseCardActionFragment() {
override val itemsManager: ItemsManager by lazy { ReadUserDataItemsManager() }
}

View file

@ -0,0 +1,10 @@
package com.tangem.devkit.ucase.variants.userdata.ui
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.paramsManager.managers.WriteUserDataItemsManager
import com.tangem.devkit.ucase.ui.BaseCardActionFragment
class WriteUserDataFragment : BaseCardActionFragment() {
override val itemsManager: ItemsManager by lazy { WriteUserDataItemsManager() }
}

View file

@ -85,51 +85,51 @@
<fragment
android:id="@+id/nav_issuer_read_data"
android:name="com.tangem.devkit.ucase.ui.IssuerReadDataActionFragment"
android:name="com.tangem.devkit.ucase.variants.issuerdata.ui.ReadIssuerDataFragment"
android:label="@string/action_issuer_read_data"
tools:layout="@layout/fg_action_issuer_read_data" />
tools:layout="@layout/fg_base_action_layout" />
<fragment
android:id="@+id/nav_issuer_write_data"
android:name="com.tangem.devkit.ucase.ui.IssuerWriteDataActionFragment"
android:name="com.tangem.devkit.ucase.variants.issuerdata.ui.WriteIssuerDataFragment"
android:label="@string/action_issuer_write_data"
tools:layout="@layout/fg_action_issuer_write_data" />
tools:layout="@layout/fg_base_action_layout" />
<fragment
android:id="@+id/nav_issuer_read_ex_data"
android:name="com.tangem.devkit.ucase.ui.IssuerReadExDataActionFragment"
android:name="com.tangem.devkit.ucase.variants.issuerdata.ui.ReadIssuerExtraDataFragment"
android:label="@string/action_issuer_read_ex_data"
tools:layout="@layout/fg_action_issuer_read_ex_data" />
tools:layout="@layout/fg_base_action_layout" />
<fragment
android:id="@+id/nav_issuer_write_ex_data"
android:name="com.tangem.devkit.ucase.ui.IssuerWriteExDataActionFragment"
android:name="com.tangem.devkit.ucase.variants.issuerdata.ui.WriteIssuerExtraDataFragment"
android:label="@string/action_issuer_write_ex_data"
tools:layout="@layout/fg_action_issuer_write_ex_data" />
tools:layout="@layout/fg_base_action_layout" />
<fragment
android:id="@+id/nav_user_read_data"
android:name="com.tangem.devkit.ucase.ui.UserReadDataActionFragment"
android:name="com.tangem.devkit.ucase.variants.userdata.ui.ReadUserDataFragment"
android:label="@string/action_user_read_data"
tools:layout="@layout/fg_action_user_read_data" />
tools:layout="@layout/fg_base_action_layout" />
<fragment
android:id="@+id/nav_user_write_data"
android:name="com.tangem.devkit.ucase.ui.UserWriteDataActionFragment"
android:name="com.tangem.devkit.ucase.variants.userdata.ui.WriteUserDataFragment"
android:label="@string/action_user_write_data"
tools:layout="@layout/fg_action_user_write_data" />
tools:layout="@layout/fg_base_action_layout" />
<fragment
android:id="@+id/nav_wallet_create"
android:name="com.tangem.devkit.ucase.ui.WalletCreateActionFragment"
android:name="com.tangem.devkit.ucase.variants.createwallet.ui.CreateWalletActionFragment"
android:label="@string/action_wallet_create"
tools:layout="@layout/fg_action_wallet_create" />
tools:layout="@layout/fg_base_action_layout" />
<fragment
android:id="@+id/nav_wallet_purge"
android:name="com.tangem.devkit.ucase.ui.WalletPurgeActionFragment"
android:name="com.tangem.devkit.ucase.variants.purgewallet.ui.PurgeWalletActionFragment"
android:label="@string/action_wallet_purge"
tools:layout="@layout/fg_action_wallet_purge" />
tools:layout="@layout/fg_base_action_layout" />
<fragment
android:id="@+id/nav_card_response"

View file

@ -14,10 +14,17 @@
<string name="error_nothing_to_load">Nothing to load</string>
<string name="fg_name_entry_point">@string/app_name</string>
<string name="fg_name_response_scan">Read response</string>
<string name="fg_name_response_sign">Sign response</string>
<string name="fg_name_response_personalization">Personalization response</string>
<string name="fg_name_response_depersonalization">Depersonalization response</string>
<string name="fg_name_response_scan">Read Response</string>
<string name="fg_name_response_sign">Sign Response</string>
<string name="fg_name_response_personalization">Personalization Response</string>
<string name="fg_name_response_depersonalization">Depersonalization Response</string>
<string name="fg_name_response_create_wallet">Create Wallet Response</string>
<string name="fg_name_response_purge_wallet">Purge Wallet Response</string>
<string name="fg_name_response_read_issuer_data">Read Issuer Data Response</string>
<string name="fg_name_response_write_issuer_data">Write Issuer Data Response</string>
<string name="fg_name_response_read_issuer_extra_data">Read Issuer Extra Data Response</string>
<string name="fg_name_response_read_user_data">Read User Data Response</string>
<string name="fg_name_response_write_user_data">Write User Data Response</string>
<string name="switch_description">Docs</string>

View file

@ -5,27 +5,28 @@
<string name="action_card_sign">Sign</string>
<string name="action_personalize">Personalize</string>
<string name="action_depersonalize">Depersonalize</string>
<string name="action_wallet_create">Create wallet</string>
<string name="action_wallet_purge">Purge wallet</string>
<string name="action_issuer_read_data">Read issuer data</string>
<string name="action_issuer_write_data">Write issuer data</string>
<string name="action_issuer_read_ex_data">Read issuer extra data</string>
<string name="action_issuer_write_ex_data">Write issuer extra data</string>
<string name="action_user_read_data">Read user data</string>
<string name="action_user_write_data">Write user data</string>
<string name="action_wallet_create">Create Wallet</string>
<string name="action_wallet_purge">Purge Wallet</string>
<string name="action_issuer_read_data">Read Issuer Data</string>
<string name="action_issuer_write_data">Write Issuer Data</string>
<string name="action_issuer_read_ex_data">Read Issuer Extra Data</string>
<string name="action_issuer_write_ex_data">Write Issuer Extra Data</string>
<string name="action_user_read_data">Read User Data</string>
<string name="action_user_write_data">Write User Data</string>
<string name="info_action_card_scan">This command returns all data about the card and the wallet, including unique card number (CID) that has to be submitted while calling all other commands</string>
<string name="info_action_card_sign">Depending on Signing_Method parameter defined during personalization, this command signs data using Wallet_PrivateKey</string>
<string name="info_action_personalize">Personalization is an initialization procedure, required before start using a card. During this procedure all card setting are performed. During this procedure all data exchange are encrypted because it\'s usually done at the third-party factory.</string>
<string name="info_action_depersonalize">This command reset card to initial state - erase all data, writed during previous personalization and previous usage.
\nCommand available on SDK cards only</string>
<string name="info_action_wallet_create">SomeDescription</string>
<string name="info_action_wallet_purge">SomeDescription</string>
<string name="info_action_issuer_read_data">SomeDescription</string>
<string name="info_action_issuer_write_data">SomeDescription</string>
<string name="info_action_issuer_read_ex_data">SomeDescription</string>
<string name="info_action_issuer_write_ex_data">SomeDescription</string>
<string name="info_action_user_read_data">SomeDescription</string>
<string name="info_action_user_write_data">SomeDescription</string>
<string name="info_action_wallet_create">If the card has an Empty state, this command will create a new wallet, changing a state to Loaded.</string>
<string name="info_action_wallet_purge">This command deletes all wallet data. If IsReusable flag was enabled during personalization, the card changes state to Empty and a new wallet can be created by Create Wallet Command.</string>
<string name="info_action_issuer_read_data">This command returns 512-byte Issuer Data field and its issuers signature.</string>
<string name="info_action_issuer_write_data">This command writes 512-byte Issuer Data field and its issuers signature to the card.</string>
<string name="info_action_issuer_read_ex_data">This command retrieves Issuer Extra Data field and its issuers signature.</string>
<string name="info_action_issuer_write_ex_data">This command writes Issuer Extra Data field and its issuers signature to the card.</string>
<string name="info_action_user_read_data">This command returns User Data and User Protected Data (up to 512-byte each) and two counters: User Counter and User Protected Counter.</string>
<string name="info_action_user_write_data"> This command writes to the card any of User Data, User Protected Data, User Counter and User Protected Counter fields.
</string>
</resources>

View file

@ -155,4 +155,27 @@
<string name="info_response_depersonalize_is_success">Is success</string>
<!-- Field names - Response: Read Issuer (Extra) Data -->
<string name="response_issuer_data_size">Size of Issuer Data</string>
<string name="response_issuer_data">Issuer Data</string>
<string name="response_issuer_data_signature">Issuer Data Signature</string>
<string name="response_issuer_data_counter">Issuer Data Counter</string>
<string name="info_response_issuer_data_size">A size of issuer extra data written on a card.</string>
<string name="info_response_issuer_data">Data defined by the issuer.</string>
<string name="info_response_issuer_data_signature">Issuer data, signed by the issuer with issuer data private key.</string>
<string name="info_response_issuer_data_counter">An optional counter that protects issuer data against replay attack.</string>
<!-- Field names - Response: Read User Data -->
<string name="response_user_data">User Data</string>
<string name="response_user_protected_data">Protected User Data</string>
<string name="response_user_data_counter">User Data Counter</string>
<string name="response_user_data_protected_counter">Protected User Data Counter</string>
<string name="info_response_user_data">Data defined by user\'s App</string>
<string name="info_response_user_protected_data">Data defined by users App (confirmed by PIN2)</string>
<string name="info_response_user_data_counter">Counter initialized by users App and increased on every signing of new transaction</string>
<string name="info_response_user_data_protected_counter">Counter initialized by users App (confirmed by PIN2) and increased on every signing of new transaction</string>
</resources>

View file

@ -3,8 +3,16 @@
<string name="tlv_card_id">Card Id (CID)</string>
<string name="tlv_transaction_out_hash">Hash to sign</string>
<string name="tlv_issuer_data">Issuer Data</string>
<string name="tlv_user_data">User Data</string>
<string name="tlv_user_protected_data">Protected User Data</string>
<string name="tlv_counter">Counter</string>
<string name="info_tlv_card_id">Unique Tangem card ID number</string>
<string name="info_tlv_transaction_out_hash">Hashed transaction you want to be signed </string>
<string name="info_tlv_issuer_data">Issuer Data to be written by this command</string>
<string name="info_tlv_user_data">User Data to be written by this command</string>
<string name="info_tlv_protected_user_data">Protected User Data to be written by this command</string>
<string name="info_tlv_counter">Counter that protects this type of data against replay attack.</string>
</resources>