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  }