github.com/piotrnar/gocoin@v0.0.0-20240512203912-faa0448c5e96/lib/others/cgo/sipasec/sipasec_test.go (about)

     1  package sipasec
     2  
     3  import (
     4  	"encoding/csv"
     5  	"encoding/hex"
     6  	"os"
     7  	"testing"
     8  )
     9  
    10  var ta = [][3]string{
    11  	{ // [0]-pubScr, [1]-sigScript, [2]-unsignedTx
    12  		"040eaebcd1df2df853d66ce0e1b0fda07f67d1cabefde98514aad795b86a6ea66dbeb26b67d7a00e2447baeccc8a4cef7cd3cad67376ac1c5785aeebb4f6441c16",
    13  		"3045022100fe00e013c244062847045ae7eb73b03fca583e9aa5dbd030a8fd1c6dfcf11b1002207d0d04fed8fa1e93007468d5a9e134b0a7023b6d31db4e50942d43a250f4d07c01",
    14  		"3382219555ddbb5b00e0090f469e590ba1eae03c7f28ab937de330aa60294ed6",
    15  	},
    16  	{
    17  		"020eaebcd1df2df853d66ce0e1b0fda07f67d1cabefde98514aad795b86a6ea66d",
    18  		"3045022100fe00e013c244062847045ae7eb73b03fca583e9aa5dbd030a8fd1c6dfcf11b1002207d0d04fed8fa1e93007468d5a9e134b0a7023b6d31db4e50942d43a250f4d07c01",
    19  		"3382219555ddbb5b00e0090f469e590ba1eae03c7f28ab937de330aa60294ed6",
    20  	},
    21  	{
    22  		"0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3",
    23  		"304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901",
    24  		"7a05c6145f10101e9d6325494245adf1297d80f8f38d4d576d57cdba220bcb19",
    25  	},
    26  	{
    27  		"0311db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5c",
    28  		"304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901",
    29  		"7a05c6145f10101e9d6325494245adf1297d80f8f38d4d576d57cdba220bcb19",
    30  	},
    31  	{
    32  		"0428f42723f81c70664e200088437282d0e11ae0d4ae139f88bdeef1550471271692970342db8e3f9c6f0123fab9414f7865d2db90c24824da775f00e228b791fd",
    33  		"3045022100d557da5d9bf886e0c3f98fd6d5d337487cd01d5b887498679a57e3d32bd5d0af0220153217b63a75c3145b14f58c64901675fe28dba2352c2fa9f2a1579c74a2de1701",
    34  		"c22de395adbb0720941e009e8a4e488791b2e428af775432ed94d2c7ec8e421a",
    35  	},
    36  	{
    37  		"0328f42723f81c70664e200088437282d0e11ae0d4ae139f88bdeef15504712716",
    38  		"3045022100d557da5d9bf886e0c3f98fd6d5d337487cd01d5b887498679a57e3d32bd5d0af0220153217b63a75c3145b14f58c64901675fe28dba2352c2fa9f2a1579c74a2de1701",
    39  		"c22de395adbb0720941e009e8a4e488791b2e428af775432ed94d2c7ec8e421a",
    40  	},
    41  	{
    42  		"041f2a00036b3cbd1abe71dca54d406a1e9dd5d376bf125bb109726ff8f2662edcd848bd2c44a86a7772442095c7003248cc619bfec3ddb65130b0937f8311c787",
    43  		"3045022100ec6eb6b2aa0580c8e75e8e316a78942c70f46dd175b23b704c0330ab34a86a34022067a73509df89072095a16dbf350cc5f1ca5906404a9275ebed8a4ba219627d6701",
    44  		"7c8e7c2cb887682ed04dc82c9121e16f6d669ea3d57a2756785c5863d05d2e6a",
    45  	},
    46  	{
    47  		"031f2a00036b3cbd1abe71dca54d406a1e9dd5d376bf125bb109726ff8f2662edc",
    48  		"3045022100ec6eb6b2aa0580c8e75e8e316a78942c70f46dd175b23b704c0330ab34a86a34022067a73509df89072095a16dbf350cc5f1ca5906404a9275ebed8a4ba219627d6701",
    49  		"7c8e7c2cb887682ed04dc82c9121e16f6d669ea3d57a2756785c5863d05d2e6a",
    50  	},
    51  	{
    52  		"04ee90bfdd4e07eb1cfe9c6342479ca26c0827f84bfe1ab39e32fc3e94a0fe00e6f7d8cd895704e974978766dd0f9fad3c97b1a0f23684e93b400cc9022b7ae532",
    53  		"3045022100fe1f6e2c2c2cbc916f9f9d16497df2f66a4834e5582d6da0ee0474731c4a27580220682bad9359cd946dc97bb07ea8fad48a36f9b61186d47c6798ccce7ba20cc22701",
    54  		"baff983e6dfb1052918f982090aa932f56d9301d1de9a726d2e85d5f6bb75464",
    55  	},
    56  }
    57  
    58  func TestVerify(t *testing.T) {
    59  	for i := range ta {
    60  		pkey, _ := hex.DecodeString(ta[i][0])
    61  		sign, _ := hex.DecodeString(ta[i][1])
    62  		hasz, _ := hex.DecodeString(ta[i][2])
    63  
    64  		res := EC_Verify(pkey, sign, hasz)
    65  		if res != 1 {
    66  			t.Error("Verify failed")
    67  		}
    68  		hasz[0]++
    69  		res = EC_Verify(pkey, sign, hasz)
    70  		if res != 0 {
    71  			t.Error("Verify not failed while it should")
    72  		}
    73  		res = EC_Verify(pkey[:1], sign, hasz)
    74  		if res >= 0 {
    75  			t.Error("Negative result expected", res)
    76  		}
    77  		res = EC_Verify(pkey, sign[:1], hasz)
    78  		if res >= 0 {
    79  			t.Error("Yet negative result expected", res)
    80  		}
    81  		res = EC_Verify(pkey, sign, hasz[:1])
    82  		if res != 0 {
    83  			t.Error("Zero expected", res)
    84  		}
    85  	}
    86  
    87  }
    88  
    89  func TestSchnorrVerify(t *testing.T) {
    90  	f, er := os.Open("../../../test/bip340_test_vectors.csv")
    91  	if er != nil {
    92  		t.Error(er.Error())
    93  		return
    94  	}
    95  	cf := csv.NewReader(f)
    96  	tas, er := cf.ReadAll()
    97  	f.Close()
    98  	if er != nil {
    99  		t.Error(er.Error())
   100  		return
   101  	}
   102  	for i := range tas {
   103  		if i == 0 {
   104  			continue // skip column names
   105  		}
   106  		pkey, _ := hex.DecodeString(tas[i][2])
   107  		hasz, _ := hex.DecodeString(tas[i][4])
   108  		sign, _ := hex.DecodeString(tas[i][5])
   109  		//println(i, len(pkey), len(hasz), len(sign), tas[i][6], tas[i][2])
   110  
   111  		if tas[i][6] == "FALSE" {
   112  			res := Schnorr_Verify(pkey, sign, hasz)
   113  			if res != 0 {
   114  				t.Error("Schnorr_Verify not failed")
   115  			}
   116  			continue
   117  		}
   118  
   119  		res := Schnorr_Verify(pkey, sign, hasz)
   120  		if res != 1 {
   121  			t.Error("Schnorr_Verify failed")
   122  		}
   123  		hasz[0]++
   124  		res = Schnorr_Verify(pkey, sign, hasz)
   125  		if res != 0 {
   126  			t.Error("SchnorrVerify not failed while it should")
   127  		}
   128  	}
   129  }
   130  
   131  func BenchmarkVerifyUncompressed(b *testing.B) {
   132  	key, _ := hex.DecodeString("040eaebcd1df2df853d66ce0e1b0fda07f67d1cabefde98514aad795b86a6ea66dbeb26b67d7a00e2447baeccc8a4cef7cd3cad67376ac1c5785aeebb4f6441c16")
   133  	sig, _ := hex.DecodeString("3045022100fe00e013c244062847045ae7eb73b03fca583e9aa5dbd030a8fd1c6dfcf11b1002207d0d04fed8fa1e93007468d5a9e134b0a7023b6d31db4e50942d43a250f4d07c01")
   134  	msg, _ := hex.DecodeString("3382219555ddbb5b00e0090f469e590ba1eae03c7f28ab937de330aa60294ed6")
   135  	b.ResetTimer()
   136  	for i := 0; i < b.N; i++ {
   137  		EC_Verify(key, sig, msg)
   138  	}
   139  }
   140  
   141  func BenchmarkVerifyCompressed(b *testing.B) {
   142  	key_compr, _ := hex.DecodeString("020eaebcd1df2df853d66ce0e1b0fda07f67d1cabefde98514aad795b86a6ea66d")
   143  	sig, _ := hex.DecodeString("3045022100fe00e013c244062847045ae7eb73b03fca583e9aa5dbd030a8fd1c6dfcf11b1002207d0d04fed8fa1e93007468d5a9e134b0a7023b6d31db4e50942d43a250f4d07c01")
   144  	msg, _ := hex.DecodeString("3382219555ddbb5b00e0090f469e590ba1eae03c7f28ab937de330aa60294ed6")
   145  	b.ResetTimer()
   146  	for i := 0; i < b.N; i++ {
   147  		EC_Verify(key_compr, sig, msg)
   148  	}
   149  }
   150  
   151  func BenchmarkSchnorrVerify(b *testing.B) {
   152  	key, _ := hex.DecodeString("DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659")
   153  	sig, _ := hex.DecodeString("6896BD60EEAE296DB48A229FF71DFE071BDE413E6D43F917DC8DCF8C78DE33418906D11AC976ABCCB20B091292BFF4EA897EFCB639EA871CFA95F6DE339E4B0A")
   154  	msg, _ := hex.DecodeString("243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89")
   155  	b.ResetTimer()
   156  	for i := 0; i < b.N; i++ {
   157  		Schnorr_Verify(key, sig, msg)
   158  	}
   159  }
   160  
   161  func BenchmarkCheckPayToContract(b *testing.B) {
   162  	pkey, _ := hex.DecodeString("afaf8a67be00186668f74740e34ffce748139c2b73c9fbd2c1f33e48a612a75d")
   163  	base, _ := hex.DecodeString("f1cbd3f2430910916144d5d2bf63d48a6281e5b8e6ade31413adccff3d8839d4")
   164  	hash, _ := hex.DecodeString("93a760e87123883022cbd462ac40571176cf09d9d2c6168759fee6c2b079fdd8")
   165  	parity := true
   166  	b.ResetTimer()
   167  	for i := 0; i < b.N; i++ {
   168  		if CheckPayToContract(pkey, base, hash, parity) != 1 {
   169  			b.Fatal("CheckPayToContract failed")
   170  		}
   171  	}
   172  }