core/evm: avoid copying memory for input in calls (#20177)
* core/evm, contracts: avoid copying memory for input in calls + make ecrecover not modify input buffer * core/vm: optimize mstore a bit * core/vm: change Get -> GetCopy in vm memory access
This commit is contained in:
committed by
Péter Szilágyi
parent
7a6d5d0cce
commit
b566cfdffd
@ -106,8 +106,13 @@ func (c *ecrecover) Run(input []byte) ([]byte, error) {
|
||||
if !allZero(input[32:63]) || !crypto.ValidateSignatureValues(v, r, s, false) {
|
||||
return nil, nil
|
||||
}
|
||||
// We must make sure not to modify the 'input', so placing the 'v' along with
|
||||
// the signature needs to be done on a new allocation
|
||||
sig := make([]byte, 65)
|
||||
copy(sig, input[64:128])
|
||||
sig[64] = v
|
||||
// v needs to be at the end for libsecp256k1
|
||||
pubKey, err := crypto.Ecrecover(input[:32], append(input[64:128], v))
|
||||
pubKey, err := crypto.Ecrecover(input[:32], sig)
|
||||
// make sure the public key is a valid one
|
||||
if err != nil {
|
||||
return nil, nil
|
||||
|
Reference in New Issue
Block a user