private static SignalsEnum DoInvalidResponsePart_C(Kernel2Database database, KernelQ qManager, CardResponse cardResponse, KernelMessageidentifierEnum message, L1Enum l1Enum, L2Enum l2Enum, L3Enum l3Enum) { #region 11.90 //done in 11.95 #endregion #region 11.91 IDS_STATUS_DF8128_KRN2.IDS_STATUS_DF8128_KRN2_VALUE idsV = new IDS_STATUS_DF8128_KRN2.IDS_STATUS_DF8128_KRN2_VALUE(EMVTagsEnum.IDS_STATUS_DF8128_KRN2.DataFormatter); idsV.Deserialize(database.TornTempRecord.Children.Get(EMVTagsEnum.IDS_STATUS_DF8128_KRN2.Tag).Value, 0); if (!idsV.IsWrite) #endregion { #region 11.92 database.Get(EMVTagsEnum.TORN_RECORD_FF8101_KRN2).Value = database.TornTempRecord.Value; #endregion } #region 11.93 IDS_STATUS_DF8128_KRN2 ids = new IDS_STATUS_DF8128_KRN2(database); CommonRoutines.CreateEMVDiscretionaryData(database); if (ids.Value.IsWrite) #endregion { #region 11.94 CommonRoutines.CreateEMVDataRecord(database); #endregion } #region 11.95 return(CommonRoutines.PostOutcome(database, qManager, KernelMessageidentifierEnum.ERROR_OTHER_CARD, KernelStatusEnum.NOT_READY, null, Kernel2OutcomeStatusEnum.END_APPLICATION, Kernel2StartEnum.N_A, true, message, l1Enum, cardResponse.ApduResponse.SW12, l2Enum, l3Enum)); #endregion }
/* * 11.1 */ private static SignalsEnum EntryPointL1RSP(Kernel2Database database, CardResponse cardResponse, KernelQ qManager, TornTransactionLogManager tornTransactionLogManager) { #region 11.11 IDS_STATUS_DF8128_KRN2.IDS_STATUS_DF8128_KRN2_VALUE idsV = new IDS_STATUS_DF8128_KRN2.IDS_STATUS_DF8128_KRN2_VALUE(EMVTagsEnum.IDS_STATUS_DF8128_KRN2.DataFormatter); idsV.Deserialize(database.TornTempRecord.Children.Get(EMVTagsEnum.IDS_STATUS_DF8128_KRN2.Tag).Value, 0); if (!idsV.IsWrite) #endregion { #region 11.12 tornTransactionLogManager.TornTransactionLogs.RemoveFromList(database.Get(EMVTagsEnum.TORN_RECORD_FF8101_KRN2)); #endregion } #region 11.13 database.TornTempRecord = new TORN_RECORD_FF8101_KRN2(database); database.TornTempRecord.Initialize(); database.TornTempRecord.AddTornTransactionLog(database); #endregion #region 11.15 tornTransactionLogManager.AddTornTransactionLog(database); #endregion #region 11.16 - 11.17 CommonRoutines.CreateEMVDiscretionaryData(database); return(CommonRoutines.PostOutcome(database, qManager, KernelMessageidentifierEnum.TRY_AGAIN, KernelStatusEnum.READY_TO_READ, new byte[] { 0x00, 0x00, 0x00 }, Kernel2OutcomeStatusEnum.END_APPLICATION, Kernel2StartEnum.B, false, KernelMessageidentifierEnum.TRY_AGAIN, L1Enum.NOT_SET, cardResponse.ApduResponse.SW12, L2Enum.STATUS_BYTES, L3Enum.NOT_SET)); #endregion }
private static SignalsEnum DoCDAPart_A(Kernel2Database database, KernelQ qManager, PublicKeyCertificateManager publicKeyCertificateManager, CardQ cardQManager, CardResponse cardResponse) { #region 11.40 CAPublicKeyCertificate capk = publicKeyCertificateManager.GetCAPK(RIDEnum.A000000004, database.Get(EMVTagsEnum.CERTIFICATION_AUTHORITY_PUBLIC_KEY_INDEX_8F_KRN).Value[0]); #endregion if (capk == null) { #region 11.46 return(DoPart_F(database, qManager, cardResponse)); #endregion } else { #region 11.41 IDS_STATUS_DF8128_KRN2 ids = new IDS_STATUS_DF8128_KRN2(database); TERMINAL_VERIFICATION_RESULTS_95_KRN tvr = new TERMINAL_VERIFICATION_RESULTS_95_KRN(database); if (ids.Value.IsRead) #endregion { bool successIDSRead = false; #region 11.41.2 if (tvr.Value.RelayResistancePerformedEnum == RelayResistancePerformedEnum.RRP_PERFORMED) #endregion { #region 11.42.1 successIDSRead = VerifySDAD_Summaries_CheckRelayData_42_1(database, capk, cardResponse); #endregion } else { #region 11.42 successIDSRead = VerifySDAD_Summaries_42(database, capk, cardResponse); #endregion } if (!successIDSRead) { #region 11.46 return(DoPart_F(database, qManager, cardResponse)); #endregion } else { #region return(DoPart_E(database, qManager, cardQManager)); #endregion } } else { bool successIDSNotRead = false; #region 11.41.1 if (tvr.Value.RelayResistancePerformedEnum == RelayResistancePerformedEnum.RRP_PERFORMED) #endregion { #region 11.43.1 successIDSNotRead = VerifySDAD_CheckRelayData_43_1(database, capk, cardResponse); #endregion } else { #region 11.43 successIDSNotRead = VerifySDAD_43(database, capk, cardResponse); #endregion } if (!successIDSNotRead) { #region 11.46 return(DoPart_F(database, qManager, cardResponse)); #endregion } else { #region 11.47 IDS_STATUS_DF8128_KRN2.IDS_STATUS_DF8128_KRN2_VALUE idsV = new IDS_STATUS_DF8128_KRN2.IDS_STATUS_DF8128_KRN2_VALUE(EMVTagsEnum.IDS_STATUS_DF8128_KRN2.DataFormatter); idsV.Deserialize(database.TornTempRecord.Children.Get(EMVTagsEnum.IDS_STATUS_DF8128_KRN2.Tag).Value, 0); string dbds1 = Formatting.ByteArrayToHexString(database.Get(EMVTagsEnum.DS_SUMMARY_1_9F7D_KRN2).Value); if (idsV.IsWrite) #endregion { #region 11.48 string ttrds1 = Formatting.ByteArrayToHexString(database.TornTempRecord.Children.Get(EMVTagsEnum.DS_SUMMARY_1_9F7D_KRN2.Tag).Value); if (dbds1 != ttrds1) #endregion { #region 11.49 return(DoInvalidResponsePart_C(database, qManager, cardResponse, KernelMessageidentifierEnum.N_A, L1Enum.NOT_SET, L2Enum.IDS_READ_ERROR, L3Enum.NOT_SET)); #endregion } } #region 11.50 if (!database.IsPresent(EMVTagsEnum.DS_SUMMARY_2_DF8101_KRN2.Tag)) #endregion { #region 11.51 return(DoInvalidResponsePart_C(database, qManager, cardResponse, KernelMessageidentifierEnum.N_A, L1Enum.NOT_SET, L2Enum.CARD_DATA_MISSING, L3Enum.NOT_SET)); #endregion } #region 11.52 string dbds2 = Formatting.ByteArrayToHexString(database.Get(EMVTagsEnum.DS_SUMMARY_2_DF8101_KRN2).Value); if (dbds1 != dbds2) #endregion { #region 11.53 return(DoInvalidResponsePart_C(database, qManager, cardResponse, KernelMessageidentifierEnum.N_A, L1Enum.NOT_SET, L2Enum.IDS_READ_ERROR, L3Enum.NOT_SET)); #endregion } #region 11.54 byte dsss = database.Get(EMVTagsEnum.DS_SUMMARY_STATUS_DF810B_KRN2).Value[0]; dsss = (byte)(dsss | 0x80); //set succesful read database.Get(EMVTagsEnum.DS_SUMMARY_STATUS_DF810B_KRN2).Value[0] = dsss; #endregion #region 11.55 if (!ids.Value.IsWrite) #endregion { #region 11.110 return(DoPart_E(database, qManager, cardQManager)); #endregion } else { #region 11.56 if (!database.IsPresent(EMVTagsEnum.DS_SUMMARY_3_DF8102_KRN2.Tag)) #endregion { #region 11.57 return(DoInvalidResponsePart_C(database, qManager, cardResponse, KernelMessageidentifierEnum.N_A, L1Enum.NOT_SET, L2Enum.CARD_DATA_MISSING, L3Enum.NOT_SET)); #endregion } else { #region 11.58 string dbds3 = Formatting.ByteArrayToHexString(database.Get(EMVTagsEnum.DS_SUMMARY_3_DF8102_KRN2).Value); if (dbds2 == dbds3) #endregion { #region 11.60 byte dsodsifr = database.Get(EMVTagsEnum.DS_ODS_INFO_FOR_READER_DF810A_KRN2).Value[0]; if ((dsodsifr & 0x02) == 0x02) //stop if write set #endregion { #region 11.61 CommonRoutines.UpdateErrorIndication(database, cardResponse, L1Enum.NOT_SET, L2Enum.IDS_WRITE_ERROR, L3Enum.NOT_SET); #endregion return(DoInvalidResponsePart_D(database, qManager)); } else { return(DoPart_E(database, qManager, cardQManager)); } } else { #region 11.59 dsss = (byte)(dsss | 0x40); //set succesful write database.Get(EMVTagsEnum.DS_SUMMARY_STATUS_DF810B_KRN2).Value[0] = dsss; return(DoPart_E(database, qManager, cardQManager)); #endregion } } } } } } }