package vm
|
|
|
|
import (
|
|
"math/big"
|
|
)
|
|
|
|
// To256
|
|
//
|
|
// "cast" the big int to a 256 big int (i.e., limit to)
|
|
var tt256 = new(big.Int).Lsh(big.NewInt(1), 256)
|
|
var tt256m1 = new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(1))
|
|
var tt255 = new(big.Int).Lsh(big.NewInt(1), 255)
|
|
|
|
func U256(x *big.Int) *big.Int {
|
|
x.And(x, tt256m1)
|
|
return x
|
|
}
|
|
|
|
func S256(x *big.Int) *big.Int {
|
|
if x.Cmp(tt255) < 0 {
|
|
return x
|
|
} else {
|
|
// We don't want to modify x, ever
|
|
return new(big.Int).Sub(x, tt256)
|
|
}
|
|
}
|