コード例 #1
0
ファイル: DvbCsa.cs プロジェクト: t5b6de/dvbapiNET_public
        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);
            }
        }
コード例 #2
0
        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());
                }
        }
コード例 #3
0
        /// <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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
ファイル: Aes128.cs プロジェクト: t5b6de/dvbapiNET_public
        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;
            }
        }
コード例 #6
0
        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);
        }