diff --git a/pkg/encoding/bigint/bigint.go b/pkg/encoding/bigint/bigint.go index 41f3c599e..26a6849f8 100644 --- a/pkg/encoding/bigint/bigint.go +++ b/pkg/encoding/bigint/bigint.go @@ -112,18 +112,16 @@ func ToPreallocatedBytes(n *big.Int, data []byte) []byte { return data } - var ws []big.Word - if sign == 1 { - ws = n.Bits() - } else { - n1 := new(big.Int).Add(n, bigOne) - if n1.Sign() == 0 { // n == -1 + if sign < 0 { + n.Add(n, bigOne) + defer func() { n.Sub(n, bigOne) }() + if n.Sign() == 0 { // n == -1 return append(data, 0xFF) } - - ws = n1.Bits() } + var ws = n.Bits() + lb := len(ws) * wordSizeBytes if c := cap(data); c < lb { data = make([]byte, lb, lb+1)