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 }