public void SetDescramblerData(DescramblerParity parity, DescramblerDataType type, byte[] data) { if (type == DescramblerDataType.Key) { switch (parity) { case DescramblerParity.Even: Array.Copy(data, _CwEven, _CwEven.Length); SetEvenControlWord(_PtrKeySet, _CwEven); break; case DescramblerParity.Odd: Array.Copy(data, _CwOdd, _CwOdd.Length); SetOddControlWord(_PtrKeySet, _CwOdd); break; default: LogProvider.Add(DebugLevel.Warning, cLogSection, Message.CsaUnknownParity, parity); return; } } else { LogProvider.Add(DebugLevel.Warning, cLogSection, Message.CsaInvalidDescrDataType, type); } }
public void SetDecramblerData(int caIndex, DescramblerParity parity, DescramblerDataType dType, byte[] data) { using (MemoryStream ms = new MemoryStream()) using (BinaryWriter wr = new BinaryWriter(ms)) { wr.Write(caIndex); wr.Write((int)parity); wr.Write((int)dType); wr.Write(data); wr.Flush(); _IcEp.SendCommand(InterComCommand.SetDescramblerData, ms.ToArray()); } }
/// <summary> /// Loggt ECM /// </summary> /// <param name="level"></param> /// <param name="section"></param> /// <param name="parity"></param> /// <param name="cw"></param> public static void WriteCWLog(DebugLevel level, string section, DescramblerParity parity, byte[] cw) { if (!_Debug.HasFlag(level)) { return; } StringBuilder sb = new StringBuilder(); byte[] fullcw = new byte[cw.Length << 1]; switch (parity) { case DescramblerParity.Even: Array.Copy(cw, 0, fullcw, 0, cw.Length); break; case DescramblerParity.Odd: Array.Copy(cw, 0, fullcw, cw.Length, cw.Length); break; default: sb.AppendLine(MessageProvider.FormatMessage(Message.CwLogParityError, parity)); fullcw = cw; break; } if (cw.Length > 8) { sb.Append(MessageProvider.FormatMessage(Message.CwLogExt)); } else { sb.Append(MessageProvider.FormatMessage(Message.CwLog)); } for (int i = 0; i < fullcw.Length; i++) { sb.Append(fullcw[i].ToString("x2")); } Add(level, section, Message.SingleParam, sb.ToString()); }
/// <summary> /// Setzt Descrambler-Daten, z.B. Key oder Initialisierungsvektor /// </summary> /// <param name="parity">Parität für die die Daten gelten</param> /// <param name="dType">Angabe um welche Art von Daten es sich handelt</param> /// <param name="data">Descrambler-Daten</param> public void SetDescramblerData(DescramblerParity parity, DescramblerDataType dType, byte[] data) { if (_Disposed) { throw new ObjectDisposedException(GetType().Name); } if (_Algo == null) // Dann oscam ohne ext-CW Support, default CSA initialisieren: { Initialize(); } lock (this) _Algo.SetDescramblerData(parity, dType, data); if (dType == DescramblerDataType.Key) { LogProvider.WriteCWLog(DebugLevel.ControlWord, cLogSection, parity, data); } }
private void CmdCaSetDescrData(BinaryReader r) { int adapter = r.ReadByte(); int index = IPAddress.NetworkToHostOrder(r.ReadInt32()); DescramblerParity parity = (DescramblerParity)IPAddress.NetworkToHostOrder(r.ReadInt32()); DescramblerDataType dType = (DescramblerDataType)IPAddress.NetworkToHostOrder(r.ReadInt32()); int dLen = IPAddress.NetworkToHostOrder(r.ReadInt32()); byte[] data = r.ReadBytes(dLen); ChannelSession c = _ChanSessions[adapter - _AdapterOffset]; if (c != null) { c.SetDecramblerData(index, parity, dType, data); } else { LogProvider.Add(DebugLevel.Warning, cLogSection, Message.DvbapiDataAdapterNotFound, adapter); } }
private void CmdCaSetCaDescr(BinaryReader r) { int adapter = r.ReadByte(); int index = IPAddress.NetworkToHostOrder(r.ReadInt32()); DescramblerParity parity = (DescramblerParity)IPAddress.NetworkToHostOrder(r.ReadInt32()); byte[] cw = r.ReadBytes(8); LogProvider.Add(DebugLevel.DvbApi, cLogSection, Message.DvbapiSetCaDescr, adapter, index, parity); ChannelSession c = _ChanSessions[adapter - _AdapterOffset]; if (c != null) { c.SetDecramblerData(index, parity, DescramblerDataType.Key, cw); } else { LogProvider.Add(DebugLevel.Warning, cLogSection, Message.DvbapiCwAdapterNotFound, adapter); } }
public void SetDescramblerData(DescramblerParity parity, DescramblerDataType type, byte[] data) { AesBase aes; switch (parity) { case DescramblerParity.Even: aes = _EvenAes; break; case DescramblerParity.Odd: aes = _OddAes; break; default: LogProvider.Add(DebugLevel.Warning, cLogSection, Message.AesUnknownParity, parity); return; } switch (type) { case DescramblerDataType.InitializationVector: aes.SetIv(data); break; case DescramblerDataType.Key: if (data.Length != 16) { LogProvider.Add(DebugLevel.Warning, cLogSection, Message.AesInvalidKeyLength); return; } aes.SetKey(data); break; default: LogProvider.Add(DebugLevel.Warning, cLogSection, Message.AesInvalidDescrDataType, type); return; } }
private void IcCommandSetDescrambleData(BinaryReader rdr, int dLen) { int index = rdr.ReadInt32(); DescramblerParity parity = (DescramblerParity)rdr.ReadInt32(); DescramblerDataType dType = (DescramblerDataType)rdr.ReadInt32(); byte[] data = rdr.ReadBytes((int)(dLen - rdr.BaseStream.Position)); if (dType == DescramblerDataType.Key) { GotControlWord?.Invoke(data, parity); } if (_UseMdApi) { return; } Descrambler descr = GetDescrambler(index); descr.SetDescramblerData(parity, dType, data); }