bigint: don't allocate in ToPreallocatedBytes() for negative numbers

In-place modifications are somewhat dangerous, but yet another allocation is
quite costly.
This commit is contained in:
Roman Khimov 2022-05-31 12:45:34 +03:00
parent 3509523baf
commit 3945e81857

View file

@ -112,18 +112,16 @@ func ToPreallocatedBytes(n *big.Int, data []byte) []byte {
return data return data
} }
var ws []big.Word if sign < 0 {
if sign == 1 { n.Add(n, bigOne)
ws = n.Bits() defer func() { n.Sub(n, bigOne) }()
} else { if n.Sign() == 0 { // n == -1
n1 := new(big.Int).Add(n, bigOne)
if n1.Sign() == 0 { // n == -1
return append(data, 0xFF) return append(data, 0xFF)
} }
ws = n1.Bits()
} }
var ws = n.Bits()
lb := len(ws) * wordSizeBytes lb := len(ws) * wordSizeBytes
if c := cap(data); c < lb { if c := cap(data); c < lb {
data = make([]byte, lb, lb+1) data = make([]byte, lb, lb+1)