|
|
@ -68,9 +68,6 @@ func Keccak512(data ...[]byte) []byte { |
|
|
|
return d.Sum(nil) |
|
|
|
return d.Sum(nil) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Deprecated: For backward compatibility as other packages depend on these
|
|
|
|
|
|
|
|
func Sha3Hash(data ...[]byte) common.Hash { return Keccak256Hash(data...) } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Creates an ethereum address given the bytes and the nonce
|
|
|
|
// Creates an ethereum address given the bytes and the nonce
|
|
|
|
func CreateAddress(b common.Address, nonce uint64) common.Address { |
|
|
|
func CreateAddress(b common.Address, nonce uint64) common.Address { |
|
|
|
data, _ := rlp.EncodeToBytes([]interface{}{b, nonce}) |
|
|
|
data, _ := rlp.EncodeToBytes([]interface{}{b, nonce}) |
|
|
@ -79,9 +76,24 @@ func CreateAddress(b common.Address, nonce uint64) common.Address { |
|
|
|
|
|
|
|
|
|
|
|
// ToECDSA creates a private key with the given D value.
|
|
|
|
// ToECDSA creates a private key with the given D value.
|
|
|
|
func ToECDSA(d []byte) (*ecdsa.PrivateKey, error) { |
|
|
|
func ToECDSA(d []byte) (*ecdsa.PrivateKey, error) { |
|
|
|
|
|
|
|
return toECDSA(d, true) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ToECDSAUnsafe blidly converts a binary blob to a private key. It should almost
|
|
|
|
|
|
|
|
// never be used unless you are sure the input is valid and want to avoid hitting
|
|
|
|
|
|
|
|
// errors due to bad origin encoding (0 prefixes cut off).
|
|
|
|
|
|
|
|
func ToECDSAUnsafe(d []byte) *ecdsa.PrivateKey { |
|
|
|
|
|
|
|
priv, _ := toECDSA(d, false) |
|
|
|
|
|
|
|
return priv |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// toECDSA creates a private key with the given D value. The strict parameter
|
|
|
|
|
|
|
|
// controls whether the key's length should be enforced at the curve size or
|
|
|
|
|
|
|
|
// it can also accept legacy encodings (0 prefixes).
|
|
|
|
|
|
|
|
func toECDSA(d []byte, strict bool) (*ecdsa.PrivateKey, error) { |
|
|
|
priv := new(ecdsa.PrivateKey) |
|
|
|
priv := new(ecdsa.PrivateKey) |
|
|
|
priv.PublicKey.Curve = S256() |
|
|
|
priv.PublicKey.Curve = S256() |
|
|
|
if 8*len(d) != priv.Params().BitSize { |
|
|
|
if strict && 8*len(d) != priv.Params().BitSize { |
|
|
|
return nil, fmt.Errorf("invalid length, need %d bits", priv.Params().BitSize) |
|
|
|
return nil, fmt.Errorf("invalid length, need %d bits", priv.Params().BitSize) |
|
|
|
} |
|
|
|
} |
|
|
|
priv.D = new(big.Int).SetBytes(d) |
|
|
|
priv.D = new(big.Int).SetBytes(d) |
|
|
@ -89,11 +101,12 @@ func ToECDSA(d []byte) (*ecdsa.PrivateKey, error) { |
|
|
|
return priv, nil |
|
|
|
return priv, nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func FromECDSA(prv *ecdsa.PrivateKey) []byte { |
|
|
|
// FromECDSA exports a private key into a binary dump.
|
|
|
|
if prv == nil { |
|
|
|
func FromECDSA(priv *ecdsa.PrivateKey) []byte { |
|
|
|
|
|
|
|
if priv == nil { |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
return math.PaddedBigBytes(prv.D, 32) |
|
|
|
return math.PaddedBigBytes(priv.D, priv.Params().BitSize/8) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func ToECDSAPub(pub []byte) *ecdsa.PublicKey { |
|
|
|
func ToECDSAPub(pub []byte) *ecdsa.PublicKey { |
|
|
@ -121,7 +134,6 @@ func HexToECDSA(hexkey string) (*ecdsa.PrivateKey, error) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// LoadECDSA loads a secp256k1 private key from the given file.
|
|
|
|
// LoadECDSA loads a secp256k1 private key from the given file.
|
|
|
|
// The key data is expected to be hex-encoded.
|
|
|
|
|
|
|
|
func LoadECDSA(file string) (*ecdsa.PrivateKey, error) { |
|
|
|
func LoadECDSA(file string) (*ecdsa.PrivateKey, error) { |
|
|
|
buf := make([]byte, 64) |
|
|
|
buf := make([]byte, 64) |
|
|
|
fd, err := os.Open(file) |
|
|
|
fd, err := os.Open(file) |
|
|
|