Exemplo n.º 1
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));
        }
Exemplo n.º 2
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));
        }
Exemplo n.º 3
0
        public void GetMessageBytesTest()
        {
            // todo: refactor
            var expectedSequence       = new byte[] { (byte)SksAsn1Type.Sequence, 0x0E, (byte)SksAsn1Type.Printablestring, 0x03, 65, 66, 67, (byte)SksAsn1Type.OctetString, 0x05, 0x00, 0x01, 0x02, 0x03, 0x04, };
            var expectedSequenceBase64 = Convert.ToBase64String(expectedSequence);
            var expected = $"-----BEGIN INITIAL MESSAGE 1-----{expectedSequenceBase64}-----END INITIAL MESSAGE 1";

            var messageBytes = PemParser.GetMessageContentBytes(expected);

            CollectionAssert.AreEqual(expectedSequence, messageBytes);
        }
Exemplo 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));
        }
Exemplo 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));
        }
Exemplo 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));
        }
Exemplo n.º 7
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,
            });
        }