From d4be179b8fef499d4024a5cd230b845c600d7829 Mon Sep 17 00:00:00 2001
From: zhanglinjie <zhanglinjie@pxn.one>
Date: Sun, 21 May 2023 13:19:18 +0800
Subject: [PATCH] fix schnorr sign

---
 c_src/libsecp256k1_nif.c   |  2 +-
 test/libsecp256k1_test.exs | 16 +++++++++-------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/c_src/libsecp256k1_nif.c b/c_src/libsecp256k1_nif.c
index 207aea8..635ec0d 100644
--- a/c_src/libsecp256k1_nif.c
+++ b/c_src/libsecp256k1_nif.c
@@ -577,7 +577,7 @@ schnorr_sign(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
 	secp256k1_keypair keypair;
 	secp256k1_pubkey pubkey;
 	secp256k1_xonly_pubkey xonly_pubkey;
-	unsigned char* sig64;
+	unsigned char sig64[64];
 	unsigned char* finishedsig;
 	size_t siglen = 64;
 
diff --git a/test/libsecp256k1_test.exs b/test/libsecp256k1_test.exs
index 85ecb50..bc95d03 100644
--- a/test/libsecp256k1_test.exs
+++ b/test/libsecp256k1_test.exs
@@ -46,11 +46,13 @@ defmodule Libsecp256k1Test do
   end
 
   test "schnorr sign" do
-    {prv, xonly_pub} = generate_valid_schnorr_keypair()
-    msg = :crypto.strong_rand_bytes(32)
-    {:ok, signature} = :libsecp256k1.schnorr_sign(msg, prv)
+    for _ <- 0..10 do
+      {prv, xonly_pub} = generate_valid_schnorr_keypair()
+      msg = :crypto.strong_rand_bytes(32)
+      {:ok, signature} = :libsecp256k1.schnorr_sign(msg, prv)
 
-    assert :ok == :libsecp256k1.schnorr_verify(msg, signature, xonly_pub)
+      assert :ok == :libsecp256k1.schnorr_verify(msg, signature, xonly_pub)
+    end
   end
 
   defp generate_valid_schnorr_keypair() do
@@ -104,9 +106,9 @@ defmodule Libsecp256k1Test do
   end
 
   test "ec_privkey_tweak_add" do
-    prv = <<0x6b973d88838f27366ed61c9ad6367663045cb456e28335c109e30717ae0c6baa::256>>
-    tweak = <<0xb86e7be8f39bab32a6f2c0443abbc210f0edac0e2c53d501b36b64437d9c6c70::256>>
-    tweaked_prv = <<0x2405b971772ad26915c8dcdf10f238753a9b837e5f8e6a86fd7c0cce5b7296d9::256>>
+    prv = <<0x6B973D88838F27366ED61C9AD6367663045CB456E28335C109E30717AE0C6BAA::256>>
+    tweak = <<0xB86E7BE8F39BAB32A6F2C0443ABBC210F0EDAC0E2C53D501B36B64437D9C6C70::256>>
+    tweaked_prv = <<0x2405B971772AD26915C8DCDF10F238753A9B837E5F8E6A86FD7C0CCE5B7296D9::256>>
 
     assert {:ok, tweaked_prv} == :libsecp256k1.ec_privkey_tweak_add(prv, tweak)
   end