diff options
Diffstat (limited to 'crypto/crypto_test.go')
-rw-r--r-- | crypto/crypto_test.go | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/crypto/crypto_test.go b/crypto/crypto_test.go index 58b29da49..80c9a9aae 100644 --- a/crypto/crypto_test.go +++ b/crypto/crypto_test.go @@ -80,20 +80,28 @@ func Test0Key(t *testing.T) { } } -func TestSign(t *testing.T) { +func testSign(signfn func([]byte, *ecdsa.PrivateKey) ([]byte, error), t *testing.T) { key, _ := HexToECDSA(testPrivHex) addr := common.HexToAddress(testAddrHex) msg := Keccak256([]byte("foo")) - sig, err := Sign(msg, key) + sig, err := signfn(msg, key) if err != nil { t.Errorf("Sign error: %s", err) } + + // signfn can return a recover id of either [0,1] or [27,28]. + // In the latter case its an Ethereum signature, adjust recover id. + if sig[64] == 27 || sig[64] == 28 { + sig[64] -= 27 + } + recoveredPub, err := Ecrecover(msg, sig) if err != nil { t.Errorf("ECRecover error: %s", err) } - recoveredAddr := PubkeyToAddress(*ToECDSAPub(recoveredPub)) + pubKey := ToECDSAPub(recoveredPub) + recoveredAddr := PubkeyToAddress(*pubKey) if addr != recoveredAddr { t.Errorf("Address mismatch: want: %x have: %x", addr, recoveredAddr) } @@ -107,21 +115,36 @@ func TestSign(t *testing.T) { if addr != recoveredAddr2 { t.Errorf("Address mismatch: want: %x have: %x", addr, recoveredAddr2) } +} +func TestSign(t *testing.T) { + testSign(Sign, t) } -func TestInvalidSign(t *testing.T) { - _, err := Sign(make([]byte, 1), nil) +func TestSignEthereum(t *testing.T) { + testSign(SignEthereum, t) +} + +func testInvalidSign(signfn func([]byte, *ecdsa.PrivateKey) ([]byte, error), t *testing.T) { + _, err := signfn(make([]byte, 1), nil) if err == nil { t.Errorf("expected sign with hash 1 byte to error") } - _, err = Sign(make([]byte, 33), nil) + _, err = signfn(make([]byte, 33), nil) if err == nil { t.Errorf("expected sign with hash 33 byte to error") } } +func TestInvalidSign(t *testing.T) { + testInvalidSign(Sign, t) +} + +func TestInvalidSignEthereum(t *testing.T) { + testInvalidSign(SignEthereum, t) +} + func TestNewContractAddress(t *testing.T) { key, _ := HexToECDSA(testPrivHex) addr := common.HexToAddress(testAddrHex) |