示例#1
0
        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);
        }
示例#2
0
        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);
                }
        }
示例#3
0
        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);
        }