Ejemplo n.º 1
0
        public static KdcHelloResponse Decode(byte[] message)
        {
            var obj = SksAsn1Parser.Parse(message);
            var set = (List <object>)obj;

            var users = new List <User>();

            foreach (var sequenceObj in set)
            {
                var sequence = (List <object>)sequenceObj;
                var ip       = (string)sequence[0];
                var port     = (string)sequence[1];
                var name     = (string)sequence[2];
                var key      = (byte[])sequence[3];
                var pass     = (string)sequence[4];

                var user = new User
                {
                    Password  = pass,
                    Key       = key,
                    Name      = name,
                    IpAddress = ip,
                    Port      = port,
                };

                users.Add(user);
            }

            return(new KdcHelloResponse
            {
                Users = users,
            });
        }
Ejemplo n.º 2
0
        public static Akep2Message3 FromString(string str, byte[] longTermKey)
        {
            var contentBytes       = PemParser.GetMessageContentBytes(str);
            var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes);

            var iv            = (byte[])contentObjectsList[0];
            var encryptedPart = (byte[])contentObjectsList[1];
            var hmacPart      = (byte[])contentObjectsList[2];

            var myHmac = SksHmac.Hash(longTermKey, encryptedPart);

            if (!Utils.CompareByteArrays(hmacPart, myHmac))
            {
                Logger.Log("AKEP2MESSAGE2:", "Hmac doesn't match");
                return(null);
            }

            var decryptedSequence = SksAes.DecryptBytesFromBytes_Aes(encryptedPart, longTermKey, iv);

            contentObjectsList = (List <object>)SksAsn1Parser.Parse(decryptedSequence);

            var a      = (string)contentObjectsList[0];
            var nonceB = (byte[])contentObjectsList[1];

            return(new Akep2Message3(a, nonceB, longTermKey));
        }
Ejemplo n.º 3
0
        public static Akep2Message1 FromString(string str)
        {
            var contentBytes       = PemParser.GetMessageContentBytes(str);
            var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes);

            var nonceA = (byte[])contentObjectsList[0];

            return(new Akep2Message1(nonceA));
        }
Ejemplo n.º 4
0
        public static ChatMessage FromString(string str)
        {
            var contentBytes       = PemParser.GetMessageContentBytes(str);
            var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes);

            var iv = (byte[])contentObjectsList[0];
            var encryptedmessageBytes = (byte[])contentObjectsList[1];
            var hmacBytes             = (byte[])contentObjectsList[2];

            return(new ChatMessage(iv, encryptedmessageBytes, hmacBytes));
        }
Ejemplo n.º 5
0
        public static HandshakeMessage2 FromString(string str)
        {
            var contentBytes       = PemParser.GetMessageContentBytes(str);
            var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes);

            var protocolId = (ProtocolType)(int)contentObjectsList[0];

            //var ttps = (List<string>) contentObjectsList[1];

            // todo: add TTPs
            return(new HandshakeMessage2(protocolId, null));
        }
Ejemplo n.º 6
0
        public static HandshakeMessage1 FromString(string str)
        {
            var contentBytes       = PemParser.GetMessageContentBytes(str);
            var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes);

            var a          = (string)contentObjectsList[0];
            var b          = (string)contentObjectsList[1];
            var keyId      = (byte[])contentObjectsList[2];
            var passwordId = (byte[])contentObjectsList[3];

            // todo: add TTPs
            return(new HandshakeMessage1(a, b, keyId, passwordId, null));
        }
Ejemplo n.º 7
0
        public void ParseTest5AnybodyThere()
        {
            // 30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f - 5 anybody there?
            var message = new byte[] { 0x10, 0x13, 0x02, 0x01, 0x05, 0x13, 0x0e, 0x41, 0x6e, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x3f, };

            var obj     = SksAsn1Parser.Parse(message);
            var objList = (List <object>)obj;
            var number  = (int)objList[0];
            var str     = (string)objList[1];

            Assert.AreEqual(5, number);
            Assert.AreEqual("Anybody there?", str);
        }
Ejemplo n.º 8
0
        public void ParseTestKdcSample()
        {
            // kdc sample message
            var message = new byte[] { 0x17, 0x2B, 0x10, 0x29, 0x13, 0x0F, 0x31, 0x31, 0x31, 0x2E, 0x31, 0x31, 0x31, 0x2E, 0x31, 0x31, 0x31, 0x2E, 0x31, 0x31, 0x31, 0x02, 0x01, 0x05, 0x13, 0x0e, 0x41, 0x6e, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x3f, 0x04, 0x00, 0x13, 0x01, 65, };

            var obj      = SksAsn1Parser.Parse(message);
            var set      = (List <object>)obj;
            var sequence = (List <object>)set[0];
            var ip       = (string)sequence[0];
            var number   = (int)sequence[1];
            var str      = (string)sequence[2];
            var b        = (byte[])sequence[3];
            var str2     = (string)sequence[4];

            Assert.AreEqual("111.111.111.111", ip);
            Assert.AreEqual(5, number);
            Assert.AreEqual("Anybody there?", str);
            CollectionAssert.AreEqual(new byte[] {}, b);
            Assert.AreEqual("A", str2);
        }
Ejemplo n.º 9
0
        public static KdcHelloResponse FromString(string message, byte[] kdcKey)
        {
            var contentBytes       = PemParser.GetMessageContentBytes(message);
            var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes);

            var iv            = (byte[])contentObjectsList[0];
            var encryptedPart = (byte[])contentObjectsList[1];

            var decryptedSequence = SksAes.DecryptBytesFromBytes_Aes(encryptedPart, kdcKey, iv);

            contentObjectsList = (List <object>)SksAsn1Parser.Parse(decryptedSequence);

            var users = new List <User>();

            foreach (var sequenceObj in contentObjectsList)
            {
                var sequence = (List <object>)sequenceObj;
                var ip       = (string)sequence[0];
                var port     = (string)sequence[1];
                var name     = (string)sequence[2];
                var key      = (byte[])sequence[3];
                var pass     = (string)sequence[4];

                var user = new User
                {
                    Password  = pass,
                    Key       = key,
                    Name      = name,
                    IpAddress = ip,
                    Port      = port,
                };

                users.Add(user);
            }

            return(new KdcHelloResponse
            {
                Users = users,
            });
        }