Example #1
0
        public void DecryptedPacketToByteBufferCheck()
        {
            bool isValid;

            DaedalusGlobal.ReturnCodes returnCode;
            int packetStart;
            int packetLength;
            DecryptedDaedalusPacket packet;

            //                   <STX><packetLength><packetIndex><cmd><cmdVer> <cmdLen>  <cmdPay><hash>                                                                                                           <act> <ETX>   <CRC>    <EOT>
            //                      0     1     2     3     4      5     6     7     8     9     10   11    12    13    14    15    16    17    18    19    20    21    22    23    24    25    26    27    28    29    30    31    32    33
            byte[] testPacket = { 0x02, 0x1C, 0x00, 0x01, 0x00, 0x20, 0x01, 0x15, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3A, 0x1f, 0x04 };

            isValid = DecryptedDaedalusPacket.IsValidPacket(testPacket, out returnCode, out packetStart, out packetLength);
            Assert.AreEqual(isValid, true);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.Valid);
            packet = new DecryptedDaedalusPacket(testPacket, 0, testPacket.Length, out returnCode);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.Valid);
            Assert.IsNotNull(packet);
            Assert.IsTrue(packet.getTotalPacketLength() == testPacket.Length);
            Assert.IsTrue(packet.payload.Count == 2);
            Assert.IsTrue(packet.payload.ContainsKey("hash"));
            Assert.IsTrue(packet.payload.ContainsKey("actionTaken"));

            byte[] bufferBackOut = packet.toByteBuffer();
            Assert.IsTrue(bufferBackOut.SequenceEqual(testPacket));
        }
Example #2
0
        private void packetProcessingSequence(NetPacket packet)
        {
            DaedalusGlobal.ReturnCodes rc;
            int packetStart, packetLength;

            // We already did this in the comms stream parser, but what the hey
            if (EncryptedDaedalusPacket.IsValidPacket(packet.payload, out rc, out packetStart, out packetLength))
            {
                // Build the encrypted packet
                EncryptedDaedalusPacket encPacket = new EncryptedDaedalusPacket(packet.payload, packetStart, packetLength, out rc, AESKey);

                // If the decrypted payload is a valid packet...
                if (DecryptedDaedalusPacket.IsValidPacket(encPacket.decryptedPayload, out rc, out packetStart, out packetLength))
                {
                    // Build the decrypted packet
                    DecryptedDaedalusPacket decPacket = new DecryptedDaedalusPacket(encPacket.decryptedPayload, packetStart, packetLength, out rc);

                    // Resolve the command type of this packet
                    IDaedalusCommandType commandType = decPacket.commandType;
                    //IDaedalusCommandType commandType = DecryptedDaedalusPacket.commandTypes.Where(p => p.getCommandType() == decPacket.command).First();

                    // I don't really like passing the whole form as a parameter, but it was either that, a huge list of parameters, or a big switch statement here
                    commandType.processAction(decPacket, this, packet.source);
                }
            }
        }
Example #3
0
        public void CRCSuccess()
        {
            bool isValid;

            DaedalusGlobal.ReturnCodes returnCode;
            int packetStart;
            int packetLength;

            byte[] testPacket = { 0x05, 0x04, 0x02, 0x07, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x03, 0x80, 0x48, 0x04 };

            isValid = DecryptedDaedalusPacket.IsValidPacket(testPacket, out returnCode, out packetStart, out packetLength);
            Assert.AreEqual(isValid, true);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.Valid);
        }
Example #4
0
        public void CRCFailure()
        {
            bool isValid;

            DaedalusGlobal.ReturnCodes returnCode;
            int packetStart;
            int packetLength;

            byte[] testPacket = { 0x05, 0x04, 0x02, 0x07, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x03, 0xFF, 0xFF, 0x04 };

            isValid = DecryptedDaedalusPacket.IsValidPacket(testPacket, out returnCode, out packetStart, out packetLength);
            Assert.AreEqual(isValid, false);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.IncorrectCRC);
        }
Example #5
0
        public void SOHFailure()
        {
            bool isValid;

            DaedalusGlobal.ReturnCodes returnCode;
            int packetStart;
            int packetLength;

            byte[] testPacket = { 0x20, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 };

            isValid = DecryptedDaedalusPacket.IsValidPacket(testPacket, out returnCode, out packetStart, out packetLength);
            Assert.AreEqual(isValid, false);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.InvalidPacketStructure);
        }
        internal DecryptedDaedalusPacket toDecryptedDaedalusPacket(out DaedalusGlobal.ReturnCodes returnCode)
        {
            DaedalusGlobal.ReturnCodes rc;
            int start;
            int len;

            // Build a clear text packet from the decrypted data
            if (DecryptedDaedalusPacket.IsValidPacket(decryptedPayload, out rc, out start, out len))
            {
                returnCode = DaedalusGlobal.ReturnCodes.Valid;
                return(new DecryptedDaedalusPacket(decryptedPayload, start, len, out rc));
            }
            else
            {
                returnCode = rc;
                return(null);
            }
        }
Example #7
0
        public void PayloadParseCommandNotImplemented()
        {
            bool isValid;

            DaedalusGlobal.ReturnCodes returnCode;
            int packetStart;
            int packetLength;
            DecryptedDaedalusPacket packet;

            //                   <STX><packetLength><packetIndex><cmd><cmdVer> <cmdLen>  <cmdPay><hash>                                                                                                           <act> <ETX>   <CRC>    <EOT>
            //                      0     1     2     3     4      5     6     7     8     9     10   11    12    13    14    15    16    17    18    19    20    21    22    23    24    25    26    27    28    29    30    31    32    33
            byte[] testPacket = { 0x02, 0x1C, 0x00, 0x01, 0x00, 0x19, 0x01, 0x15, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb7, 0xdf, 0x04 };

            isValid = DecryptedDaedalusPacket.IsValidPacket(testPacket, out returnCode, out packetStart, out packetLength);
            Assert.AreEqual(isValid, true);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.Valid);
            packet = new DecryptedDaedalusPacket(testPacket, 0, testPacket.Length, out returnCode);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.CommandNotImplemented);
        }
Example #8
0
        public void BuildEncryptedPacketFromDecryptedPacketSuccess()
        {
            bool isValid;

            DaedalusGlobal.ReturnCodes returnCode;
            int packetStart;
            int packetLength;
            DecryptedDaedalusPacket packet;

            //                   <STX><packetLength><packetIndex><cmd><cmdVer> <cmdLen>  <cmdPay><hash>                                                                                                           <act> <ETX>   <CRC>    <EOT>
            //                      0     1     2     3     4      5     6     7     8     9     10   11    12    13    14    15    16    17    18    19    20    21    22    23    24    25    26    27    28    29    30    31    32    33
            byte[] testPacket = { 0x02, 0x1C, 0x00, 0x01, 0x00, 0x20, 0x01, 0x15, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3A, 0x1f, 0x04 };

            isValid = DecryptedDaedalusPacket.IsValidPacket(testPacket, out returnCode, out packetStart, out packetLength);
            Assert.AreEqual(isValid, true);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.Valid);
            Assert.IsTrue(packetStart == 0);
            Assert.IsTrue(packetLength == testPacket.Length);
            packet = new DecryptedDaedalusPacket(testPacket, 0, testPacket.Length, out returnCode);
            Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.Valid);
            Assert.IsNotNull(packet);
            Assert.IsTrue(packet.payload.Count == 2);
            Assert.IsTrue(packet.payload.ContainsKey("hash"));
            Assert.IsTrue(packet.payload.ContainsKey("actionTaken"));

            // At this point decrypted packet is built and verified

            // Build encrypted packet from the decrypted packet
            EncryptedDaedalusPacket encryptedPacket1 = new EncryptedDaedalusPacket(packet, TestHelpers.goodAESKey);

            byte[] encryptedBuffer1 = encryptedPacket1.toByteBuffer();
            Assert.IsTrue(encryptedBuffer1.Length > testPacket.Length);

            Assert.IsNotNull(encryptedPacket1);
            byte[] encryptedPayload = encryptedPacket1.encryptedPayload;
            Assert.IsNotNull(encryptedPayload);

            byte[] decryptedPayload1 = encryptedPacket1.decryptedPayload;
            Assert.IsNotNull(decryptedPayload1);
            Assert.IsTrue(testPacket.SequenceEqual(decryptedPayload1));


            // Build encrypted packet from decrypted packet's payload
            List <byte> encryptedPacketRaw = new List <byte>();

            encryptedPacketRaw.AddRange(new byte[] { GlobalConstants.SOH, 0x61, 0x00 });
            encryptedPacketRaw.AddRange(encryptedPayload);
            encryptedPacketRaw.AddRange(new byte[] { GlobalConstants.ETX, 0x03, 0x46, GlobalConstants.EOT });
            byte[] encryptedPacketBuffer = encryptedPacketRaw.ToArray();

            // Actually we can't validate this packet because the CRC will change with each new encryption

            //isValid = EncryptedDaedalusPacket.IsValidPacket(encryptedPacketBuffer, out returnCode, out packetStart, out packetLength);
            //Assert.AreEqual(isValid, true);
            //Assert.AreEqual(returnCode, DaedalusGlobal.ReturnCodes.Valid);
            //Assert.IsTrue(packetStart == 0);
            //Assert.IsTrue(packetLength == encryptedPacketBuffer.Length);
            EncryptedDaedalusPacket encryptedPacket2 = new EncryptedDaedalusPacket(encryptedPacketBuffer, 0, encryptedPacketBuffer.Length, out returnCode, TestHelpers.goodAESKey);

            Assert.IsNotNull(encryptedPacket2);
            byte[] decryptedPayload2 = encryptedPacket2.decryptedPayload;
            Assert.IsNotNull(decryptedPayload2);
            Assert.IsTrue(testPacket.SequenceEqual(decryptedPayload2));
        }