rclone/vendor/storj.io/common/encryption/bits.go

31 lines
726 B
Go
Raw Normal View History

2020-05-11 20:57:46 +02:00
// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package encryption
// incrementBytes takes a byte slice buf and treats it like a little-endian
// encoded unsigned integer. it adds amount to it (which must be nonnegative)
// in place. if rollover happens (the most significant bytes don't fit
// anymore), truncated is true.
func incrementBytes(buf []byte, amount int64) (truncated bool, err error) {
if amount < 0 {
return false, Error.New("amount was negative")
}
idx := 0
for amount > 0 && idx < len(buf) {
var inc, prev byte
inc, amount = byte(amount), amount>>8
prev = buf[idx]
buf[idx] += inc
if buf[idx] < prev {
amount++
}
idx++
}
return amount != 0, nil
}