...
Since Atheos does not support this new tag yet, it has to be added programmatically with the provided code.
Code Block |
---|
|
byte[] hardcodedValueForVisa = {(byte) 0x30, (byte) 0xF0, (byte) 0x00, (byte) 0x00}; //SIRCC, check for card support of contact/CDCVM
byte[] hardcodedValue = {(byte) 0x30, (byte) 0x50, (byte) 0x00, (byte) 0x00}; //SI Only, don't check for card support of contact
byte[] hardcodedValue = {(byte) 0xb0, (byte) 0xD0, (byte) 0x00, (byte) 0x00}; ////SIRCC, don't check for card support of contact. ROP supported
byte[] hardcodedValue = {(byte) 0xb0, (byte) 0xF0, (byte) 0x00, (byte) 0x00}; //SIRCC, check for card support of contact/CDCVM. ROP supported |
The four lines above are examples of configs you could make programmatically. Below shows where to put them exactly. Copying the snippet below and just adjusting the byte[] hardcodedValue per your configurations is enough to support SCA.
Code Block |
---|
|
private TlvTree setSCAConfiguration(TlvTree config) {
//byte[] hardcodedValueForVisa = {(byte) 0x30, (byte) 0xF0, (byte) 0x00, (byte) 0x00}; //SIRCC, check for card support of contact/CDCVM
//byte[] hardcodedValue = {(byte) 0x30, (byte) 0x50, (byte) 0x00, (byte) 0x00}; //SI Only, don't check for card support of contact
// byte[] hardcodedValue = {(byte) 0xb0, (byte) 0xD0, (byte) 0x00, (byte) 0x00}; ////SIRCC, don't check for card support of contact. ROP supported
byte[] hardcodedValue = {(byte) 0xb0, (byte) 0xF0, (byte) 0x00, (byte) 0x00}; //SIRCC, check for card support of contact/CDCVM. ROP supported
TlvTree nexoFastConfig = config.GetChild(Configuration.NEXO_FAST_CONFIGURATION);
if (nexoFastConfig != null) {
TlvTree[] applicationTemplates = nexoFastConfig.GetChildren(0xE6);
for (TlvTree currentApplicationTemplate : applicationTemplates) {
String scheme = currentApplicationTemplate.GetElementAscii(Payment.Context.SCHEME_IDENTIFIER);
if (scheme != null) {
switch (scheme.toLowerCase()) {
/*case "visa":
Log.d("SCA-cfg", "scheme is visa, hardcoding 0xDF6B to visa value");
currentApplicationTemplate.SetBin(0xDF6B, hardcodedValueForVisa);
break;*/
default:
Log.d("SCA-cfg", "scheme " + scheme + " is not visa, hardcoding 0xDF6B to normal value");
currentApplicationTemplate.SetBin(0xDF6B, hardcodedValue);
break;
}
} else {
Log.d("SCA-cfg", "scheme is null, hardcoding 0xDF6B to normal value");
currentApplicationTemplate.SetBin(0xDF6B, hardcodedValue);
}
}
} else {
Log.d("SCA-cfg", "No NexoFAST Configuration");
}
return config;
} |
The function below modifies the Config taken from Atheos and adds the customized SCA behaviour.
Code Block |
---|
private void updateArkosConfigurationCustom(TlvTree cfgResult){
setTerminalConfiguration(cfgResult);
setSCAConfiguration(cfgResult);
setCustomArkosBehavior(cfgResult);
ArkosConfiguration.Update(cfgResult.AsBytes());
ArkosConfiguration.AddHostSecurityInfo("SpecV1TestKey", "2010060715", true);
TlvTree nexoFastConfig = cfgResult.GetChild(Configuration.NEXO_FAST_CONFIGURATION);
if (nexoFastConfig != null) {{
CurrencyFormat.update(
ArkosHelperConfiguration.getCurrencyCode(),
ArkosHelperConfiguration.getCountryCodeNumeric());
}}
ArkosMerchantExtension.getInstance().updateExceptionFileFromConfiguration(cfgResult);
} |