Opc.Ua.Bindings.TcpChannel.SymmetricEncrypt C# (CSharp) Method

SymmetricEncrypt() private static method

Encrypts a message using a symmetric algorithm.
private static SymmetricEncrypt ( TcpChannelToken token, ArraySegment dataToEncrypt, bool useClientKeys ) : void
token TcpChannelToken
dataToEncrypt ArraySegment
useClientKeys bool
return void
        private static void SymmetricEncrypt(
            TcpChannelToken token, 
            ArraySegment<byte> dataToEncrypt,
            bool               useClientKeys)
        {
             SymmetricAlgorithm encryptingKey = (useClientKeys)?token.ClientEncryptor:token.ServerEncryptor;

            if (encryptingKey == null)
            {
                throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Token missing symmetric key object.");
            }

            using (ICryptoTransform encryptor = encryptingKey.CreateEncryptor())
            {
                byte[] blockToEncrypt = dataToEncrypt.Array;

                int start = dataToEncrypt.Offset;
                int count = dataToEncrypt.Count;

                if (count % encryptor.InputBlockSize != 0)
                {
                    throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Input data is not an even number of encryption blocks.");
                }

                encryptor.TransformBlock(blockToEncrypt, start, count, blockToEncrypt, start);
            }
        }