public byte[] Sign(byte[] message, string secretPhrase) { var p = new byte[32]; var s = new byte[32]; var sha256 = SHA256.Create(); Curve25519.Keygen(p, s, sha256.ComputeHash(Encoding.UTF8.GetBytes(secretPhrase))); var m = sha256.ComputeHash(message); sha256.TransformBlock(m, 0, m.Length, m, 0); sha256.TransformFinalBlock(s, 0, s.Length); var x = sha256.Hash; var y = new byte[32]; Curve25519.Keygen(y, null, x); sha256 = SHA256.Create(); sha256.TransformBlock(m, 0, m.Length, m, 0); sha256.TransformFinalBlock(y, 0, y.Length); var h = sha256.Hash; var v = new byte[32]; Curve25519.Sign(v, h, x, s); var signature = v.Concat(h).ToArray(); return(signature); }
internal byte[] Sign(byte[] message, string secretPhrase) { var p = new byte[32]; var s = new byte[32]; using (var incrementalHash = IncrementalHash.CreateHash(HashAlgorithmName.SHA256)) using (var sha256 = SHA256.Create()) { Curve25519.Keygen(p, s, sha256.ComputeHash(Encoding.UTF8.GetBytes(secretPhrase))); var m = sha256.ComputeHash(message); incrementalHash.AppendData(m); incrementalHash.AppendData(s); var x = incrementalHash.GetHashAndReset(); var y = new byte[32]; Curve25519.Keygen(y, null, x); incrementalHash.AppendData(m); incrementalHash.AppendData(y); var h = incrementalHash.GetHashAndReset(); var v = new byte[32]; Curve25519.Sign(v, h, x, s); var signature = v.Concat(h).ToArray(); return(signature); } }
internal BinaryHexString GetPublicKey(string secretPhrase) { var publicKey = new byte[32]; var encodedSecretPhrase = Encoding.UTF8.GetBytes(secretPhrase); var hashedSecretPhrase = ComputeHash(encodedSecretPhrase); Curve25519.Keygen(publicKey, null, hashedSecretPhrase); var binaryHexString = new BinaryHexString(publicKey); return(binaryHexString); }