public void Schnorrsig_Wrong_Verify()
        {
            using (var secp256k1 = new Secp256k1())
                using (var schnorrSig = new Schnorr())
                {
                    var keyPair = secp256k1.GenerateKeyPair();

                    var msg      = "Message for signing";
                    var msgBytes = Encoding.UTF8.GetBytes(msg);
                    var msgHash  = System.Security.Cryptography.SHA256.Create().ComputeHash(msgBytes);

                    var sig = schnorrSig.Sign(msgHash, keyPair.PrivateKey);

                    Assert.NotNull(sig);
                    Assert.InRange(sig.Length, 0, Constant.SIGNATURE_SIZE);

                    msg      = "Wrong message for signing";
                    msgBytes = Encoding.UTF8.GetBytes(msg);
                    msgHash  = System.Security.Cryptography.SHA256.Create().ComputeHash(msgBytes);

                    var valid = schnorrSig.Verify(sig, msgHash, keyPair.PublicKey);

                    Assert.False(valid);
                }
        }
Ejemplo n.º 2
0
        public Transaction.Transaction SignWith(Transaction.Transaction tx, Account signer)
        {
            BalanceResult result;

            if (signer == null)
            {
                throw new Exception("account not exists");
            }
            if (string.IsNullOrEmpty(tx.Nonce))
            {
                try
                {
                    result   = this.Provider.GetBalance(signer.Address).Result;
                    tx.Nonce = result.Nonce + 1;
                }
                catch (Exception e)
                {
                    throw new Exception("cannot get nonce", e);
                }
            }
            tx.SenderPubKey = signer.GetPublicKey();
            byte[]    message   = tx.Bytes();
            Signature signature = Schnorr.Sign(signer.Keys, message);

            tx.Signature = (signature.ToString().ToLower());
            return(tx);
        }
        public void Schnorrsig_Verify_Batch()
        {
            using (var secp256k1 = new Secp256k1())
                using (var schnorrSig = new Schnorr())
                {
                    var signatures = new List <byte[]>();
                    var messages   = new List <byte[]>();
                    var publicKeys = new List <byte[]>();

                    for (int i = 0; i < 10; i++)
                    {
                        var keyPair = secp256k1.GenerateKeyPair();

                        var msg      = $"Message for signing {i}";
                        var msgBytes = Encoding.UTF8.GetBytes(msg);
                        var msgHash  = System.Security.Cryptography.SHA256.Create().ComputeHash(msgBytes);

                        var sig = schnorrSig.Sign(msgHash, keyPair.PrivateKey);

                        Assert.NotNull(sig);
                        Assert.InRange(sig.Length, 0, Constant.SIGNATURE_SIZE);

                        signatures.Add(sig);
                        messages.Add(msgHash);
                        publicKeys.Add(keyPair.PublicKey);
                    }

                    var valid = schnorrSig.VerifyBatch(signatures, messages, publicKeys);

                    Assert.True(valid);
                }
        }
Ejemplo n.º 4
0
        public TransactionPayload SignWith(TransactionPayload tx, Account signer, bool getNonce = false)
        {
            if (signer == null)
            {
                throw new Exception("account not exists");
            }
            try
            {
                if (getNonce)
                {
                    var result = _zil.GetBalance(signer.Address).Result;
                    tx.Nonce = (int)result.Nonce + 1;
                }
            }
            catch (Exception e)
            {
                throw new Exception("cannot get nonce", e);
            }

            tx.PubKey = signer.GetPublicKey();
            byte[]    message   = tx.Encode();
            Signature signature = Schnorr.Sign(signer.KeyPair, message);

            tx.Signature = (signature.ToString().ToLower());
            return(tx);
        }
        public void Schnorrsig_Serialize()
        {
            using (var secp256k1 = new Secp256k1())
                using (var schnorrSig = new Schnorr())
                {
                    var keyPair = secp256k1.GenerateKeyPair();

                    var msg      = "Message for signing";
                    var msgBytes = Encoding.UTF8.GetBytes(msg);
                    var msgHash  = System.Security.Cryptography.SHA256.Create().ComputeHash(msgBytes);

                    var sigIn  = schnorrSig.Sign(msgHash, keyPair.PrivateKey);
                    var sigOut = schnorrSig.Serialize(sigIn);

                    Assert.NotNull(sigOut);
                    Assert.InRange(sigOut.Length, 0, Constant.SIGNATURE_SIZE);
                }
        }
Ejemplo n.º 6
0
 public void HelpTest()
 {
     Trace.WriteLine(Schnorr.Help());
 }
Ejemplo n.º 7
0
        public static string GeneratePrivateKey()
        {
            ECKeyPair keys = Schnorr.GenerateKeyPair();

            return(keys.PrivateKey.ToString(8));
        }