public int deserialize(KernelDatabaseBase database, byte[] iccDynamicData, int pos) { ICCDynamicNumberLength = iccDynamicData[pos]; pos++; ICCDynamicNumber = new byte[ICCDynamicNumberLength]; Array.Copy(iccDynamicData, pos, ICCDynamicNumber, 0, ICCDynamicNumber.Length); pos = pos + ICCDynamicNumber.Length; if (IccDynamicDataType != ICCDynamicDataType.DYNAMIC_NUMBER_ONLY) { CryptogramInformationData = iccDynamicData[pos]; pos++; ApplicationCryptogram = new byte[8]; Array.Copy(iccDynamicData, pos, ApplicationCryptogram, 0, ApplicationCryptogram.Length); pos = pos + ApplicationCryptogram.Length; TransactionDataHashCode = new byte[20]; Array.Copy(iccDynamicData, pos, TransactionDataHashCode, 0, TransactionDataHashCode.Length); pos = pos + TransactionDataHashCode.Length; } APPLICATION_CAPABILITIES_INFORMATION_9F5D_KRN2 aci; switch (IccDynamicDataType) { case ICCDynamicDataType.NO_IDS_OR_RRP: break; case ICCDynamicDataType.IDS_AND_RRP: aci = new APPLICATION_CAPABILITIES_INFORMATION_9F5D_KRN2(database); pos = deserializeIDS(aci, iccDynamicData, pos); pos = deserializeRRP(iccDynamicData, pos); break; case ICCDynamicDataType.IDS: aci = new APPLICATION_CAPABILITIES_INFORMATION_9F5D_KRN2(database); pos = deserializeIDS(aci, iccDynamicData, pos); break; case ICCDynamicDataType.RRP: pos = deserializeRRP(iccDynamicData, pos); break; } return(pos); }
private int deserializeIDS(APPLICATION_CAPABILITIES_INFORMATION_9F5D_KRN2 aci, byte[] iccDynamicData, int pos) { int summaryLength; switch (aci.Value.DataStorageVersionNumberEnum) { case DataStorageVersionNumberEnum.VERSION_1: summaryLength = 8; break; case DataStorageVersionNumberEnum.VERSION_2: summaryLength = 16; break; default: throw new EMVProtocolException("Invalid DataStorageVersionNumberEnum in ICCDynamicData"); } if (pos + summaryLength <= iccDynamicData.Length) { DSSummary2 = new byte[summaryLength]; Array.Copy(iccDynamicData, pos, DSSummary2, 0, DSSummary2.Length); pos = pos + DSSummary2.Length; } else { DSSummary2 = null; } if (pos + summaryLength <= iccDynamicData.Length) { DSSummary3 = new byte[summaryLength]; Array.Copy(iccDynamicData, pos, DSSummary3, 0, DSSummary3.Length); pos = pos + DSSummary3.Length; } else { DSSummary3 = null; } return(pos); }