public static BitString FormatMessage(BitString message, int capacity, string functionNameString, BitString customization)
        {
            var functionName = Sha3DerivedHelpers.StringToHex(functionNameString);

            BitString bytepad;

            if (capacity == 256)
            {
                bytepad = Sha3DerivedHelpers.Bytepad(BitString.ConcatenateBits(Sha3DerivedHelpers.EncodeString(functionName), Sha3DerivedHelpers.EncodeString(customization)), new BitString("A8")); // "A8" is 168 (the rate)
            }
            else                                                                                                                                                                                     // capacity == 512
            {
                bytepad = Sha3DerivedHelpers.Bytepad(BitString.ConcatenateBits(Sha3DerivedHelpers.EncodeString(functionName), Sha3DerivedHelpers.EncodeString(customization)), new BitString("88")); // "88" is 136 (the rate)
            }

            message = BitString.ConcatenateBits(bytepad, message);

            message = Sha3DerivedHelpers.SafeConcatenation(message, BitString.Zeroes(2));

            return(message);
        }
        /// <summary>
        /// Call this method to format correctly for cSHAKE
        /// </summary>
        /// <param name="message">BitString representation of message</param>
        /// <param name="capacity">Capacity</param>
        /// <param name="functionNameString">Character string representation of functionName</param>
        /// <param name="customizationString">Character string for customization</param>
        /// <returns>Formatted message before calling Keccak</returns>
        public static BitString FormatMessage(BitString message, int capacity, string functionNameString, string customizationString)
        {
            var customization = Sha3DerivedHelpers.StringToHex(customizationString);

            return(FormatMessage(message, capacity, functionNameString, customization));
        }