package ethutil import ( "math/big" ) // Big pow // // Returns the power of two big integers func BigPow(a, b int) *big.Int { c := new(big.Int) c.Exp(big.NewInt(int64(a)), big.NewInt(int64(b)), big.NewInt(0)) return c } // Big // // Shortcut for new(big.Int).SetString(..., 0) func Big(num string) *big.Int { n := new(big.Int) n.SetString(num, 0) return n } // BigD // // Shortcut for new(big.Int).SetBytes(...) func BigD(data []byte) *big.Int { n := new(big.Int) n.SetBytes(data) return n } // To256 // // "cast" the big int to a 256 big int (i.e., limit to) var tt256 = new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(1)) func To256(x *big.Int) { x.And(x, tt256) if x.Cmp(new(big.Int)) < 0 { x.SetInt64(0) } } // Big to bytes // // Returns the bytes of a big integer with the size specified by **base** // Attempts to pad the byte array with zeros. func BigToBytes(num *big.Int, base int) []byte { ret := make([]byte, base/8) if len(num.Bytes()) > base/8 { return num.Bytes() } return append(ret[:len(ret)-len(num.Bytes())], num.Bytes()...) } // Big copy // // Creates a copy of the given big integer func BigCopy(src *big.Int) *big.Int { return new(big.Int).Set(src) } // Big max // // Returns the maximum size big integer func BigMax(x, y *big.Int) *big.Int { if x.Cmp(y) <= 0 { return y } return x } // Big min // // Returns the minimum size big integer func BigMin(x, y *big.Int) *big.Int { if x.Cmp(y) >= 0 { return y } return x }