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 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.READ_RECORD_RESPONSE_MESSAGE_TEMPLATE_70_KRN.Tag); try { tlvResponse.Deserialize(ResponseData, 0); } catch { tlvResponse = TLV.Create(EMVTagsEnum.READ_RECORD_RESPONSE_MESSAGE_TEMPLATE_70_KRN.Tag); ResponseData = tlvResponse.Serialize(); } Logger.Log(ToPrintString()); }
private static void Do434(Kernel2Database database, bool signedFlag, int sfi, CardResponse cardResponse, TLVList responseTags) { #region 4.34 if (signedFlag && database.ODAStatus == 0x80) { #region 4.35 if (sfi <= 10) { int length = cardResponse.ApduResponse.ResponseData.Length - 2; //without tag '70' and length if (2048 - database.StaticDataToBeAuthenticated.Serialize().Length >= length) { database.StaticDataToBeAuthenticated.AddListToList(responseTags); } else { TERMINAL_VERIFICATION_RESULTS_95_KRN tvr = new TERMINAL_VERIFICATION_RESULTS_95_KRN(database); tvr.Value.CDAFailed = true; tvr.UpdateDB(); } } else { int length = cardResponse.ApduResponse.ResponseData.Length; if (cardResponse.ApduResponse.ResponseData[0] == 0x70 && 2048 - database.StaticDataToBeAuthenticated.Serialize().Length >= length) { TLV template = TLV.Create(EMVTagsEnum.READ_RECORD_RESPONSE_MESSAGE_TEMPLATE_70_KRN.Tag); template.Children.AddListToList(responseTags); template.Serialize(); database.StaticDataToBeAuthenticated.AddToList(template); } else { TERMINAL_VERIFICATION_RESULTS_95_KRN tvr = new TERMINAL_VERIFICATION_RESULTS_95_KRN(database); tvr.Value.CDAFailed = true; tvr.UpdateDB(); } } #endregion } #endregion }
internal static SignalsEnum PostOutcome(KernelDatabaseBase database, KernelQ qManager, KernelMessageidentifierEnum uiMessage, KernelStatusEnum uiStatus, byte[] holdTime, Kernel2OutcomeStatusEnum status, Kernel2StartEnum start, bool?isUIRequestOnOutcomePresent, KernelMessageidentifierEnum messageOnError, L1Enum l1Enum, byte[] SW12, L2Enum l2Enum, L3Enum l3Enum, ValueQualifierEnum valueQualifierEnum, byte[] valueQualifier, byte[] currencyCode, bool receipt, KernelCVMEnum cvmStatus) { if (messageOnError != KernelMessageidentifierEnum.N_A || l1Enum != L1Enum.NOT_SET || l2Enum != L2Enum.NOT_SET || l3Enum != L3Enum.NOT_SET) { TLV disc = InitializeDiscretionaryData(database); ERROR_INDICATION_DF8115_KRN2 kei = new ERROR_INDICATION_DF8115_KRN2(database); kei.Value.MsgOnError = messageOnError; kei.Value.L1Enum = l1Enum; kei.Value.L2Enum = l2Enum; kei.Value.L3Enum = l3Enum; if (SW12 != null) { kei.Value.SW12 = SW12; } kei.UpdateDB(); disc.Children.AddToList(kei); disc.Serialize(); } if (uiMessage != KernelMessageidentifierEnum.N_A || uiStatus != KernelStatusEnum.N_A) { USER_INTERFACE_REQUEST_DATA_DF8116_KRN2 uird = new USER_INTERFACE_REQUEST_DATA_DF8116_KRN2(database); uird.Value.KernelMessageidentifierEnum = uiMessage; uird.Value.KernelStatusEnum = uiStatus; if (holdTime == null) { TLV holdTimeTLV = database.GetDefault(EMVTagsEnum.MESSAGE_HOLD_TIME_DF812D_KRN2); if (holdTimeTLV != null) { holdTime = holdTimeTLV.Value; } else { holdTime = new byte[] { 0x00, 0x00, 0x00 } }; } uird.Value.HoldTime = holdTime; if (valueQualifier != null) { uird.Value.ValueQualifier = valueQualifier; } uird.Value.ValueQualifierEnum = valueQualifierEnum; if (currencyCode != null) { uird.Value.CurrencyCode = currencyCode; } uird.UpdateDB(); } OUTCOME_PARAMETER_SET_DF8129_KRN2 kops = new OUTCOME_PARAMETER_SET_DF8129_KRN2(database); kops.Value.Status = status; kops.Value.Start = start; if (isUIRequestOnOutcomePresent == null) { kops.Value.UIRequestOnOutcomePresent = isUIRequestOnOutcomePresent == false; kops.Value.UIRequestOnRestartPresent = isUIRequestOnOutcomePresent == false; } else { kops.Value.UIRequestOnOutcomePresent = isUIRequestOnOutcomePresent == true ? true : false; kops.Value.UIRequestOnRestartPresent = isUIRequestOnOutcomePresent == true ? false : true; } kops.Value.DataRecordPresent = database.Get(EMVTagsEnum.DATA_RECORD_FF8105_KRN2) != null ? true : false; kops.Value.DiscretionaryDataPresent = database.Get(EMVTagsEnum.DISCRETIONARY_DATA_FF8106_KRN2) != null ? true : false; //kops.Value.Receipt = receipt; kops.Value.CVM = cvmStatus; kops.UpdateDB(); qManager.EnqueueToOutput(new KernelOUTResponse( database.Get(EMVTagsEnum.OUTCOME_PARAMETER_SET_DF8129_KRN2), database.Get(EMVTagsEnum.ERROR_INDICATION_DF8115_KRN2), database.Get(EMVTagsEnum.DATA_RECORD_FF8105_KRN2), database.Get(EMVTagsEnum.DISCRETIONARY_DATA_FF8106_KRN2), database.Get(EMVTagsEnum.USER_INTERFACE_REQUEST_DATA_DF8116_KRN2))); return(SignalsEnum.STOP); }