/// <summary>
        /// Generates the truncated SHA521 hash of the <paramref name="message"/>.
        /// </summary>
        /// <param name="message"></param>
        public BigInteger HashMessage(string message)
        {
            byte[] messageBytes = Encoding.Default.GetBytes(message);
            byte[] messageHash;

            using (SHA512Managed sha512M = new SHA512Managed())
            {
                messageHash = sha512M.ComputeHash(messageBytes);
            }

            BigInteger e = new BigInteger(messageHash);
            BigInteger z = e >> (e.BitLenght() - Curve.n.BitLenght());

            if (!(z.BitLenght() <= Curve.n.BitLenght()))
            {
                throw new Exception("!(z.BitLenght() <= Curve.n.BitLenght())");
            }

            return(z);
        }