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)); }
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); }
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)); }
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)); }
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(); })); } }
/// <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); } }
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); } }
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); }
/// <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}"); }
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()); } }
/// <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); }
/// <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); }
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); }
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; }
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); }
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)); }
private void OnSessionConnected(ISession session) { var wrapper = new ConnectionSession(session); onSessionConnected.Call(wrapper); }
private void OnSessionConnected(ISession session, ConnectionChannel channel) { var wrapper = new ConnectionSession(session); channel.ShouldOpen(wrapper); }
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; } }
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"); }
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. } } }
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(); }
/// <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}"); }
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#"); }