private static void CreateEntry(EMVTagMeta emvTagMeta, byte[] value) { TLV tlv = TLV.Create(emvTagMeta.Tag); tlv.Value = value; EMVTagDefaultsList.AddToList(tlv); }
public override void Deserialize(byte[] response) { base.Deserialize(response); if (!Succeeded) { return; } if (ResponseData[0] == 0x77) { tlvResponse = TLV.Create(EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_2_77_KRN.Tag); } else { tlvResponse = TLV.Create(EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_1_80_KRN.Tag); } tlvResponse.Deserialize(ResponseData, 0); if (!tlvResponse.Tag.IsConstructed) { CryptogramInformationData = TLV.Create(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag, GetData(tlvResponse.Value, 0, 1)); ApplicationTransactionCounter = TLV.Create(EMVTagsEnum.APPLICATION_TRANSACTION_COUNTER_ATC_9F36_KRN.Tag, GetData(tlvResponse.Value, 0 + 1, 2)); ApplicationCryptogram = TLV.Create(EMVTagsEnum.APPLICATION_CRYPTOGRAM_9F26_KRN.Tag, GetData(tlvResponse.Value, 0 + 1 + 2, 8)); IssuerApplicationData = TLV.Create(EMVTagsEnum.ISSUER_APPLICATION_DATA_9F10_KRN.Tag, GetData(tlvResponse.Value, 0 + 1 + 2 + 8, 32)); } else { CryptogramInformationData = tlvResponse.Children.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag); ApplicationTransactionCounter = tlvResponse.Children.Get(EMVTagsEnum.APPLICATION_TRANSACTION_COUNTER_ATC_9F36_KRN.Tag); ApplicationCryptogram = tlvResponse.Children.Get(EMVTagsEnum.APPLICATION_CRYPTOGRAM_9F26_KRN.Tag); IssuerApplicationData = tlvResponse.Children.Get(EMVTagsEnum.ISSUER_APPLICATION_DATA_9F10_KRN.Tag); POSCardholderInteractionInformation = tlvResponse.Children.Get(EMVTagsEnum.POS_CARDHOLDER_INTERACTION_INFORMATION_DF4B_KRN2.Tag); } }
private static void AddDREntry(EMVTagMeta tag, KernelDatabaseBase database) { if (database.IsPresent(tag.Tag)) { database.Get(EMVTagsEnum.DATA_RECORD_FF8105_KRN2).Children.AddToList(TLV.Create(tag.Tag, database.Get(tag).Value)); } }
private TLV Pack91(CryptoMetaData cryptoMetaData, byte[] arpc, TLV _8A) { TLV _91; if (arpc == null) { arpc = new byte[8]; } switch (cryptoMetaData.SKDMethod) { case SKDMethod.VSDC: _91 = TLV.Create(EMVTagsEnum.ISSUER_AUTHENTICATION_DATA_91_KRN.Tag, Formatting.ConcatArrays(arpc, _8A.Value)); break; case SKDMethod.MCHIP: _91 = TLV.Create(EMVTagsEnum.ISSUER_AUTHENTICATION_DATA_91_KRN.Tag, Formatting.ConcatArrays(arpc, _8A.Value)); break; case SKDMethod.EMV_CSKD: _91 = TLV.Create(EMVTagsEnum.ISSUER_AUTHENTICATION_DATA_91_KRN.Tag, Formatting.ConcatArrays(arpc, PackCSU())); break; default: throw new SimulatedPaymentProviderException("Pack91: SKDMethod not supported:" + cryptoMetaData.SKDMethod); } return(_91); }
public static void PackRelatedDataTag(KernelDatabaseBase database, EMVTagMeta tagToPack, TLVList tagListForPack) { TLV tlvRelatedData = database.Get(tagToPack); List <byte[]> tlvRelatedDataBytes = new List <byte[]>(); Logger.Log("Packing tag: " + tagListForPack.ToString()); foreach (TLV tlv in tagListForPack) { TLV valForPackDb = database.Get(tlv.Tag.TagLable); TLV valForPack; if (valForPackDb == null) { valForPack = TLV.Create(tlv.Tag.TagLable); } else { byte[] copyVal = new byte[valForPackDb.Value.Length]; Array.Copy(valForPackDb.Value, copyVal, valForPackDb.Value.Length); valForPack = TLV.Create(tlv.Tag.TagLable, copyVal); } valForPack.Val.PackValue(tlv.Val.GetLength()); Logger.Log("Adding tag: " + valForPack.ToString()); tlvRelatedDataBytes.Add(valForPack.Value); } tlvRelatedData.Value = tlvRelatedDataBytes.SelectMany(a => a).ToArray(); }
public static byte[] PackRelatedDataTag(KernelDatabaseBase database, TLV tagListForPack) { List <byte[]> tlvRelatedDataBytes = new List <byte[]>(); TLVList tags = TLV.DeserializeChildrenWithNoV(tagListForPack.Value, 0); Logger.Log("Packing tag: " + tagListForPack.ToString()); foreach (TLV tlv in tags) { TLV valForPackDb = database.Get(tlv.Tag.TagLable); TLV valForPack; if (valForPackDb == null) { valForPack = TLV.Create(tlv.Tag.TagLable); } else { byte[] copyVal = new byte[valForPackDb.Value.Length]; Array.Copy(valForPackDb.Value, copyVal, valForPackDb.Value.Length); valForPack = TLV.Create(tlv.Tag.TagLable, copyVal); } valForPack.Val.PackValue(tlv.Val.GetLength()); Logger.Log("Adding tag: " + valForPack.ToString()); tlvRelatedDataBytes.Add(valForPack.Value); } return(tlvRelatedDataBytes.SelectMany(a => a).ToArray()); }
private static TLVList DeserList(tlvXMLType[] serXML) { TLVList result = new TLVList(); serXML.ToList().ForEach((x) => { TLV tlvToAdd = TLV.Create(x.tag.Name); //x.tag.Description = TLVMetaDataSourceSingleton.Instance.DataSource.GetName(tlvToAdd.Tag.TagLable); result.AddToList(tlvToAdd); if (x.children != null) { tlvToAdd.Children.AddListToList(DeserList(x.children)); } else { if (x.value != null) { if (x.value.Formatting == FormattingEnum.ASCII) { tlvToAdd.Value = Formatting.ASCIIStringToByteArray(x.value.Value); } else { tlvToAdd.Value = Formatting.HexStringToByteArray(x.value.Value); } } if (x.valueC9 != null) { } } }); return(result); }
private void AddTTL(EMVTagMeta tag, KernelDatabaseBase database) { if (database.IsNotEmpty(tag.Tag)) { Children.AddToList(TLV.Create(tag.Tag, database.Get(tag).Value)); } }
public static byte[] VerifyCardSignature(TLV tlv) { CryptoMetaData cryptoMetaData = EMVDESSecurity.BuildCryptoMeta(tlv); //fire up HSM if (jcesecmod == null) { jcesecmod = new EMVDESSecurity(lmkFilePath); } TLV _8A; bool isApproved = true; if (isApproved) { _8A = TLV.Create(EMVTagsEnum.AUTHORISATION_RESPONSE_CODE_8A_KRN.Tag, arcApproved); } else { _8A = TLV.Create(EMVTagsEnum.AUTHORISATION_RESPONSE_CODE_8A_KRN.Tag, arcDeclined); } byte[] arpc = jcesecmod.VerifyCryptogramGenARPC(tlv, cryptoMetaData, _8A.Value, mkACEncrypted, mkACEncryptedCV); return(arpc); }
static PersoAndCardStateStorage() { APPLICATION_TRANSACTION_COUNTER_ATC_9F36_KRN = TLV.Create(EMVTagsEnum.APPLICATION_TRANSACTION_COUNTER_ATC_9F36_KRN.Tag, Formatting.HexStringToByteArray("0001")); APPLICATION_INTERCHANGE_PROFILE_82_KRN = TLV.Create(EMVTagsEnum.APPLICATION_INTERCHANGE_PROFILE_82_KRN.Tag, Formatting.HexStringToByteArray("0000")); TRACK_2_EQUIVALENT_DATA_57_KRN = TLV.Create(EMVTagsEnum.TRACK_2_EQUIVALENT_DATA_57_KRN.Tag, calcTrack2()); CARDHOLDER_NAME_5F20_KRN = TLV.Create(EMVTagsEnum.CARDHOLDER_NAME_5F20_KRN.Tag, Formatting.HexStringToByteArray("202F")); APPLICATION_PRIMARY_ACCOUNT_NUMBER_PAN_5A_KRN = TLV.Create(EMVTagsEnum.APPLICATION_PRIMARY_ACCOUNT_NUMBER_PAN_5A_KRN.Tag, Formatting.HexStringToByteArray("1234567890123456")); APPLICATION_PRIMARY_ACCOUNT_NUMBER_PAN_SEQUENCE_NUMBER_5F34_KRN = TLV.Create(EMVTagsEnum.APPLICATION_PRIMARY_ACCOUNT_NUMBER_PAN_SEQUENCE_NUMBER_5F34_KRN.Tag, Formatting.HexStringToByteArray("01")); FORM_FACTOR_INDICATOR_FFI_9F6E_KRN3 = TLV.Create(EMVTagsEnum.FORM_FACTOR_INDICATOR_FFI_9F6E_KRN3.Tag, Formatting.HexStringToByteArray("00000000")); CUSTOMER_EXCLUSIVE_DATA_CED_9F7C_KRN3 = TLV.Create(EMVTagsEnum.CUSTOMER_EXCLUSIVE_DATA_CED_9F7C_KRN3.Tag, Formatting.HexStringToByteArray("0000000000000000000000000000000000000000000000000000000000000000")); CARD_ADDITIONAL_PROCESSES_9F68_KRN = TLV.Create(EMVTagsEnum.CARD_ADDITIONAL_PROCESSES_9F68_KRN.Tag, new byte[] { 0x00, 0x60, (byte)0x80, 0x00 }); ISSUER_APPLICATION_DATA_9F10_KRN = TLV.Create(EMVTagsEnum.ISSUER_APPLICATION_DATA_9F10_KRN.Tag); ISSUER_APPLICATION_DATA_9F10_KRN.Val.PackValue(32); ISSUER_APPLICATION_DATA_9F10_KRN.Value[0] = 0x06; //format ISSUER_APPLICATION_DATA_9F10_KRN.Value[1] = 0x00; //kdi ISSUER_APPLICATION_DATA_9F10_KRN.Value[2] = 0x11; //cvn , crypto 17 ISSUER_APPLICATION_DATA_9F10_KRN.Value[3] = 0x00; //cvr byte 1 ISSUER_APPLICATION_DATA_9F10_KRN.Value[4] = 0x00; //cvr byte 2 ISSUER_APPLICATION_DATA_9F10_KRN.Value[5] = 0x00; //cvr byte 3 ISSUER_APPLICATION_DATA_9F10_KRN.Value[6] = 0x00; //cvr byte 4 //with emv demo app which uses the hsm ICC_MK = Formatting.HexStringToByteArray("8CB9F7D54362B0A240D0AE626780A86B"); //with simulated provider, standard master ac test key -> 2315208C9110AD402315208C9110AD40 -> derives this key for this pan and this pan sequence number //ICC_MK = Formatting.HexStringToByteArray("3DAD707C897F49895D6D62526297497A"); }
private static bool VerifySDAD_Summaries_42(Kernel2Database database, CAPublicKeyCertificate capk, CardResponse cardResponse) { ICCDynamicData iccdd = VerifySAD.VerifySDAD(ICCDynamicDataType.IDS, true, database, database.StaticDataToBeAuthenticated, capk, cardResponse); if (iccdd == null) { return(false); } AddSDADDataToDatabase(database, iccdd); TLV ds2 = database.Get(EMVTagsEnum.DS_SUMMARY_2_DF8101_KRN2); TLV ds3 = database.Get(EMVTagsEnum.DS_SUMMARY_3_DF8102_KRN2); if (ds2 == null && iccdd.DSSummary2 != null) { ds2 = TLV.Create(EMVTagsEnum.DS_SUMMARY_2_DF8101_KRN2.Tag); } if (ds3 == null && iccdd.DSSummary3 != null) { ds3 = TLV.Create(EMVTagsEnum.DS_SUMMARY_3_DF8102_KRN2.Tag); } if (iccdd.DSSummary2 != null) { ds2.Value = iccdd.DSSummary2; } if (iccdd.DSSummary3 != null) { ds3.Value = iccdd.DSSummary3; } return(true); }
public override void Deserialize(byte[] response) { base.Deserialize(response); if (!Succeeded) { return; } if (ResponseData[0] == 0x77) { tlvResponse = TLV.Create(EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_2_77_KRN.Tag); } else { tlvResponse = TLV.Create(EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_1_80_KRN.Tag); } tlvResponse.Deserialize(ResponseData, 0); Logger.Log(ToPrintString()); if (ResponseData[0] == 0x80) //format 2 { SignedApplicationData = TLV.Create(EMVTagsEnum.SIGNED_DYNAMIC_APPLICATION_DATA_9F4B_KRN.Tag, tlvResponse.Value); } if (ResponseData[0] == 0x77) //format 1 { SignedApplicationData = tlvResponse.Children.Get(EMVTagsEnum.SIGNED_DYNAMIC_APPLICATION_DATA_9F4B_KRN.Tag); } }
protected override void DoEntryPointD(Tuple <EMVTerminalProcessingOutcome, EMVSelectApplicationResponse, TerminalSupportedKernelAidTransactionTypeCombination, CardKernelAidCombination, EntryPointPreProcessingIndicators> indicators) { //3.4.1.1 KernelBase kernel = EMVContactlessKernelActivation.ActivateKernel(tr, cardQProcessor, tornTransactionLogManager, publicKeyCertificateManager, indicators.Item2, indicators.Item3, indicators.Item4, indicators.Item5, cardExceptionManager, configProvider); kernel.ExceptionOccured += Kernel_ExceptionOccured; //TODO: change config to load only kernel specific tags terminalConfigurationData.LoadTerminalConfigurationDataObjects(((TerminalSupportedContactlessKernelAidTransactionTypeCombination)indicators.Item3).KernelEnum, configProvider); TLVList requestInput = new TLVList(); requestInput.AddToList(indicators.Item2.GetFCITemplateTag()); requestInput.AddListToList(tr.GetTxDataTLV()); //TERMINAL_TRANSACTION_QUALIFIERS_9F66_KRN ttq = ((TerminalSupportedContactlessKernelAidTransactionTypeCombination)indicators.Item3).TTQ; TERMINAL_TRANSACTION_QUALIFIERS_9F66_KRN ttq = indicators.Item5.TTQ; if (ttq != null) { requestInput.AddToList(TLV.Create(EMVTagsEnum.TERMINAL_TRANSACTION_QUALIFIERS_TTQ_9F66_KRN.Tag, ttq.Value.Value)); } KernelRequest request = new KernelRequest(KernelTerminalReaderServiceRequestEnum.ACT, requestInput); kernel.KernelQ.EnqueueToInput(request); Task.Run(() => kernel.StartNewTransaction(), cancellationTokenForTerminalApplication.Token); Task.Run(() => OnProcessCompleted(StartServiceQPRocess(kernel))); }
public TLVList GetResponseTags() { try { TLVList result = new TLVList(); if (tlvResponse.Tag.TagLable == EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_1_80_KRN.Tag) { byte[] DeviceRelayResistanceEntropy = new byte[4]; byte[] MinTimeForProcessingRelayResistanceAPDU = new byte[2]; byte[] MaxTimeForProcessingRelayResistanceAPDU = new byte[2]; byte[] DeviceEstimatedTransmissionTimeForRelayResistanceRAPDU = new byte[2]; Array.Copy(tlvResponse.Value, 0, DeviceRelayResistanceEntropy, 0, 4); Array.Copy(tlvResponse.Value, 4, MinTimeForProcessingRelayResistanceAPDU, 0, 2); Array.Copy(tlvResponse.Value, 6, MaxTimeForProcessingRelayResistanceAPDU, 0, 2); Array.Copy(tlvResponse.Value, 8, DeviceEstimatedTransmissionTimeForRelayResistanceRAPDU, 0, 2); result.AddToList(TLV.Create(EMVTagsEnum.DEVICE_RELAY_RESISTANCE_ENTROPY_DF8302_KRN2.Tag, DeviceRelayResistanceEntropy)); result.AddToList(TLV.Create(EMVTagsEnum.MIN_TIME_FOR_PROCESSING_RELAY_RESISTANCE_APDU_DF8303_KRN2.Tag, MinTimeForProcessingRelayResistanceAPDU)); result.AddToList(TLV.Create(EMVTagsEnum.MAX_TIME_FOR_PROCESSING_RELAY_RESISTANCE_APDU_DF8304_KRN2.Tag, MaxTimeForProcessingRelayResistanceAPDU)); result.AddToList(TLV.Create(EMVTagsEnum.DEVICE_ESTIMATED_TRANSMISSION_TIME_FOR_RELAY_RESISTANCE_RAPDU_DF8305_KRN2.Tag, DeviceEstimatedTransmissionTimeForRelayResistanceRAPDU)); } else { throw new EMVProtocolException("Unrecognised template received from Get Processing Options"); } return(result); } catch (Exception ex) { throw new EMVProtocolException("RESPONSE_MESSAGE_TEMPLATE_FORMAT_1_80_KRN Tag not found:" + ex.Message); } }
private static EMVGetProcessingOptionsResponse genGPOResponse(bool includeSDAD, TLVList db) { TLVList response = new TLVList(); //from perso response.AddToList(PersoAndCardStateStorage.APPLICATION_INTERCHANGE_PROFILE_82_KRN); response.AddToList(PersoAndCardStateStorage.TRACK_2_EQUIVALENT_DATA_57_KRN); response.AddToList(PersoAndCardStateStorage.CARDHOLDER_NAME_5F20_KRN); response.AddToList(PersoAndCardStateStorage.APPLICATION_PRIMARY_ACCOUNT_NUMBER_PAN_5A_KRN); response.AddToList(PersoAndCardStateStorage.APPLICATION_PRIMARY_ACCOUNT_NUMBER_PAN_SEQUENCE_NUMBER_5F34_KRN); response.AddToList(PersoAndCardStateStorage.FORM_FACTOR_INDICATOR_FFI_9F6E_KRN3); response.AddToList(PersoAndCardStateStorage.CUSTOMER_EXCLUSIVE_DATA_CED_9F7C_KRN3); //from storage and calculated response.AddToList(db.Get(EMVTagsEnum.APPLICATION_TRANSACTION_COUNTER_ATC_9F36_KRN.Tag)); //calculated response.AddToList(db.Get(EMVTagsEnum.ISSUER_APPLICATION_DATA_9F10_KRN.Tag)); response.AddToList(db.Get(EMVTagsEnum.APPLICATION_CRYPTOGRAM_9F26_KRN.Tag)); response.AddToList(db.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag)); response.AddToList(db.Get(EMVTagsEnum.CARD_TRANSACTION_QUALIFIERS_CTQ_9F6C_KRN3.Tag)); if (includeSDAD) { response.AddToList(db.Get(EMVTagsEnum.SIGNED_DYNAMIC_APPLICATION_DATA_9F4B_KRN.Tag)); } TLV _77 = TLV.Create(EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_2_77_KRN.Tag, response.Serialize()); EMVGetProcessingOptionsResponse resp = new EMVGetProcessingOptionsResponse(); resp.SW1 = 0x90; resp.SW2 = 0x00; resp.ResponseData = _77.Serialize(); return(resp); }
public TLVList GetResponseTags() { try { TLVList result = new TLVList(); if (tlvResponse.Tag.TagLable == EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_1_80_KRN.Tag) { byte[] aip = EMVTagsEnum.APPLICATION_INTERCHANGE_PROFILE_82_KRN.InitValue(); byte[] afl = new byte[tlvResponse.Value.Length - aip.Length]; Array.Copy(tlvResponse.Value, 0, aip, 0, aip.Length); Array.Copy(tlvResponse.Value, aip.Length, afl, 0, afl.Length); result.AddToList(TLV.Create(EMVTagsEnum.APPLICATION_INTERCHANGE_PROFILE_82_KRN.Tag, aip)); result.AddToList(TLV.Create(EMVTagsEnum.APPLICATION_FILE_LOCATOR_AFL_94_KRN.Tag, afl)); } else if (tlvResponse.Tag.TagLable == EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_2_77_KRN.Tag) { return(tlvResponse.Children); } else { throw new EMVProtocolException("Unrecognised template received from Get Processing Options"); } return(result); } catch (Exception ex) { throw new EMVProtocolException("APPLICATION_IDENTIFIER_CARD_4F Tag not found:" + ex.Message); } }
private void ContactlessApp_PinRequest(TLVList data) { CapturePin(); //TODO: encrypt the pin TLV pin = TLV.Create(EMVTagsEnum.TRANSACTION_PERSONAL_IDENTIFICATION_NUMBER_PIN_DATA_99_KRN.Tag, Formatting.HexStringToByteArray(pinEntryTCS.Task.Result)); data.AddToList(pin); }
protected override TLV GetTLVResponse() { if (tlvResponse == null) { tlvResponse = TLV.Create(EMVTagsEnum.FILE_CONTROL_INFORMATION_FCI_TEMPLATE_6F_KRN.Tag); tlvResponse.Deserialize(ResponseData, 0); } return(tlvResponse); }
public EMVGetProcessingOptionsRequest(TLV pdolRelatedData) : base(ISO7816Protocol.Cla.ProprietaryCla8x, EMVInstructionEnum.GetProcessingOptions, null, 0x00, 0x00) { ApduResponseType = typeof(EMVGetProcessingOptionsResponse); TLV tlv = TLV.Create(EMVTagsEnum.COMMAND_TEMPLATE_83_KRN.Tag, pdolRelatedData.Value); CommandData = tlv.Serialize(); Logger.Log(ToPrintString()); }
public override void Deserialize(byte[] response) { base.Deserialize(response); if (!Succeeded) { return; } tlvResponse = TLV.Create(EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_1_80_KRN.Tag); tlvResponse.Deserialize(ResponseData, 0); }
public override void Deserialize(byte[] response) { base.Deserialize(response); if (!Succeeded) { return; } tlvResponse = TLV.Create(EMVTagsEnum.FILE_CONTROL_INFORMATION_FCI_TEMPLATE_6F_KRN.Tag); tlvResponse.Deserialize(ResponseData, 0); Logger.Log(ToPrintString()); }
public static TLV InitializeDiscretionaryData(KernelDatabaseBase database) { TLV disc = database.Get(EMVTagsEnum.DISCRETIONARY_DATA_FF8106_KRN2); if (disc == null) { disc = TLV.Create(EMVTagsEnum.DISCRETIONARY_DATA_FF8106_KRN2.Tag); database.AddToList(disc); } return(disc); }
public TLVList GetTxDataTLV() { TxData = new TLVList(); TxData.AddToList(TLV.Create(EMVTagsEnum.AMOUNT_AUTHORISED_NUMERIC_9F02_KRN.Tag, Formatting.StringToBcd(Convert.ToString(amount), EMVTagsEnum.AMOUNT_AUTHORISED_NUMERIC_9F02_KRN.DataFormatter.GetMaxLength(), false))); TxData.AddToList(TLV.Create(EMVTagsEnum.AMOUNT_OTHER_NUMERIC_9F03_KRN.Tag, Formatting.StringToBcd(Convert.ToString(amountOther), EMVTagsEnum.AMOUNT_OTHER_NUMERIC_9F03_KRN.DataFormatter.GetMaxLength(), false))); TxData.AddToList(TLV.Create(EMVTagsEnum.TRANSACTION_TYPE_9C_KRN.Tag, new byte[] { (byte)transactionTypeEnum })); TxData.AddToList(TLV.Create(EMVTagsEnum.TRANSACTION_DATE_9A_KRN.Tag, EMVTagsEnum.TRANSACTION_DATE_9A_KRN.FormatFromDateTime(transactionDate))); TxData.AddToList(TLV.Create(EMVTagsEnum.TRANSACTION_TIME_9F21_KRN.Tag, EMVTagsEnum.TRANSACTION_TIME_9F21_KRN.FormatFromDateTime(transactionDate))); TxData.AddToList(TLV.Create(EMVTagsEnum.POINTOFSERVICE_POS_ENTRY_MODE_9F39_KRN.Tag, Formatting.HexStringToByteArray("00"))); TxData.AddToList(TLV.Create(EMVTagsEnum.TRANSACTION_CURRENCY_CODE_5F2A_KRN.Tag, Formatting.StringToBcd(Convert.ToString(ISOCurrencyCodesEnum.ZAR.Code).PadLeft(4, '0'), false))); return(TxData); }
public void Initialize(string tagLabel) { TLV tlv = DataObjects.Get(tagLabel); if (tlv != null) { DataObjects.Get(tagLabel).Initialize(); } else { AddToList(TLV.Create(tagLabel)); } }
public void DoPinReponse(string pin) { if (kernel == null) { throw new EMVProtocolException("DoPinReponse called without kernel being activated"); } TLVList requestInput = new TLVList(); requestInput.AddToList(TLV.Create(EMVTagsEnum.TRANSACTION_PERSONAL_IDENTIFICATION_NUMBER_PIN_DATA_99_KRN.Tag, Formatting.ASCIIStringToByteArray(pin))); KernelRequest request = new KernelRequest(KernelTerminalReaderServiceRequestEnum.PIN, requestInput); kernel.KernelQ.EnqueueToInput(request); }
public override void Deserialize(byte[] response) { base.Deserialize(response); if (!Succeeded) { return; } int pos = 0; TLV.T t = TLV.T.Create(ResponseData, ref pos); tlvResponse = TLV.Create(t.TagLable); tlvResponse.Deserialize(ResponseData, 0); Logger.Log(ToPrintString()); }
public static void CreateMSDiscretionaryDataRecord(KernelDatabaseBase database) { //Table 4.8 if (database.Get(EMVTagsEnum.DISCRETIONARY_DATA_FF8106_KRN2) == null) { database.AddToList(TLV.Create(EMVTagsEnum.DISCRETIONARY_DATA_FF8106_KRN2.Tag)); } AddDDEntry(EMVTagsEnum.APPLICATION_CAPABILITIES_INFORMATION_9F5D_KRN2, database); AddDDEntry(EMVTagsEnum.DD_CARD_TRACK1_DF812A_KRN2, database); AddDDEntry(EMVTagsEnum.DD_CARD_TRACK2_DF812B_KRN2, database); AddDDEntry(EMVTagsEnum.ERROR_INDICATION_DF8115_KRN2, database); AddDDEntry(EMVTagsEnum.THIRD_PARTY_DATA_9F6E_KRN2, database); }
public override void Deserialize(byte[] response) { base.Deserialize(response); if (!Succeeded) { return; } if (ResponseData[0] == 0x77) { tlvResponse = TLV.Create(EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_2_77_KRN.Tag); } else { tlvResponse = TLV.Create(EMVTagsEnum.RESPONSE_MESSAGE_TEMPLATE_FORMAT_1_80_KRN.Tag); } tlvResponse.Deserialize(ResponseData, 0); Logger.Log(ToPrintString()); if (!tlvResponse.Tag.IsConstructed) //Format 1 is not used if CDA is performed. { CDAPerformed = false; CryptogramInformationData = TLV.Create(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag, GetData(tlvResponse.Value, 0, 1)); ApplicationTransactionCounter = TLV.Create(EMVTagsEnum.APPLICATION_TRANSACTION_COUNTER_ATC_9F36_KRN.Tag, GetData(tlvResponse.Value, 0 + 1, 2)); ApplicationCryptogram = TLV.Create(EMVTagsEnum.APPLICATION_CRYPTOGRAM_9F26_KRN.Tag, GetData(tlvResponse.Value, 0 + 1 + 2, 8)); IssuerApplicationData = TLV.Create(EMVTagsEnum.ISSUER_APPLICATION_DATA_9F10_KRN.Tag, GetData(tlvResponse.Value, 0 + 1 + 2 + 8, tlvResponse.Value.Length - (0 + 1 + 2 + 8))); } else //format 2 { //CDA Not Performed if (tlvResponse.Children.IsNotPresent(EMVTagsEnum.SIGNED_DYNAMIC_APPLICATION_DATA_9F4B_KRN.Tag)) { CDAPerformed = false; CryptogramInformationData = tlvResponse.Children.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag); ApplicationTransactionCounter = tlvResponse.Children.Get(EMVTagsEnum.APPLICATION_TRANSACTION_COUNTER_ATC_9F36_KRN.Tag); ApplicationCryptogram = tlvResponse.Children.Get(EMVTagsEnum.APPLICATION_CRYPTOGRAM_9F26_KRN.Tag); IssuerApplicationData = tlvResponse.Children.Get(EMVTagsEnum.ISSUER_APPLICATION_DATA_9F10_KRN.Tag); POSCardholderInteractionInformation = tlvResponse.Children.Get(EMVTagsEnum.POS_CARDHOLDER_INTERACTION_INFORMATION_DF4B_KRN2.Tag); } else//CDA Performed { CDAPerformed = true; CryptogramInformationData = tlvResponse.Children.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag); ApplicationTransactionCounter = tlvResponse.Children.Get(EMVTagsEnum.APPLICATION_TRANSACTION_COUNTER_ATC_9F36_KRN.Tag); SignedDynamicApplicationData = tlvResponse.Children.Get(EMVTagsEnum.SIGNED_DYNAMIC_APPLICATION_DATA_9F4B_KRN.Tag); IssuerApplicationData = tlvResponse.Children.Get(EMVTagsEnum.ISSUER_APPLICATION_DATA_9F10_KRN.Tag); POSCardholderInteractionInformation = tlvResponse.Children.Get(EMVTagsEnum.POS_CARDHOLDER_INTERACTION_INFORMATION_DF4B_KRN2.Tag); } } }
public TLVList DoGPOTest(String data) { TLV tlv = TLV.Create("DF8111"); tlv.Value = Formatting.HexStringToByteArray(data); EMVGetProcessingOptionsRequest request = new EMVGetProcessingOptionsRequest(tlv); EMVGetProcessingOptionsResponse response = SendCommand(request) as EMVGetProcessingOptionsResponse; if (!response.Succeeded) { throw new Exception("Failure doing GPO, SW=" + response.SW + " (" + response.SWTranslation + ")"); } return(response.GetResponseTags()); }
public void InitializeDefaultDataObjects(TransactionTypeEnum tt, IConfigurationProvider configProvider) { DataObjects = new TLVList(); LoadKernelDefaultConfigurationDataObjects(tt, configProvider); TLVList defaults = KernelConfigurationData.Get(tt); foreach (TLV tlv in defaults) { byte[] val = new byte[tlv.Value.Length]; Array.Copy(tlv.Value, 0, val, 0, val.Length); AddToList(TLV.Create(tlv.Tag.TagLable, val)); } ActiveAFL = new APPLICATION_FILE_LOCATOR_AFL_94_KRN(this); }