Opc.Ua.Bindings.TcpChannel.SymmetricVerify C# (CSharp) Метод

SymmetricVerify() приватный статический Метод

Verifies a HMAC for a message.
private static SymmetricVerify ( TcpChannelToken token, byte signature, ArraySegment dataToVerify, bool useClientKeys ) : bool
token TcpChannelToken
signature byte
dataToVerify ArraySegment
useClientKeys bool
Результат bool
        private static bool SymmetricVerify(
            TcpChannelToken    token, 
            byte[]             signature,
            ArraySegment<byte> dataToVerify,
            bool               useClientKeys)
        {
            // get HMAC object.
            HMAC hmac = (useClientKeys)?token.ClientHmac:token.ServerHmac;
                                    
            // compute hash.
            MemoryStream istrm = new MemoryStream(dataToVerify.Array, dataToVerify.Offset, dataToVerify.Count, false);
            byte[] computedSignature = hmac.ComputeHash(istrm);
            istrm.Dispose();

            // compare signatures.
            for (int ii = 0; ii < signature.Length; ii++)
            {
                if (computedSignature[ii] != signature[ii])
                {
                    string messageType = new UTF8Encoding().GetString(dataToVerify.Array, dataToVerify.Offset, 4);
                    int messageLength = BitConverter.ToInt32(dataToVerify.Array, dataToVerify.Offset+4);
                    string expectedSignature = Utils.ToHexString(computedSignature);
                    string actualSignature = Utils.ToHexString(signature);

                    Utils.Trace(
                        "Could not validate signature.\r\nChannelId={0}, TokenId={1}, MessageType={2}, Length={3}\r\nExpectedSignature={4}\r\nActualSignature  ={5}",
                        token.ChannelId,                        
                        token.TokenId,
                        messageType,
                        messageLength,
                        expectedSignature,
                        actualSignature);

                    return false;
                }
            }

            return true;
        }