/// <summary>
        /// Returns the upper and lower base hash values from which the k hashes are
        /// derived.
        /// </summary>
        /// <param name="data">The data bytes to hash.</param>
        /// <param name="algorithm">The hashing algorithm to use.</param>
        /// <returns>A HashKernel</returns>
        public static HashKernel128ReturnValue HashKernel128(byte[] data, HashAlgorithm algorithm)
        {
            var sum = algorithm.ComputeHash(data);

            return(HashKernel128ReturnValue.Create(
                       HashBytesToUInt64(sum, 0),
                       HashBytesToUInt64(sum, 8)
                       ));
        }
        /// <summary>
        /// Returns the upper and lower base hash values from which the k hashes are
        /// derived.
        /// </summary>
        /// <param name="data">The data bytes to hash.</param>
        /// <param name="algorithm">The hashing algorithm to use.</param>
        /// <returns>A HashKernel</returns>
        public static HashKernel128ReturnValue HashKernel128(byte[] data, HashAlgorithm algorithm)
        {
            var hash = new Hash128(algorithm);
            var sum  = hash.ComputeHashAndSum(data);

            return(HashKernel128ReturnValue.Create(
                       ToBigEndianUInt64(sum, 8),
                       ToBigEndianUInt64(sum, 0)
                       ));
        }