|
|
@@ -23,9 +23,11 @@ import (
|
|
|
"io/ioutil"
|
|
|
"math/big"
|
|
|
"os"
|
|
|
+ "reflect"
|
|
|
"testing"
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
|
+ "github.com/ethereum/go-ethereum/common/hexutil"
|
|
|
)
|
|
|
|
|
|
var testAddrHex = "970e8128ab834e8eac17ab8e3812f010678cf791"
|
|
|
@@ -56,6 +58,33 @@ func BenchmarkSha3(b *testing.B) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestUnmarshalPubkey(t *testing.T) {
|
|
|
+ key, err := UnmarshalPubkey(nil)
|
|
|
+ if err != errInvalidPubkey || key != nil {
|
|
|
+ t.Fatalf("expected error, got %v, %v", err, key)
|
|
|
+ }
|
|
|
+ key, err = UnmarshalPubkey([]byte{1, 2, 3})
|
|
|
+ if err != errInvalidPubkey || key != nil {
|
|
|
+ t.Fatalf("expected error, got %v, %v", err, key)
|
|
|
+ }
|
|
|
+
|
|
|
+ var (
|
|
|
+ enc, _ = hex.DecodeString("04760c4460e5336ac9bbd87952a3c7ec4363fc0a97bd31c86430806e287b437fd1b01abc6e1db640cf3106b520344af1d58b00b57823db3e1407cbc433e1b6d04d")
|
|
|
+ dec = &ecdsa.PublicKey{
|
|
|
+ Curve: S256(),
|
|
|
+ X: hexutil.MustDecodeBig("0x760c4460e5336ac9bbd87952a3c7ec4363fc0a97bd31c86430806e287b437fd1"),
|
|
|
+ Y: hexutil.MustDecodeBig("0xb01abc6e1db640cf3106b520344af1d58b00b57823db3e1407cbc433e1b6d04d"),
|
|
|
+ }
|
|
|
+ )
|
|
|
+ key, err = UnmarshalPubkey(enc)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("expected no error, got %v", err)
|
|
|
+ }
|
|
|
+ if !reflect.DeepEqual(key, dec) {
|
|
|
+ t.Fatal("wrong result")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func TestSign(t *testing.T) {
|
|
|
key, _ := HexToECDSA(testPrivHex)
|
|
|
addr := common.HexToAddress(testAddrHex)
|
|
|
@@ -69,7 +98,7 @@ func TestSign(t *testing.T) {
|
|
|
if err != nil {
|
|
|
t.Errorf("ECRecover error: %s", err)
|
|
|
}
|
|
|
- pubKey := ToECDSAPub(recoveredPub)
|
|
|
+ pubKey, _ := UnmarshalPubkey(recoveredPub)
|
|
|
recoveredAddr := PubkeyToAddress(*pubKey)
|
|
|
if addr != recoveredAddr {
|
|
|
t.Errorf("Address mismatch: want: %x have: %x", addr, recoveredAddr)
|