示例#1
0
        public void M2SetupTest()
        {
            var fixedSrpGenerator     = new FixedSaltGenerator();
            var expectedTlvHexReponse =
                "0601040440847786bbdb27e466f3533fa2016f5eaff57ffddc99c55d97d8cc634bcbd95c9c2ba0167e717ecd9fc19aa8b03987a9b0a1b3b676b8e33ce8d097a05bffbd4a24";
            var inputData =
                "06010303ffa080de13894d7d0f183472a4ac1ac1be4efeea83685bd9e318e7e33516ee2637469e35cb3695d2885b9d000a053d8ebac30fb82348915f941e54b4386b2d6e4d7b99b91b94ca937a2026651f9d28b59596e7d5078b220050dc22e4962462f5d59b801c1854ea0238cfecbc3521580597d5abf5035bddf295caf55d528898e1c835d624f3d3e12a62f9ff1363c86b0e5d28cfdd16aed5bb6d13d93c6ab5985f0d5f5325a6c3d22db574e060694d6a373a98335ee0e72c036a413ec2374e7d235e1cb71953bf89ba9712a07d5598323ece6d64f7032add9d7f8787dce3abdadd06d2cad3b6df6376f0dc617c421fc918ad04277f91c722f92e264f2cea5d4af103818bfa268350586190f3cf58f97ea5153970aa3ab48c636ddf043966a3183bc0514616f03bd5e9559cee68208c8e87a5ee5a223f9ad69fa96034053444dfc09280a0068995659007b0ffe0428c833a69c089d1299608575b6c5dc1a0b10c422b6b39574dfa7206f6222d99d822785efa2b6f597377b96107ac59c6722dfdb6f208610440cd09aaf139460ef72317848478c1bee19464b149f3145ecf67a07a6f8829443c3a13d1c5ea4e45cfba291fd7a8d1c8fdc088d709b87882947a3b6dee5738409d";
            var tlv = TlvParser.Parse(Automatica.Core.Driver.Utility.Utils.StringToByteArray(inputData));

            var session = new ConnectionSession
            {
                Verifier        = FixedSaltGenerator.ExpectedVerifier,
                ServerEphemeral = fixedSrpGenerator.GenerateServerEphemeral(FixedSaltGenerator.ExpectedVerifier)
            };

            var setupController = new PairSetupController(NullLogger.Instance, "031-45-154")
            {
                SrpGenerator = fixedSrpGenerator
            };

            var ret = setupController.Post(tlv, session);

            var expectedTlvResponse =
                TlvParser.Parse(Automatica.Core.Driver.Utility.Utils.StringToByteArray(expectedTlvHexReponse));


            Assert.Equal(expectedTlvResponse.GetType(Constants.State), ret.TlvData.GetType(Constants.State));
            Assert.Equal(expectedTlvResponse.GetType(Constants.Proof), ret.TlvData.GetType(Constants.Proof));
        }
示例#2
0
        public void M5SetupTest()
        {
            var clientPubKey = FixedSaltGenerator.ExpectedClientPubKey;
            var clientProof  = FixedSaltGenerator.ExpectedClientProof;
            var inputData    =
                "059ac2e1aa3fef6c4bc067cd9d26a05b53fa6ad29f953af80c90968757a18fcb270118987a5c26e50f2f8e274750584929d5d5a176a62af5ef0d4002ed6333ee75b0f75d0ee4dbef345f6ae15345cfdcb97e3300d18bf8f827701f6dfcc6cc213dff5ae1cffa03235853df30d8eb6ceec068dc64e9ef8049ce3d9396bbd32c7b2e329005023cf06ed8a60e3e51491b7f7193a807f1f244369a5ee9fd060105";
            var expectedTlvHexReponse =
                "0601060587b0e4a7aa382866e824db4159cc0ecd24900136be360fd6ae64481bf799b1ecc918ecb887285a8dcd5b6f90aa410253451fd1bc638cae716cbab166f763108633555a6bfa311662986ea2d1eb83b76d195724b9bbddf7902dfd3a16e1bbd5bb8e5a5a6e3a56e8eec21c3f06ed2cce21ea17426407d0a1b35c9d692f5a5ee15ecb7ac662ade25ab7";

            var tlv = TlvParser.Parse(Automatica.Core.Driver.Utility.Utils.StringToByteArray(inputData));

            var fixedSrpGenerator = new FixedSaltGenerator();

            var session = new ConnectionSession
            {
                Salt            = fixedSrpGenerator.GenerateSalt(16),
                Verifier        = FixedSaltGenerator.ExpectedVerifier,
                ServerEphemeral = fixedSrpGenerator.GenerateServerEphemeral(FixedSaltGenerator.ExpectedVerifier)
            };

            session.ServerSession = fixedSrpGenerator.DeriveServerSession(session.ServerEphemeral.Secret, clientPubKey, SrpInteger.FromByteArray(session.Salt).ToHex(), "Pair-Setup", session.Verifier, clientProof);

            var setupController = new PairSetupController(NullLogger.Instance, "031-45-154")
            {
                SrpGenerator = fixedSrpGenerator, KeyGenerator = new FixedEd25519KeyGenerator()
            };

            var ret = setupController.Post(tlv, session);

            var expectedTlvResponse =
                TlvParser.Parse(Automatica.Core.Driver.Utility.Utils.StringToByteArray(expectedTlvHexReponse));

            var decryptedPayload = TlvParser.Parse(Automatica.Core.Driver.Utility.Utils.StringToByteArray(
                                                       "011146433a32323a33443a45333a43453a4632032083e6d70e7064effd0c6df6d19451b1ded53f7e2d0dd86e33d4aa1993f5e9cded0a402ac3063b1d193c4d365c546019c51cac8299a23a99c9f8eb2348c46af24b185a53f1f75a92d57193bdeb4dfbc47ccadccc4f9f4e3dc8191eef364d15cd921207"));
            var raw = setupController.HandlePairSetupM5Raw(session, out _);

            Assert.Equal(decryptedPayload.GetType(Constants.Identifier), raw.GetType(Constants.Identifier));
            Assert.Equal(decryptedPayload.GetType(Constants.PublicKey), raw.GetType(Constants.PublicKey));
            Assert.Equal(decryptedPayload.GetType(Constants.Signature), raw.GetType(Constants.Signature));

            var expectedEncryptedData =
                Automatica.Core.Driver.Utility.Utils.ByteArrayToString(expectedTlvResponse.GetType(Constants.EncryptedData).AsSpan());
            var retEncryptedData =
                Automatica.Core.Driver.Utility.Utils.ByteArrayToString(ret.TlvData.GetType(Constants.EncryptedData).AsSpan());

            Assert.Equal(expectedEncryptedData, retEncryptedData);
            Assert.Equal(expectedTlvResponse.GetType(Constants.State), ret.TlvData.GetType(Constants.State));
            Assert.Equal(expectedTlvResponse.GetType(Constants.EncryptedData), ret.TlvData.GetType(Constants.EncryptedData));

            var expectedHttpResponse =
                "485454502F312E3120323030204F4B0D0A436F6E74656E742D4C656E6774683A203134300D0A436F6E74656E742D547970653A206170706C69636174696F6E2F70616972696E672B746C76380D0A446174653A2053756E2C203139204A616E20323032302031353A33313A313320474D540D0A436F6E6E656374696F6E3A206B6565702D616C6976650D0A0D0A0601060587B0E4A7AA382866E824DB4159CC0ECD24900136BE360FD6AE64481BF799B1ECC918ECB887285A8DCD5B6F90AA410253451FD1BC638CAE716CBAB166F763108633555A6BFA311662986EA2D1EB83B76D195724B9BBDDF7902DFD3A16E1BBD5BB8E5A5A6E3A56E8EEC21C3F06ED2CCE21EA17426407D0A1B35C9D692F5A5EE15ECB7AC662ADE25AB7";
            var expectedHttpResponseArray =
                Automatica.Core.Driver.Utility.Utils.StringToByteArray(expectedHttpResponse);

            var requestTime  = new DateTime(2020, 01, 19, 15, 31, 13, DateTimeKind.Utc);
            var httpResponse =
                HttpServerConnection.GetHttpResponse("HTTP/1.1", PairSetupReturn.ContentType, TlvParser.Serialize(ret.TlvData), requestTime);

            Assert.Equal(expectedHttpResponseArray, httpResponse);
        }
示例#3
0
        public void M1SetupTest()
        {
            var          fixedSrpGenerator    = new FixedSaltGenerator();
            const string expectedTlvHexString =
                "0601020210deff10eeac3d2c5cf370a2dae3310a4f03ff18ed6bbc1b4338031679acbcd7f6aa4622266e2c1c92432f8c446e0197333a08f0fd0acbd77cee8aeccbf0fe5ad9f526476acb0a26e928620451152f1f5e0c19bf788c9bded644868354256d0ae5a0736b8b5c3a8e8ac7fad4b74b56732af5098254e9acba634a29a0f4d65d75bf9993f5590fa61cd336299703d121632032b1f95fb83cc1d6fa9c6b994dbff8ef68bf269aa62ded2efa1556988a52992ccbfd41dfbfe234490d7b5d310816bd046280e51740c8132d71677a73297080639bf4f39430b166539a07e045048a2a5d8c4f285deee8ea5fd1aa58432b681e519522d3491e528bb15b4f1ea39fb2c08cfa4bfdc11095e7fb1585018e75bb2a7e39038165287d49a816d51852432fc093d884aabec2126bb6febd08fa18857e16bff8b05bf6c03b7b212e5917ea196444cc0bd2cd54fc2bbd25562b89e0f4c90aab68fa7ba999f2082683430d9bdbd01876b72dc3851d74ec973c710d19fc694100342c8139cdc1aad1155be550432d3abf3944643a6bdaa8b20615f7cbe1bc00bb8334b9";

            var tlv = TlvParser.Parse(Automatica.Core.Driver.Utility.Utils.StringToByteArray("000100060101"));

            var setupController = new PairSetupController(NullLogger.Instance, "031-45-154")
            {
                SrpGenerator = fixedSrpGenerator
            };

            fixedSrpGenerator.DeriveVerifier(fixedSrpGenerator.DerivePrivateKey("", "", ""));

            var session = new ConnectionSession();
            var ret     = setupController.Post(tlv, session);

            var expectedTlvResponse =
                TlvParser.Parse(Automatica.Core.Driver.Utility.Utils.StringToByteArray(expectedTlvHexString));

            Assert.Equal(expectedTlvResponse.GetType(Constants.State), ret.TlvData.GetType(Constants.State));
            Assert.Equal(expectedTlvResponse.GetType(Constants.Salt), ret.TlvData.GetType(Constants.Salt));
            Assert.Equal(expectedTlvResponse.GetType(Constants.PublicKey), ret.TlvData.GetType(Constants.PublicKey));
        }
示例#4
0
文件: SINetwork.cs 项目: zjbsean/TM
            private void onOpenNewServerConnection(ConnectionSession connSession)
            {
                SIConnectionSession SIConnSession = new SIConnectionSession(connSession, 0);

                SIConnSessionsManager.Instance.AddConnSession(SIConnSession);

                connSession.Send(com.tieao.mmo.interval.client.InternalProtocolClientHelper.ConnectSvrSucc(SvrCommCfg.Instance.ServerInfo));
            }
示例#5
0
        private void CreatePackage()
        {
            try
            {
                if (currentConnectionInfo != null)
                {
                    SessionCache      sessionCache      = new SessionCache();
                    ConnectionSession connectionSession = sessionCache[currentConnectionInfo];
                    DataBus           dataBus           = connectionSession.GetDataBus();
                    if (needCreateAuditlog)
                    {
                        //Generate audit log file.
                        AuditLogInfo auditInfo = GetAuditInfo(dataBus, releaseManagerName);
                        auditInfo.Author = currentConnectionInfo.UserName;
                        auditInfo.Title  = auditFileTitle;
                        GenerateAuditLog(auditInfo, auditFileName);
                    }

                    //Create unload record
                    if (needCreateUnloadRecord)
                    {
                        CreateUnloadFile(dataBus, releaseManagerName, unloadName);
                    }
                    //Generate move instruction doc.
                    if (needCreateMoveInstruction)
                    {
                        dataBus = connectionSession.GetDataBus();
                        //Generate unload script file
                        UnloadScriptFile unloadScriptFile = new UnloadScriptFile();
                        unloadScriptFile.FileLocation     = fileDir;
                        unloadScriptFile.UnloadScriptName = unloadName;
                        unloadScriptFile.GenerateUnloadScript(dataBus);

                        //Create move instruction.
                        MoveInstructionInfo moveInstructionInfo = new MoveInstructionInfo();
                        moveInstructionInfo.UnloadFileLocation = unloadScriptFile.FileLocation;
                        moveInstructionInfo.Title  = textBoxMoveInstructionLocation.Text.Trim();
                        moveInstructionInfo.Author = currentConnectionInfo.UserName;
                        moveInstructionInfo.Entity = GetUnloadEntity(connectionSession.GetDataBus(), unloadScriptFile.UnloadScriptName);
                        GenerateMoveInstructions(moveInstructionInfo, moveInstructionFileLocation);
                    }
                }

                Invoke(new UpdateUI(delegate()
                {
                    MessageBox.Show("Package Created");
                    EnableControls();
                }));
            }
            catch
            {
                Invoke(new UpdateUI(delegate()
                {
                    MessageBox.Show("Create Package Failed, please try again");
                    EnableControls();
                }));
            }
        }
示例#6
0
        /// <summary>
        /// Handle client connections.
        /// </summary>
        /// <param name="ctx">the channel context</param>
        public override void ChannelActive(IChannelHandlerContext ctx)
        {
            base.ChannelActive(ctx);

            var connection = new ConnectionSession(ctx.Channel);

            if (connection != null)
            {
                log.Debug($"Client connected to server: {connection.IpAddress}");
                ctx.Channel.GetAttribute(CONNECTION_KEY).SetIfAbsent(connection);
            }
        }
示例#7
0
        protected override void Encode(IChannelHandlerContext ctx, IMessageComposer composer, List <object> output)
        {
            ConnectionSession connection = ctx.Channel.GetAttribute(GameNetworkHandler.CONNECTION_KEY).Get();

            try
            {
                short?header = MessageHandler.Instance.GetComposerId(composer);

                if (header == null)
                {
                    throw new NullReferenceException($"No header found for composer class {composer.GetType().Name}");
                }

                var buffer   = Unpooled.Buffer();
                var response = new Response(header.Value, buffer);

                foreach (var objectData in composer.Data)
                {
                    if (objectData is string)
                    {
                        response.writeString((string)objectData);
                    }

                    if (objectData is int || objectData is uint)
                    {
                        response.writeInt((int)objectData);
                    }

                    if (objectData is bool)
                    {
                        response.writeBool((bool)objectData);
                    }

                    if (objectData is short)
                    {
                        response.writeShort((short)objectData);
                    }
                }

                buffer.SetInt(0, buffer.WriterIndex - 4);

                if (connection != null)
                {
                    connection.Player.Log.Debug($"SENT {composer.GetType().Name}: " + response.Header + " / " + response.MessageBody);
                }

                output.Add(buffer);
            }
            catch (Exception ex)
            {
                connection.Player.Log.Error("Error occurred: ", ex);
            }
        }
示例#8
0
        private static void ExpireSession(UserCredential currentCred)
        {
            ConnectionSession currentSession =
                currentCred.Sessions.Find(sess =>
                                          sess.DisconnectedTime == 0);

            if (currentSession != null &&
                currentSession.DisconnectedTime == 0)
            {
                currentSession.DisconnectedTime = DateTime.Now.Ticks;
            }
        }
        private void buttonGetFieldValues_Click(object sender, EventArgs e)
        {
            string fileName     = textBoxFileName.Text.Trim();
            string queryString  = textBoxQueryString.Text.Trim().Replace("\"", "\\\"");
            string eventMapName = textBoxEventMapName.Text.Trim();

            SessionCache      sessionCache          = new SessionCache();
            ConnectionInfo    currentConnectionInfo = comboBoxServer.SelectedItem as ConnectionInfo;
            ConnectionSession connectionSession     = sessionCache[currentConnectionInfo];

            fieldValues = GetEventValues(connectionSession.GetDataBus(), fileName, queryString, eventMapName);

            BindDataToGridView(fieldValues);
        }
示例#10
0
        /// <summary>
        /// Handle client disconnects.
        /// </summary>
        /// <param name="ctx">the channel context</param>
        public override void ChannelInactive(IChannelHandlerContext ctx)
        {
            base.ChannelInactive(ctx);
            ConnectionSession connection = ctx.Channel.GetAttribute(CONNECTION_KEY).Get();

            if (connection == null)
            {
                return;
            }

            connection.Disconnect();

            log.Debug($"Client disconnected from server: {connection.IpAddress}");
        }
示例#11
0
        private void PingClients()
        {
            var hubContext =
                GlobalHost
                .ConnectionManager
                .GetHubContext <ServerSideTimerHub>();

            foreach (var item in _connections.Values)
            {
                TimeSpan span =
                    new TimeSpan(item.GetSessionLengthInTicks());
                ConnectionSession session =
                    item.Sessions[item.Sessions.Count - 1];
                hubContext.Clients[session.ConnectionId]
                .tick(session.ConnectionId, item.UserId, span.ToString());
            }
        }
示例#12
0
        /// <summary>
        /// Handle incoming channel messages from the decoder
        /// </summary>
        /// <param name="ctx">the channel context</param>
        /// <param name="msg">the incoming message</param>
        public override void ChannelRead(IChannelHandlerContext ctx, object msg)
        {
            ConnectionSession connectionSession = ctx.Channel.GetAttribute(CONNECTION_KEY).Get();

            if (connectionSession == null)
            {
                return;
            }

            if (msg is Request)
            {
                Request request = (Request)msg;
                MessageHandler.Instance.HandleMesage(connectionSession.Player, request);
            }

            base.ChannelRead(ctx, msg);
        }
示例#13
0
文件: SINetwork.cs 项目: zjbsean/TM
                /// <summary>
                /// 当服务组连接断开
                /// </summary>
                /// <param name="sessionID">服务组连接sessionID</param>
                private void OnServerConnectionClose(ConnectionSession connSesion)
                {
                    PtServerInfo svrInfo = null;

                    if (m_connService.GetConnectServerInfo(ref svrInfo))
                    {
                        ReconnectServerInfo reconnSvrInfo = new ReconnectServerInfo(svrInfo);
                        SIReconnectManager.Instance.AddReconnectInfo(reconnSvrInfo);
                    }
                    else
                    {
                        ConnectIPPort ipPort = new ConnectIPPort(m_ip, m_port);
                        SIReconnectManager.Instance.AddReconnectInfo(ipPort);
                    }

                    SIConnServiceManager.Instance.RemoveConnService(m_id);
                }
示例#14
0
        internal void Disconnect(string connectionId)
        {
            ConnectionSession session = null;

            if (_connections.Values.Count > 0)
            {
                foreach (var currentCredi in _connections.Values)
                {
                    session = currentCredi.Sessions.Find(ss =>
                                                         ss.ConnectionId == connectionId);
                    if (session != null)
                    {
                        session.DisconnectedTime = DateTime.Now.Ticks;
                        break;
                    }
                }
            }
        }
        /// <summary>
        /// Get Data bus by session id and authorization string.
        /// </summary>
        /// <returns></returns>
        private DataBus GetDataBus()
        {
            //Reset the data from shared memory firstly
            ResetConnectionInfo();
            string sessionId           = textBoxCookieId.Text.Trim();
            string authorizationString = textBoxAuthorization.Text.Trim();

            ConnectionInfo currentConnectionInfo = new ConnectionInfo();

            currentConnectionInfo.Domain = textBoxIP.Text.Trim();
            currentConnectionInfo.Port   = Convert.ToInt32(textBoxPort.Text.Trim());
            currentConnectionInfo.Name   = Guid.NewGuid().ToString();
            SessionCache      sessionCache      = new SessionCache();
            ConnectionSession connectionSession = sessionCache[currentConnectionInfo];
            DataBus           dataBus           = connectionSession.GetDataBus(sessionId, authorizationString);

            return(dataBus);
        }
        private RADPanel GetRADPanel(string radName, string panel)
        {
            string sessionId           = textBoxCookieId.Text.Trim();
            string authorizationString = textBoxAuthorization.Text.Trim();

            ConnectionInfo    currentConnectionInfo = comboBoxServer.SelectedItem as ConnectionInfo;
            SessionCache      sessionCache          = new SessionCache();
            ConnectionSession connectionSession     = sessionCache[currentConnectionInfo];
            DataBus           dataBus = connectionSession.GetDataBus(sessionId, authorizationString);

            JSCodeRunner codeRunner = new JSCodeRunner();

            codeRunner.Include("JSCode\\JsonEncode.js");
            codeRunner.Include("JSCode\\GetRADInfo.js");
            string   codeToRun = " return GetRADInfo(\"" + radName + "\",\"" + panel + "\");";
            RADPanel radPanel  = codeRunner.Run <RADPanel>(dataBus, codeToRun);

            return(radPanel);
        }
        private Format GetFormatInfo(string formatName, string language)
        {
            string sessionId           = textBoxCookieId.Text.Trim();
            string authorizationString = textBoxAuthorization.Text.Trim();

            ConnectionInfo    currentConnectionInfo = comboBoxServer.SelectedItem as ConnectionInfo;
            SessionCache      sessionCache          = new SessionCache();
            ConnectionSession connectionSession     = sessionCache[currentConnectionInfo];
            DataBus           dataBus = connectionSession.GetDataBus(sessionId, authorizationString);

            JSCodeRunner codeRunner = new JSCodeRunner();

            codeRunner.Include("JSCode\\JsonEncode.js");
            codeRunner.Include("JSCode\\GetFormatInfo.js");
            string codeToRun = " return GetFormatInfo(\"" + formatName + "\",\"" + language + "\");";
            Format format    = codeRunner.Run <Format>(dataBus, codeToRun);

            return(format);
        }
示例#18
0
        private void PingClients()
        {
            var hubContext =
                GlobalHost
                .ConnectionManager
                .GetHubContext <ServerSideTimerHub>();


            foreach (var item in _connections.Values)
            {
                if (item == null)
                {
                    continue;
                }
                TimeSpan span =
                    new TimeSpan(item.GetSessionLengthInTicks());
                ConnectionSession session =
                    item.Sessions[item.Sessions.Count - 1];
                var tasks = GetTask(item.UserId);
                hubContext.Clients[session.ConnectionId]
                .tick(session.ConnectionId, item.UserId, tasks);
            }
        }
        private void buttonStartTrace_Click(object sender, EventArgs e)
        {
            string sessionId           = textBoxCookieId.Text.Trim();
            string authorizationString = textBoxAuthorization.Text.Trim();

            ConnectionInfo    currentConnectionInfo = comboBoxServer.SelectedItem as ConnectionInfo;
            SessionCache      sessionCache          = new SessionCache();
            ConnectionSession connectionSession     = sessionCache[currentConnectionInfo];
            DataBus           dataBus = connectionSession.GetDataBus(sessionId, authorizationString);

            debugEntity = new DebugEntity();
            debugEntity.OnTraceChanged += new TraceChangedHandler(DoTraceChanged);
            debugEntity.InitStack(dataBus);

            treeViewTraces.Nodes.Clear();
            treeViewTraces.Nodes.Add(new TreeNode());
            ShowTrace(debugEntity.TopRAD, treeViewTraces.Nodes[0]);
            currentRADNode = treeViewTraces.Nodes[0];
            while (currentRADNode.Nodes.Count > 0)
            {
                currentRADNode = currentRADNode.Nodes[0];
            }
            treeViewTraces.SelectedNode = currentRADNode;
        }
示例#20
0
        internal Tlv HandlePairSetupM5Raw(ConnectionSession session, out KeyPair keyPair)
        {
            var hdkf      = new HkdfSha512();
            var accessory = hdkf.DeriveBytes(
                SharedSecret.Import(SrpInteger.FromHex(session.ServerSession.Key).ToByteArray()),
                Encoding.UTF8.GetBytes("Pair-Setup-Accessory-Sign-Salt"),
                Encoding.UTF8.GetBytes("Pair-Setup-Accessory-Sign-Info"), 32);

            keyPair = KeyGenerator.GenerateNewPair();

            var serverUsername = Encoding.UTF8.GetBytes(HapControllerServer.HapControllerId);
            var material       = accessory.Concat(serverUsername).Concat(keyPair.PublicKey).ToArray();

            var signature = Chaos.NaCl.Ed25519.Sign(material, keyPair.PrivateKey);


            var encoder = new Tlv();

            encoder.AddType(Constants.Identifier, serverUsername);
            encoder.AddType(Constants.PublicKey, keyPair.PublicKey);
            encoder.AddType(Constants.Signature, signature);

            return(encoder);
        }
示例#21
0
        internal ValueTask <ClickHouseTcpClient.Session> OpenSession(bool async, IClickHouseSessionExternalResources?externalResources, CancellationToken sessionCancellationToken, CancellationToken cancellationToken)
        {
            var connectionSession = new ConnectionSession(this, externalResources);

            return(connectionSession.OpenSession(async, sessionCancellationToken, cancellationToken));
        }
示例#22
0
        private void OnSessionConnected(ISession session)
        {
            var wrapper = new ConnectionSession(session);

            onSessionConnected.Call(wrapper);
        }
示例#23
0
        private void OnSessionConnected(ISession session, ConnectionChannel channel)
        {
            var wrapper = new ConnectionSession(session);

            channel.ShouldOpen(wrapper);
        }
示例#24
0
        internal PairSetupReturn HandlePairSetupM5(Tlv parts, ConnectionSession session)
        {
            _logger.LogDebug("Pair Setup Step 5/5");
            _logger.LogDebug("Exchange Response");

            try
            {
                var iOsEncryptedData = parts.GetType(Constants.EncryptedData).AsSpan(); // A
                var zeros            = new byte[] { 0, 0, 0, 0 };
                var nonce            = new Nonce(zeros, Encoding.UTF8.GetBytes("PS-Msg05"));
                var hdkf             = new HkdfSha512();
                var hkdfEncKey       = hdkf.DeriveBytes(
                    SharedSecret.Import(SrpInteger.FromHex(session.ServerSession.Key).ToByteArray()),
                    Encoding.UTF8.GetBytes("Pair-Setup-Encrypt-Salt"),
                    Encoding.UTF8.GetBytes("Pair-Setup-Encrypt-Info"), 32);


                var decrypt = AeadAlgorithm.ChaCha20Poly1305.Decrypt(
                    Key.Import(AeadAlgorithm.ChaCha20Poly1305, hkdfEncKey, KeyBlobFormat.RawSymmetricKey), nonce,
                    new byte[0], iOsEncryptedData, out var output);
                var responseTlv = new Tlv();
                responseTlv.AddType(Constants.State, 6);
                if (!decrypt)
                {
                    responseTlv.AddType(Constants.Error, ErrorCodes.Authentication);
                    return(new PairSetupReturn
                    {
                        State = 5,
                        TlvData = responseTlv,
                        Ok = false
                    });
                }

                var subData = TlvParser.Parse(output);

                byte[] username = subData.GetType(Constants.Identifier);
                byte[] ltpk     = subData.GetType(Constants.PublicKey);
                byte[] proof    = subData.GetType(Constants.Signature);


                var okm = hdkf.DeriveBytes(
                    SharedSecret.Import(SrpInteger.FromHex(session.ServerSession.Key).ToByteArray()),
                    Encoding.UTF8.GetBytes("Pair-Setup-Controller-Sign-Salt"),
                    Encoding.UTF8.GetBytes("Pair-Setup-Controller-Sign-Info"), 32);

                var completeData = okm.Concat(username).Concat(ltpk).ToArray();


                if (!SignatureAlgorithm.Ed25519.Verify(
                        PublicKey.Import(SignatureAlgorithm.Ed25519, ltpk, KeyBlobFormat.RawPublicKey), completeData,
                        proof))
                {
                    var errorTlv = new Tlv();
                    errorTlv.AddType(Constants.Error, ErrorCodes.Authentication);
                    return(new PairSetupReturn
                    {
                        State = 5,
                        TlvData = errorTlv,
                        Ok = false
                    });
                }

                var m5Response = HandlePairSetupM5Raw(session, out var keyPair);
                var plaintext  = TlvParser.Serialize(m5Response);

                _logger.LogDebug($"Decrypted payload {Automatica.Core.Driver.Utility.Utils.ByteArrayToString(plaintext.AsSpan())}");


                var nonce6 = new Nonce(zeros, Encoding.UTF8.GetBytes("PS-Msg06"));

                var encryptedOutput = AeadAlgorithm.ChaCha20Poly1305.Encrypt(
                    Key.Import(AeadAlgorithm.ChaCha20Poly1305, hkdfEncKey, KeyBlobFormat.RawSymmetricKey), nonce6,
                    new byte[0], plaintext);

                responseTlv.AddType(Constants.EncryptedData, encryptedOutput);

                return(new PairSetupReturn
                {
                    State = 5,
                    TlvData = responseTlv,
                    Ok = true,
                    Ltsk = ByteArrayToString(keyPair.PrivateKey),
                    Ltpk = ByteArrayToString(ltpk)
                });
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"{e}, Could not exchange request");
                throw;
            }
        }
示例#25
0
 public async System.Threading.Tasks.Task GetFirstTest()
 {
     var session = new ConnectionSession("Data Source=localhost;Initial Catalog=TestDatabase;Persist Security Info=True;User ID=sa;Password=!1IA24#");
     await session.QueryFirstAsync <Models.TestTable>("select * from TESTTABLE");
 }
示例#26
0
        public PairSetupReturn Post(Tlv parts, ConnectionSession session)
        {
            var state = parts.GetTypeAsInt(Constants.State);

            if (session.Salt == null)
            {
                session.Salt = SrpGenerator.GenerateSalt(16);
            }

            _logger.LogDebug($"State is {state}");

            if (state == 1) //srp sign up
            {
                var saltInt = SrpInteger.FromByteArray(session.Salt);

                var privateKey = SrpGenerator.DerivePrivateKey(saltInt.ToHex(), Username, _code);
                session.Verifier = SrpGenerator.DeriveVerifier(privateKey);

                session.ServerEphemeral = SrpGenerator.GenerateServerEphemeral(session.Verifier);

                var responseTlv = new Tlv();
                responseTlv.AddType(Constants.State, 2);
                responseTlv.AddType(Constants.PublicKey, StringToByteArray(session.ServerEphemeral.Public));
                responseTlv.AddType(Constants.Salt, session.Salt);

                _logger.LogDebug($"return salt {saltInt.ToHex()}, pub {session.ServerEphemeral.Public} and state 2");

                return(new PairSetupReturn
                {
                    State = 1,
                    TlvData = responseTlv,
                    Ok = true
                });
            }

            if (state == 3) //srp authenticate
            {
                _logger.LogDebug("Pair Setup Step 3/5");
                _logger.LogDebug("SRP Verify Request");

                var pubKey = parts.GetType(Constants.PublicKey);
                var proof  = parts.GetType(Constants.Proof);

                var iOsPublicKey = SrpInteger.FromByteArray(pubKey);
                var iOsProof     = SrpInteger.FromByteArray(proof);


                var responseTlv = new Tlv();
                responseTlv.AddType(Constants.State, 4);
                var ok = true;
                try
                {
                    session.ServerSession = SrpGenerator.DeriveServerSession(session.ServerEphemeral.Secret, iOsPublicKey.ToHex(), SrpInteger.FromByteArray(session.Salt).ToHex(), Username, session.Verifier,
                                                                             iOsProof.ToHex());
                    _logger.LogInformation("Verification was successful. Generating Server Proof (M2)");

                    responseTlv.AddType(Constants.Proof, StringToByteArray(session.ServerSession.Proof));


                    _logger.LogDebug($"return proof {session.ServerSession.Proof}, secret {session.ServerEphemeral.Secret} and state 4");
                }
                catch (Exception e)
                {
                    ok = false;
                    _logger.LogError(e, "Verification failed as iOS provided code was incorrect");
                    responseTlv.AddType(Constants.Error, ErrorCodes.Authentication);
                }
                return(new PairSetupReturn
                {
                    State = 3,
                    Ok = ok,
                    TlvData = responseTlv
                });
            }

            if (state == 5)
            {
                return(HandlePairSetupM5(parts, session));
            }

            return(null);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string sessionId           = textBoxCookieId.Text.Trim();
            string authorizationString = textBoxAuthorization.Text.Trim();

            ConnectionInfo    currentConnectionInfo = comboBoxServer.SelectedItem as ConnectionInfo;
            SessionCache      sessionCache          = new SessionCache();
            ConnectionSession connectionSession     = sessionCache[currentConnectionInfo];
            DataBus           dataBus = connectionSession.GetDataBus(sessionId, authorizationString);

            DebugAction debugAction = new DebugAction(dataBus);

            debugAction.CommandLine = textBoxDebug.Text.Trim();
            HttpResponseMessage response = debugAction.DoAction();

            Execute excuteObject = debugAction.ResponseData as Execute;

            ActionUtil.StoreMessages(excuteObject.ClientRequestEntity);

            debugEntity.AddTrace(excuteObject);
            if (excuteObject.ClientRequestEntity == null)
            {
                try
                {
                    SyncBackData(response.CopiedStream, response.ChunkIndexes[1]);
                    //semaphoreEmpty.Release();
                    if (dataSyncThread.ThreadState == ThreadState.Suspended)
                    {
                        dataSyncThread.Resume();
                    }
                }
                catch
                {
                }
                return;
            }
            else if (!excuteObject.ClientRequestEntity.Messages.Rearm)
            {
                return;
            }
            else
            {
                //return;
            }

            while (true)
            {
                DebugResponseAction debugResponse = new DebugResponseAction(dataBus);
                response = debugResponse.DoAction();

                excuteObject = debugResponse.ResponseData as Execute;
                ActionUtil.StoreMessages(excuteObject.ClientRequestEntity);

                debugEntity.AddTrace(excuteObject);
                if (excuteObject.ClientRequestEntity == null)
                {
                    SyncBackData(response.CopiedStream, response.ChunkIndexes[1]);
                    //semaphoreEmpty.Release();
                    if (dataSyncThread.ThreadState == ThreadState.Suspended)
                    {
                        dataSyncThread.Resume();
                    }
                    break;
                }
                else if (excuteObject.ClientRequestEntity.Messages.Rearm == false)
                {
                    //semaphoreEmpty.Release();
                    //if (dataSyncThread.ThreadState == ThreadState.Suspended)
                    //{
                    //    dataSyncThread.Resume();
                    //}
                    //break;
                }
                else
                {
                    //Nothing to do.
                }
            }
        }
示例#28
0
        public Tuple <string, byte[]> Invoke(string connectionId, string url, string method, byte[] inputData,
                                             ConnectionSession session)
        {
            if (!_sessions.ContainsKey(connectionId))
            {
                _sessions.TryAdd(connectionId, new HapSession());
            }


            _logger.LogDebug($"Working on request {url}");
            var queryString = new NameValueCollection();

            if (url.Contains("?"))
            {
                var parts = url.Split('?');

                queryString = HttpUtility.ParseQueryString(parts[1]);
                url         = parts[0];
            }

            try
            {
                if (inputData.Length > 0)
                {
                    var parts = TlvParser.Parse(inputData);

                    if (method == "POST")
                    {
                        var state = parts.GetTypeAsInt(Constants.State);

                        if (url.EndsWith("pair-setup"))
                        {
                            _logger.LogDebug($"Working on pair-setup request");
                            if (_pairController != null && state == 1)
                            {
                                return(ReturnError(state, ErrorCodes.Busy));
                            }

                            if (state == 1 && _pairController == null)
                            {
                                _pairController =
                                    new PairSetupController(_logger, _pairCode);
                            }

                            if (_pairController == null)
                            {
                                _logger.LogError($"Something is wrong here, closing tcp connection");
                                throw new ArgumentException($"Something is wrong here, closing tcp connection");
                            }

                            var data = _pairController.Post(parts, session);

                            var raw = TlvParser.Serialize(data.TlvData);

                            if (!data.Ok)
                            {
                                _pairController = null;
                                _sessions.TryRemove(connectionId, out var _);
                            }
                            else if (data.State == 5)
                            {
                                PairingCompleted?.Invoke(this, new PairSetupCompleteEventArgs(data.Ltsk, data.Ltpk));
                                _pairController = null;
                            }

                            return(new Tuple <string, byte[]>(PairSetupReturn.ContentType, raw));
                        }

                        if (url.EndsWith("pair-verify"))
                        {
                            _logger.LogDebug($"Working on pair-verify request");
                            if (string.IsNullOrEmpty(HapControllerServer.HapControllerLtsk))
                            {
                                return(ReturnError(state, ErrorCodes.Busy));
                            }

                            var verify = new PairVerifyController(_logger);
                            var data   = verify.Post(parts, _sessions[connectionId]);

                            if (data.HapSession != null)
                            {
                                _sessions[connectionId] = data.HapSession;
                            }

                            var raw = TlvParser.Serialize(data.TlvData);
                            return(new Tuple <string, byte[]>(data.ContentType, raw));
                        }

                        if (url.EndsWith("pairings"))
                        {
                            _logger.LogDebug($"Working on pairings");
                            var pair = new PairingController(_logger);
                            var data = pair.Post(parts);

                            var raw = TlvParser.Serialize(data.TlvData);
                            return(new Tuple <string, byte[]>(data.ContentType, raw));
                        }

                        if (url.EndsWith("identify"))
                        {
                            var identify = new IdentifyController();
                            var data     = identify.Post(inputData);

                            return(new Tuple <string, byte[]>(data.ContentType, new byte[0]));
                        }
                    }
                    else if (method == "PUT")
                    {
                        if (url.EndsWith("characteristics"))
                        {
                            _logger.LogDebug($"Working on characteristics");
                            var c    = new CharacteristicsController(_logger);
                            var data = c.Put(inputData, _sessions[connectionId], _homeKitServer);

                            // response with no data if the call was successful - errors need to be implemented
                            return(new Tuple <string, byte[]>(data.ContentType, new byte[0]));
                        }
                    }
                }
                else
                {
                    if (method == "GET")
                    {
                        if (url.EndsWith("accessories"))
                        {
                            _logger.LogDebug($"Working on accessories");

                            var accessoryController = new AccesoriesController(_logger);
                            var accessories         = accessoryController.Get(_homeKitServer, queryString);
                            var strValue            = JsonConvert.SerializeObject(accessories, JsonSettings);

                            _logger.LogDebug($"Sending {strValue}");

                            return(new Tuple <string, byte[]>("application/hap+json", Encoding.UTF8.GetBytes(strValue)));
                        }

                        if (url.EndsWith("characteristics"))
                        {
                            _logger.LogDebug($"Working on characteristics");

                            var ids      = queryString["id"].Split(",");
                            var c        = new CharacteristicsController(_logger);
                            var data     = c.Get(ids, _homeKitServer);
                            var strValue = JsonConvert.SerializeObject(data, JsonSettings);

                            _logger.LogDebug($"Sending {strValue}");

                            return(new Tuple <string, byte[]>(data.ContentType, Encoding.UTF8.GetBytes(strValue)));
                        }
                    }
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"{e}: Error occured while processing request");
                _pairController = null;
            }

            throw new InvalidOperationException();
        }
示例#29
0
 /// <summary>
 /// Constructor for player.
 /// </summary>
 /// <param name="channel">the channel</param>
 public Player(ConnectionSession connectionSession)
 {
     Connection = connectionSession;
     RoomEntity = new RoomPlayer(this);
     log        = LogManager.GetLogger(Assembly.GetExecutingAssembly(), $"Connection {connectionSession.Channel.Id}");
 }
示例#30
0
 public void Setup()
 {
     oneSession   = new ConnectionSession("Data Source=localhost;Initial Catalog=TestDatabase;Persist Security Info=True;User ID=sa;Password=!1IA24#");
     twoSession   = new ConnectionSession("Data Source=localhost;Initial Catalog=TestDatabase;Persist Security Info=True;User ID=sa;Password=!1IA24#", "Data Source=localhost;Initial Catalog=TestDatabase;Persist Security Info=True;User ID=sa;Password=!1IA24#");
     threeSession = new ConnectionSession("Data Source=localhost;Initial Catalog=TestDatabase;Persist Security Info=True;User ID=sa;Password=!1IA24#", "Data Source=localhost;Initial Catalog=TestDatabase;Persist Security Info=True;User ID=sa;Password=!1IA24#", "Data Source=localhost;Initial Catalog=TestDatabase;Persist Security Info=True;User ID=sa;Password=!1IA24#");
 }