| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | using Core.Communication.Transport;using Core.Util.Extension;using PLC.Siemens.Protocol.Common;namespace PLC.Siemens.Protocol.Security{    public class DataSecurityRequest    {        public byte Ret;    // 0xFF for request        public byte Ts;     // 0x09 Transport size        public ushort DLen;   // Data len  : 8 bytes        public char[] Pwd; // Password encoded into "AG" format 8        public ushort PacketLength { get{return 0x0C; } }        public void Build(params char[] value)        {            if (value.IsNotEmpty())            {                Ts = (byte)TsType.TsResOctet;                Ret = 0xFF;                Pwd = value;                DLen = 0x0008;            }            else            {                Ts = 0x00;                Ret = 0x0A;                DLen = 0x0000;            }                    }        public void GetByteBuffer(ByteBuffer buffer)        {            buffer.Push(Ret);            buffer.Push(Ts);            buffer.Push(DLen);            if (DLen == 0) return;            Pwd[0] = (char) (Pwd[0] ^ 0x55);            Pwd[1] = (char) (Pwd[1] ^ 0x55);            for (var i = 2; i < 8; i++)            {                Pwd[i] = (char) (Pwd[i] ^ 0x55 ^ Pwd[i - 2]);            }            ;            Pwd.ForEach(t => buffer.Push((byte) t));        }    }}
 |