internal static byte[] CreateTripleDES(RSAItems rsaItems, byte[] tripleKey) { List <byte> triplePacket = new List <byte>(); triplePacket.AddRange(MessageBuilder.HexToByteArray(GMPDataTags.DT_ENC_KEY)); triplePacket.AddRange(MessageBuilder.AddLength(256)); //tripleKey = Encoding.ASCII.GetBytes("1234567890123456"); triplePacket.AddRange(MessageBuilder.EncryptRSA(rsaItems.Modulus, rsaItems.Exponent, tripleKey)); //KEY VALUE byte[] arrCheck = new byte[32]; for (int i = 0; i < 32; i++) { arrCheck[i] = (byte)0; } arrCheck = MessageBuilder.EncryptTriple(arrCheck, arrCheck.Length, tripleKey); List <byte> chk = new List <byte>(); for (int i = 0; i < 16; i++) { chk.Add(arrCheck[i]); } triplePacket.AddRange(MessageBuilder.HexToByteArray(GMPDataTags.DT_CHK_VAL)); triplePacket.AddRange(MessageBuilder.AddLength(16)); triplePacket.AddRange(chk.ToArray()); return(triplePacket.ToArray()); }
internal static byte[] CreateKeyChange(DeviceInfo devInfo) { List <byte> keyChangePacket = new List <byte>(); //LOCAL IP keyChangePacket.AddRange(MessageBuilder.HexToByteArray(GMPDataTags.DT_IP)); keyChangePacket.AddRange(MessageBuilder.AddLength(6)); String[] strLocalIP = getLocalIP().Split('.');//devInfo.DevIP.ToString().Split('.'); String ip12Format = ""; for (int i = 0; i < strLocalIP.Length; i++) { ip12Format += String.Format("{0:D3}", Convert.ToInt32(strLocalIP[i])); } for (int i = 0; i < ip12Format.Length; i++) { String strByte = ip12Format.Substring(i, 2); keyChangePacket.AddRange(MessageBuilder.ConvertIntToBCD(Convert.ToInt32(strByte), 1)); i++; } //BRAND keyChangePacket.AddRange(MessageBuilder.HexToByteArray(GMPDataTags.DT_BRAND)); keyChangePacket.AddRange(MessageBuilder.AddLength(devInfo.DevBrand.Length)); keyChangePacket.AddRange(Encoding.ASCII.GetBytes(devInfo.DevBrand)); //MODEL keyChangePacket.AddRange(MessageBuilder.HexToByteArray(GMPDataTags.DT_MODEL)); keyChangePacket.AddRange(MessageBuilder.AddLength(devInfo.DevModel.Length)); keyChangePacket.AddRange(Encoding.ASCII.GetBytes(devInfo.DevModel)); //SERIAL keyChangePacket.AddRange(MessageBuilder.HexToByteArray(GMPDataTags.DT_SERIAL)); keyChangePacket.AddRange(MessageBuilder.AddLength(devInfo.TerminalNo.Length)); keyChangePacket.AddRange(Encoding.ASCII.GetBytes(devInfo.TerminalNo)); return(keyChangePacket.ToArray()); }
private byte[] CreateRequest(String terminalNo, int messageType, Command cmd, byte[] data, int dataLen) { /* General Message for Request * XX Length * ASCII Terminal Serial * XX Message Type * BCD SequenceNum * BCD Date * BCD Time * [Detail] * XX LRC */ Encoding encode = Encoding.GetEncoding(1254); List <byte> reqPacket = new List <byte>(); List <byte> msgPacket = new List <byte>(); int allLen = dataLen; //SEQUNCE reqPacket.AddRange(MessageBuilder.HexToByteArray(GMPCommonTags.TAG_SEQUNCE)); reqPacket.Add((byte)GMPConstants.LEN_SEQUENCE); byte[] arrVal = MessageBuilder.ConvertIntToBCD(seqNum, GMPConstants.LEN_SEQUENCE); reqPacket.AddRange(arrVal); //DATE and TIME reqPacket.AddRange(MessageBuilder.GetDateTimeInBytes(DateTime.Now)); // Fiscal Command if (cmd != Command.NULL && cmd != Command.RAW_MESSAGE) { reqPacket.AddRange(MessageBuilder.HexToByteArray(FPUCommonTags.FPU_FISCAL_COMMAND)); reqPacket.Add((byte)GMPConstants.LEN_FISCAL_COMMAND); reqPacket.Add((byte)cmd); } if (dataLen > 0) { reqPacket.AddRange(data); } if (FiscalPrinter.TripleKey != null && messageType == REQUEST_MSG_ID) { // End of message Tag reqPacket.AddRange(MessageBuilder.HexToByteArray(FPUDataTags.ENDOFMSG)); reqPacket.Add(1); reqPacket.Add(1); byte[] desData = MessageBuilder.EncryptTriple(reqPacket.ToArray(), reqPacket.Count, FiscalPrinter.TripleKey); if (desData.Length > 0) { reqPacket.Clear(); //ENCRYPTION DATA reqPacket.AddRange(desData); } } // Terminal ID msgPacket.AddRange(encode.GetBytes(terminalNo.PadLeft(12, ' '))); // Message TAG msgPacket.AddRange(MessageBuilder.HexToByteArray(messageType)); // Message length int msgLen = reqPacket.Count; msgPacket.AddRange(MessageBuilder.AddLength(msgLen)); // Message Data msgPacket.AddRange(reqPacket); // CRC msgPacket.Add(MessageBuilder.CalculateLRC(msgPacket)); // All Length allLen = msgPacket.Count; msgPacket.Insert(0, (byte)(allLen % 256)); msgPacket.Insert(0, (byte)(allLen / 256)); return(msgPacket.ToArray()); }