core/vm: remove shift

This commit is contained in:
Felix Lange 2025-08-15 15:41:46 +02:00
parent ae8d4d4629
commit c8d18bf9c3

View file

@ -500,12 +500,13 @@ func (c *bigModExp) RequiredGas(input []byte) uint64 {
func (c *bigModExp) Run(input []byte) ([]byte, error) {
var (
baseLenBig = new(big.Int).SetBytes(getData(input, 0, 32))
expLenBig = new(big.Int).SetBytes(getData(input, 32, 32))
modLenBig = new(big.Int).SetBytes(getData(input, 64, 32))
baseLen = baseLenBig.Uint64()
expLen = expLenBig.Uint64()
modLen = modLenBig.Uint64()
baseLenBig = new(big.Int).SetBytes(getData(input, 0, 32))
expLenBig = new(big.Int).SetBytes(getData(input, 32, 32))
modLenBig = new(big.Int).SetBytes(getData(input, 64, 32))
baseLen = baseLenBig.Uint64()
expLen = expLenBig.Uint64()
modLen = modLenBig.Uint64()
inputLenOverflow = max(baseLenBig.BitLen(), expLenBig.BitLen(), modLenBig.BitLen()) > 64
)
if len(input) > 96 {
input = input[96:]
@ -513,12 +514,8 @@ func (c *bigModExp) Run(input []byte) ([]byte, error) {
input = input[:0]
}
inputLensHighBitsSet := baseLenBig.Rsh(baseLenBig, 64).Cmp(common.Big0) != 0 ||
expLenBig.Rsh(expLenBig, 64).Cmp(common.Big0) != 0 ||
modLenBig.Rsh(modLenBig, 64).Cmp(common.Big0) != 0
// enforce size cap for inputs
if c.eip7823 && (max(baseLen, expLen, modLen) > 1024 || inputLensHighBitsSet) {
if c.eip7823 && (inputLenOverflow || max(baseLen, expLen, modLen) > 1024) {
return nil, errors.New("one or more of base/exponent/modulus length exceeded 1024 bytes")
}
// Handle a special case when both the base and mod length is zero