/// <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); }