public static void DoCVMProcessing(Kernel1Database database, ACTypeEnum acType) { CVMSelection_7_5.CVMSelection(database, new Func <bool>(() => { return(new KERNEL_CONFIGURATION_DF811B_KRN2(database).Value.OnDeviceCardholderVerificationSupported); })); }
public override int Deserialize(byte[] rawTlv, int pos) { pos = base.Deserialize(rawTlv, pos); DSACTypeEnum = (ACTypeEnum)GetEnum(typeof(ACTypeEnum), Value[0] >> 6); return(pos); }
public override string ToPrintString() { StringBuilder sb = new StringBuilder(); sb.AppendLine("Start ADPU Request: " + this.GetType().Name); bool CDARequested = Formatting.GetBitPosition(P1, 5); ACTypeEnum ACType = (ACTypeEnum)Formatting.GetEnum(typeof(ACTypeEnum), (P1 >> 6)); sb.AppendLine("CDA Requested: " + CDARequested + " ACType:" + ACType); sb.AppendLine("CDOL Data: [" + Formatting.ByteArrayToHexString(cdolData) + "]"); if (dsdolData != null) { sb.AppendLine("DSDOL Data: " + Formatting.ByteArrayToHexString(dsdolData)); } sb.AppendLine("End ADPU Request: " + this.GetType().Name); return(sb.ToString()); }
private static void SetDSACType(KernelDatabaseBase database, ACTypeEnum acTypeEnum) { ((Kernel2Database)database).ACType.Value.DSACTypeEnum = acTypeEnum; }
public static KernelCVMEnum DoCVMProcessing(Kernel3Database database, ACTypeEnum acType) { KernelCVMEnum cvm = KernelCVMEnum.N_A; TERMINAL_TRANSACTION_QUALIFIERS_9F66_KRN ttq = new TERMINAL_TRANSACTION_QUALIFIERS_9F66_KRN(database); if (!database.DeclineRequiredByReaderIndicator) { #region 5.7.1.1 if (database.IsEmpty(EMVTagsEnum.CARD_TRANSACTION_QUALIFIERS_CTQ_9F6C_KRN3.Tag) && ttq.Value.CVMRequired) #endregion { if (ttq.Value.SignatureSupported) { cvm = KernelCVMEnum.OBTAIN_SIGNATURE; } else if (ttq.Value.ConsumerDeviceCVMSupported && ttq.Value.OnlinePINSupported) { cvm = KernelCVMEnum.ONLINE_PIN; } else// only ttq.Value.ConsumerDeviceCVMSupported { database.DeclineRequiredByReaderIndicator = true; } } if (database.IsNotEmpty(EMVTagsEnum.CARD_TRANSACTION_QUALIFIERS_CTQ_9F6C_KRN3.Tag)) { #region 5.7.1.2 CARD_TRANSACTION_QUALIFIERS_CTQ_9F6C_KRN3 ctq = new CARD_TRANSACTION_QUALIFIERS_CTQ_9F6C_KRN3(database); if (ctq.Value.OnlinePINRequired && ttq.Value.OnlinePINSupported) { cvm = KernelCVMEnum.ONLINE_PIN; database.OnlineRequiredByReaderIndicator = true; } else { if (ctq.Value.ConsumerDeviceCVMPerformed) { TLV card = database.Get(EMVTagsEnum.CARD_AUTHENTICATION_RELATED_DATA_9F69_KRN3); if (card != null) { byte[] card67 = new byte[2]; byte[] ctq12 = new byte[2]; Array.Copy(card.Value, 6, card67, 0, 2); Array.Copy(ctq.Value.Value, 0, ctq12, 0, 2); if (Formatting.ByteArrayToHexString(card67) == Formatting.ByteArrayToHexString(ctq12)) { cvm = KernelCVMEnum.CONFIRMATION_CODE_VERIFIED; } else { database.DeclineRequiredByReaderIndicator = true; } } else { if (acType == ACTypeEnum.ARQC) { cvm = KernelCVMEnum.CONFIRMATION_CODE_VERIFIED; } else { database.DeclineRequiredByReaderIndicator = true; } } } } if (!ctq.Value.OnlinePINRequired && !ctq.Value.ConsumerDeviceCVMPerformed) { if (ttq.Value.SignatureSupported && ctq.Value.SignatureRequired) { cvm = KernelCVMEnum.OBTAIN_SIGNATURE; } } #endregion } } if (cvm == KernelCVMEnum.N_A && ttq.Value.CVMRequired) { cvm = KernelCVMEnum.NO_CVM; database.DeclineRequiredByReaderIndicator = true; } if (cvm == KernelCVMEnum.N_A) { cvm = KernelCVMEnum.NO_CVM; } return(cvm); }