github.com/piotrnar/gocoin@v0.0.0-20240512203912-faa0448c5e96/lib/btc/ecdsa_test.go (about) 1 package btc 2 3 import ( 4 "bytes" 5 "testing" 6 "encoding/hex" 7 ) 8 9 var ta = [][3]string{ 10 { // [0]-pubScr, [1]-sigScript, [2]-unsignedTx 11 "040eaebcd1df2df853d66ce0e1b0fda07f67d1cabefde98514aad795b86a6ea66dbeb26b67d7a00e2447baeccc8a4cef7cd3cad67376ac1c5785aeebb4f6441c16", 12 "3045022100fe00e013c244062847045ae7eb73b03fca583e9aa5dbd030a8fd1c6dfcf11b1002207d0d04fed8fa1e93007468d5a9e134b0a7023b6d31db4e50942d43a250f4d07c01", 13 "01000000014d276db8e3a547cc3eaff4051d0d158da21724634d7c67c51129fa403dded5de010000001976a914718950ac3039e53fbd6eb0213de333b689a1ca1288acffffffff02a8d39b0f000000001976a914db641fc6dff262fe2504725f2c4c1852b18ffe3588ace693f205000000001976a9141321c4f37c5b2be510c1c7725a83e561ad27876b88ac00000000", 14 }, 15 { 16 "0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3", 17 "304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901", 18 "0100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd37040000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3acffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000", 19 }, 20 { 21 "0428f42723f81c70664e200088437282d0e11ae0d4ae139f88bdeef1550471271692970342db8e3f9c6f0123fab9414f7865d2db90c24824da775f00e228b791fd", 22 "3045022100d557da5d9bf886e0c3f98fd6d5d337487cd01d5b887498679a57e3d32bd5d0af0220153217b63a75c3145b14f58c64901675fe28dba2352c2fa9f2a1579c74a2de1701", 23 "0100000001402a2443bb5f1d8582ac06e1cc4232a75ba98c3db339ab4e036b8a0ed7e9e602010000001976a9143ad4ff2b7712c0c41a46324031bc7e55e4341f1a88acffffffff0100e1f505000000001976a91440e6fd9a591bb2e6ce886b317959fb3ffa906f6988ac00000000", 24 }, 25 } 26 27 func TestVerify(t *testing.T) { 28 for i := range ta { 29 key, e := hex.DecodeString(ta[i][0]) 30 if e != nil { 31 t.Error(e.Error()) 32 } 33 34 // signature script 35 sig, e := hex.DecodeString(ta[i][1]) 36 if e != nil { 37 t.Error(e.Error()) 38 } 39 40 // verify signature.Bytes() 41 _s, e := NewSignature(sig) 42 if e != nil { 43 t.Error(e.Error()) 44 } else if _s == nil { 45 t.Error("NewSignature failed") 46 } else { 47 if !bytes.Equal(_s.Bytes(), sig) { 48 t.Error("Signature.Bytes() not equal") 49 } 50 } 51 52 // hash of the message 53 b, e := hex.DecodeString(ta[i][2] + "01000000") 54 if e != nil { 55 t.Error(e.Error()) 56 } 57 h := NewSha2Hash(b[:]) 58 59 ok := EcdsaVerify(key, sig, h.Hash[:]) 60 if !ok { 61 t.Error("Test vector failed", i) 62 } 63 } 64 } 65 66 67 func BenchmarkNewSignature(b *testing.B) { 68 ptr, _ := hex.DecodeString(ta[0][1]) 69 for i := 0; i < b.N; i++ { 70 NewSignature(ptr[:]) 71 } 72 } 73 74 75 func BenchmarkEcdsaSign(b *testing.B) { 76 var sec, msg [32]byte 77 ShaHash([]byte("sec"), sec[:]) 78 ShaHash([]byte("msg"), msg[:]) 79 b.ResetTimer() 80 for i := 0; i < b.N; i++ { 81 EcdsaSign(sec[:], msg[:]) 82 } 83 } 84 85 86 func BenchmarkEcdsaVerify(b *testing.B) { 87 key, _ := hex.DecodeString(ta[0][0]) 88 sig, _ := hex.DecodeString(ta[0][1]) 89 ptr, _ := hex.DecodeString(ta[0][2] + "01000000") 90 h := NewSha2Hash(ptr[:]) 91 b.ResetTimer() 92 for i := 0; i < b.N; i++ { 93 if !EcdsaVerify(key, sig, h.Hash[:]) { 94 b.Error("Verify failed") 95 } 96 } 97 }