private void DoComputeBlake2BMAC(string a_Key, string a_Personalisation, string a_Salt, string a_Data,
                                         string a_ExpectedResult, Int32 a_OutputSizeInBits)
        {
            IHash LHash, LClone;
            Int32 LIdx;

            byte[] ActualResult, ActualResultClone, Key, Salt, Personalisation, Data;

            Key             = Converters.ConvertHexStringToBytes(a_Key);
            Personalisation = Converters.ConvertStringToBytes(a_Personalisation, Encoding.UTF8);

            // if personalisation length != 16, resize to 16, padding with zeros if necessary
            if (Personalisation.Length != 16)
            {
                Array.Resize(ref Personalisation, 16);
            }

            Salt = Converters.ConvertHexStringToBytes(a_Salt);
            Data = Converters.ConvertStringToBytes(a_Data, Encoding.UTF8);

            LHash = HashFactory.Blake2BMAC.CreateBlake2BMAC(Key, Salt, Personalisation, a_OutputSizeInBits);

            LHash.Initialize();

            for (LIdx = 0; LIdx < Data.Length; LIdx++)
            {
                LHash.TransformBytes(new byte[] { Data[LIdx] }); // do incremental hashing
            }
            LClone = LHash.Clone();

            ActualResult      = LHash.TransformFinal().GetBytes();
            ActualResultClone = LClone.TransformFinal().GetBytes();

            Assert.AreEqual(a_ExpectedResult,
                            Converters.ConvertBytesToHexString(ActualResult, false),
                            String.Format("Expected {0} But got {1}", a_ExpectedResult,
                                          Converters.ConvertBytesToHexString(ActualResult, false)));

            if (!ActualResult.SequenceEqual(ActualResultClone))
            {
                Assert.Fail(String.Format(
                                "Blake2BMAC mismatch on test vector against a clone, Expected \"{0}\" but got \"{1}\"",
                                a_ExpectedResult, Converters.ConvertBytesToHexString(ActualResultClone, false)));
            }
        } // end function DoComputeKMAC128