public EventMessage(EventMessageName name, object message, AesSecurityProvider provider) { Message = message; Name = name.ToString(); //encrypt data with logged in pin and session id (wrapped in an AesSecurityProvider) Args[0] = provider.EncryptData(message); }
public IActionResult Data([FromQuery] string pairingId, [FromQuery] int sessionId, [FromQuery][JsonConverter(typeof(StringEnumConverter))] EncryptedResourceType resource) { var pairingSession = IsValidPairingSession(pairingId, HandshakeResourceType.Session); if (pairingSession.Item1 != "OK") { return(BadRequest(pairingSession.Item1)); } var key = pairingSession.Item2.Key; var securityProvider = new AesSecurityProvider(key, sessionId); string message = "5::/com.samsung.companion:"; switch (resource) { case EncryptedResourceType.RegisterRemoteControl: message += new EventMessage(EventMessageName.registerPush, new RegisterRemoteControlMessage(), securityProvider).Serialize(); break; case EncryptedResourceType.RegisterSecondTvMessage: message += new EventMessage(EventMessageName.callCommon, new RegisterSecondTvMessage(), securityProvider).Serialize(); break; case EncryptedResourceType.GetDuidMessage: message += new EventMessage(EventMessageName.callCommon, new GetDuidMessage(), securityProvider).Serialize(); break; default: return(BadRequest("no resource given")); } return(Ok(message)); }
public string Decrypt(string data, int sessionId) { if (Step == HandshakeResourceType.Session) { var securityProvider = new AesSecurityProvider(Key, sessionId); var decrypted = securityProvider.DecryptData(data); CheckDuidMessage(decrypted); return(decrypted); } return(null); }
private async Task InitTargetDevice(DeviceInfo device) { Console.WriteLine("InitTargetDevice - started... "); Logger instance = Logger.Instance; object[] encryptionEnabled = new object[] { this.devicePairing.EncryptionEnabled }; instance.LogMessageFormat("InitTargetDevice - EncryptionEnabled : {0}", encryptionEnabled); ISecondTvSecurityProvider noSecurityProvider = null; if (!this.devicePairing.EncryptionEnabled) { noSecurityProvider = new NoSecurityProvider(); } else { noSecurityProvider = new AesSecurityProvider(this.devicePairing.SpcApi.GetKey(), this.devicePairing.SessionId); } Console.WriteLine("InitTargetDevice - Created Tv device."); ITargetDevice targetDevice = SmartTVRemoteControl.DeviceFactory.CreateTvDevice(device, this.notificationProvider, new DispatcherWrapper(Dispatcher.CurrentDispatcher), noSecurityProvider); Console.WriteLine("InitTargetDevice - Set current device."); this.SetCurrentDevice(targetDevice); try { Console.WriteLine("InitTargetDevice - Initialize Tv device."); AsyncContext.Run(() => targetDevice.InitializeAsync()); //await targetDevice.InitializeAsync(); } catch (Exception exception1) { Exception exception = exception1; Console.WriteLine("[ERROR]Catch exception when initialize TV."); Logger logger = Logger.Instance; logger.LogMessageFormat("Exception message: {0}", new object[] { exception.Message }); Logger instance1 = Logger.Instance; instance1.LogMessageFormat("Exception stacktrace: {0}", new object[] { exception.StackTrace }); } finally { Console.WriteLine("InitTargetDevice is complete"); } }
public IActionResult Button([FromQuery] string pairingId, [FromQuery] int sessionId, [FromQuery] string buttonId) { var pairingSession = IsValidPairingSession(pairingId, HandshakeResourceType.Session); if (pairingSession.Item1 == "OK") { if (string.IsNullOrEmpty(pairingSession.Item2.Duid)) { return(NotFound( $"to call a button you get the encrypted message to get the duid from: {Constants.DuidUrl}. Then send that data via the websocket to the tv and decrypt the responnse on: {Constants.DecryptUrl}. That will store the TV identifier (DUID) in the session")); } var key = pairingSession.Item2.Key; var securityProvider = new AesSecurityProvider(key, sessionId); var message = "5::/com.samsung.companion:" + new EventMessage(EventMessageName.callCommon, new ButtonMessage(buttonId, pairingSession.Item2.Duid), securityProvider) .Serialize(); return(Ok(message)); } return(BadRequest(pairingSession.Item1)); }
private async Task InitTargetDevice(DeviceInfo device) { Logger.Instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - started... ", new object[0]); Logger instance = Logger.Instance; object[] encryptionEnabled = new object[] { this.devicePairing.EncryptionEnabled }; instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - EncryptionEnabled : {0}", encryptionEnabled); ISecondTvSecurityProvider noSecurityProvider = null; if (!this.devicePairing.EncryptionEnabled) { noSecurityProvider = new NoSecurityProvider(); } else { noSecurityProvider = new AesSecurityProvider(this.devicePairing.SpcApi.GetKey(), this.devicePairing.SessionId); } Logger.Instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - Created Tv device.", new object[0]); ITargetDevice targetDevice = SmartView2.DeviceFactory.CreateTvDevice(device, this.notificationProvider, this.dispatcher, noSecurityProvider); Logger.Instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - Set current device.", new object[0]); this.SetCurrentDevice(targetDevice); try { Logger.Instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - Initialize Tv device.", new object[0]); await targetDevice.InitializeAsync(); } catch (Exception exception1) { Exception exception = exception1; Logger.Instance.LogMessageFormat("[SmartView2][DeviceController][ERROR]Catch exception when initialize TV.", new object[0]); Logger logger = Logger.Instance; logger.LogMessageFormat("[SmartView2][DeviceController]Exception message: {0}", new object[] { exception.Message }); Logger instance1 = Logger.Instance; instance1.LogMessageFormat("[SmartView2][DeviceController]Exception stacktrace: {0}", new object[] { exception.StackTrace }); } }