@@ -3,6 +3,7 @@ package bitcoin
33import (
44 "encoding/hex"
55 "fmt"
6+ "math/big"
67 "strconv"
78 "testing"
89
@@ -173,3 +174,101 @@ func TestVerifyMessageSigRecover(t *testing.T) {
173174 }
174175 }
175176}
177+
178+ // TestVerifyMessageSigRecoverFailed will test the method recoverSig()
179+ func TestVerifyMessageSigRecoverFailed (t * testing.T ) {
180+
181+ // Bad signature cases
182+ var vs = [][6 ]string {
183+ {
184+ "0" ,
185+ "0" ,
186+ "0" ,
187+ "0" ,
188+ "0" ,
189+ "0" ,
190+ },
191+ {
192+ "000" ,
193+ "560978aed76de9d5d781f87ed2068832ed545f2b21bf040654a2daff694c8b09" ,
194+ "9ce428d58e8e4caf619dc6fc7b2c2c28f0561654d1f80f322c038ad5e67ff8a6" ,
195+ "1" ,
196+ "000" ,
197+ "bf29a25e2d1f32c5afb18b41ae60112723278a8af31275965a6ec1d95334e840" ,
198+ },
199+ {
200+ "000" ,
201+ "1234567" ,
202+ "1234567" ,
203+ "1" ,
204+ "000" ,
205+ "1234567" ,
206+ },
207+ {
208+ "bf29a25e2d1f32c5afb18b41ae60112723278a8af31275965a6ec1d95334e840" ,
209+ "bf29a25e2d1f32c5afb18b41ae60112723278a8af31275965a6ec1d95334e840" ,
210+ "bf29a25e2d1f32c5afb18b41ae60112723278a8af31275965a6ec1d95334e840" ,
211+ "1" ,
212+ "bf29a25e2d1f32c5afb18b41ae60112723278a8af31275965a6ec1d95334e840" ,
213+ "bf29a25e2d1f32c5afb18b41ae60112723278a8af31275965a6ec1d95334e840" ,
214+ },
215+ }
216+
217+ var sig secp256k1.Signature
218+ var pubkey , exp secp256k1.XY
219+ var msg secp256k1.Number
220+
221+ for i := range vs {
222+ sig .R .SetHex (vs [i ][0 ])
223+ sig .S .SetHex (vs [i ][1 ])
224+ msg .SetHex (vs [i ][2 ])
225+ rid , err := strconv .ParseInt (vs [i ][3 ], 10 , 32 )
226+ if err != nil {
227+ t .Fatalf ("failed in ParseInt: %s" , err .Error ())
228+ }
229+ exp .X .SetHex (vs [i ][4 ])
230+ exp .Y .SetHex (vs [i ][5 ])
231+
232+ var success bool
233+ success , err = recoverSig (& sig , & pubkey , & msg , int (rid ))
234+
235+ if success {
236+ t .Fatalf ("sigRecover should have failed" )
237+ } else if err == nil {
238+ t .Error ("sigRecover should have thrown an error" )
239+ }
240+ }
241+
242+ // Test nil case
243+ if _ , err := recoverSig (nil , & pubkey , & msg , 1 ); err == nil {
244+ t .Fatalf ("error was expected with nil sig" )
245+ }
246+ }
247+
248+ // TestVerifyMessageGetBin will test the method getBin()
249+ func TestVerifyMessageGetBin (t * testing.T ) {
250+ t .Parallel ()
251+
252+ var (
253+ // Testing private methods
254+ tests = []struct {
255+ inputNumber * secp256k1.Number
256+ inputLength int
257+ expectedError bool
258+ }{
259+ {nil , 1 , true },
260+ {& secp256k1.Number {Int : * big .NewInt (400 )}, 1 , true },
261+ {& secp256k1.Number {Int : * big .NewInt (1 )}, 1 , false },
262+ }
263+ )
264+
265+ // Run tests
266+ for _ , test := range tests {
267+ if _ , err := getBin (test .inputNumber , test .inputLength ); err != nil && ! test .expectedError {
268+ t .Errorf ("%s Failed: [%v] [%d] inputted and error not expected but got: %s" , t .Name (), test .inputNumber , test .inputLength , err .Error ())
269+ } else if err == nil && test .expectedError {
270+ t .Log (len (test .inputNumber .Bytes ()), test .inputLength )
271+ t .Errorf ("%s Failed: [%v] [%d] inputted and error was expected" , t .Name (), test .inputNumber , test .inputLength )
272+ }
273+ }
274+ }
0 commit comments