|
|
|
@ -35,8 +35,8 @@ import ( |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
secp256k1_N, _ = new(big.Int).SetString("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", 16) |
|
|
|
|
secp256k1_halfN = new(big.Int).Div(secp256k1_N, big.NewInt(2)) |
|
|
|
|
secp256k1N, _ = new(big.Int).SetString("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", 16) |
|
|
|
|
secp256k1halfN = new(big.Int).Div(secp256k1N, big.NewInt(2)) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// Keccak256 calculates and returns the Keccak256 hash of the input data.
|
|
|
|
@ -68,7 +68,7 @@ func Keccak512(data ...[]byte) []byte { |
|
|
|
|
return d.Sum(nil) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Creates an ethereum address given the bytes and the nonce
|
|
|
|
|
// CreateAddress creates an ethereum address given the bytes and the nonce
|
|
|
|
|
func CreateAddress(b common.Address, nonce uint64) common.Address { |
|
|
|
|
data, _ := rlp.EncodeToBytes([]interface{}{b, nonce}) |
|
|
|
|
return common.BytesToAddress(Keccak256(data)[12:]) |
|
|
|
@ -99,7 +99,7 @@ func toECDSA(d []byte, strict bool) (*ecdsa.PrivateKey, error) { |
|
|
|
|
priv.D = new(big.Int).SetBytes(d) |
|
|
|
|
|
|
|
|
|
// The priv.D must < N
|
|
|
|
|
if priv.D.Cmp(secp256k1_N) >= 0 { |
|
|
|
|
if priv.D.Cmp(secp256k1N) >= 0 { |
|
|
|
|
return nil, fmt.Errorf("invalid private key, >=N") |
|
|
|
|
} |
|
|
|
|
// The priv.D must not be zero or negative.
|
|
|
|
@ -184,11 +184,11 @@ func ValidateSignatureValues(v byte, r, s *big.Int, homestead bool) bool { |
|
|
|
|
} |
|
|
|
|
// reject upper range of s values (ECDSA malleability)
|
|
|
|
|
// see discussion in secp256k1/libsecp256k1/include/secp256k1.h
|
|
|
|
|
if homestead && s.Cmp(secp256k1_halfN) > 0 { |
|
|
|
|
if homestead && s.Cmp(secp256k1halfN) > 0 { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
// Frontier: allow s to be in full N range
|
|
|
|
|
return r.Cmp(secp256k1_N) < 0 && s.Cmp(secp256k1_N) < 0 && (v == 0 || v == 1) |
|
|
|
|
return r.Cmp(secp256k1N) < 0 && s.Cmp(secp256k1N) < 0 && (v == 0 || v == 1) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func PubkeyToAddress(p ecdsa.PublicKey) common.Address { |
|
|
|
|