type MTHEvent struct {
Type MTHEventType
- Level int
- Ctr int
+ Level int64
+ Ctr int64
Hsh []byte
}
type MTH interface {
hash.Hash
- PrependFrom(r io.Reader) (int, error)
+ PrependFrom(r io.Reader) (int64, error)
SetPktName(n string)
PrependSize() int64
Events() chan MTHEvent
if size == 0 {
return &mth
}
- prepends := int(offset / MTHBlockSize)
- skip := MTHBlockSize - (offset - int64(prepends)*MTHBlockSize)
+ prepends := offset / MTHBlockSize
+ skip := MTHBlockSize - (offset - prepends*MTHBlockSize)
if skip == MTHBlockSize {
skip = 0
} else if skip > 0 {
prepends++
}
- prependSize := int64(prepends * MTHBlockSize)
+ prependSize := prepends * MTHBlockSize
if prependSize > size {
prependSize = size
}
if mth.events != nil {
mth.events <- MTHEvent{
MTHEventAppend,
- 0, len(mth.hashes) - 1,
+ 0, int64(len(mth.hashes) - 1),
mth.hashes[len(mth.hashes)-1][:],
}
}
return n, err
}
-func (mth *MTHFat) PrependFrom(r io.Reader) (int, error) {
+func (mth *MTHFat) PrependFrom(r io.Reader) (int64, error) {
if mth.finished {
return 0, errors.New("already Sum()ed")
}
var err error
buf := make([]byte, MTHBlockSize)
- var i, n, read int
+ var n int
+ var i, read int64
fullsize := mth.prependSize
les := LEs{{"Pkt", mth.pktName}, {"FullSize", fullsize}, {"Size", 0}}
for mth.prependSize >= MTHBlockSize {
n, err = io.ReadFull(r, buf)
- read += n
+ read += int64(n)
mth.prependSize -= MTHBlockSize
if err != nil {
return read, err
mth.events <- MTHEvent{MTHEventPrepend, 0, i, mth.hashes[i][:]}
}
if mth.pktName != "" {
- les[len(les)-1].V = int64(read)
+ les[len(les)-1].V = read
Progress("check", les)
}
i++
}
if mth.prependSize > 0 {
n, err = io.ReadFull(r, buf[:mth.prependSize])
- read += n
+ read += int64(n)
if err != nil {
return read, err
}
if mth.events != nil {
mth.events <- MTHEvent{
MTHEventAppend,
- 0, len(mth.hashes) - 1,
+ 0, int64(len(mth.hashes) - 1),
mth.hashes[len(mth.hashes)-1][:],
}
}
}
}
mth.hasher = blake3.New(MTHSize, MTHNodeKey[:])
- level := 1
+ level := int64(1)
for len(mth.hashes) != 1 {
hashesUp := make([][MTHSize]byte, 0, 1+len(mth.hashes)/2)
pairs := (len(mth.hashes) / 2) * 2
if mth.events != nil {
mth.events <- MTHEvent{
MTHEventFold,
- level, len(hashesUp) - 1,
+ level, int64(len(hashesUp) - 1),
hashesUp[len(hashesUp)-1][:],
}
}
if mth.events != nil {
mth.events <- MTHEvent{
MTHEventAppend,
- level, len(hashesUp) - 1,
+ level, int64(len(hashesUp) - 1),
hashesUp[len(hashesUp)-1][:],
}
}
}
type MTHSeqEnt struct {
- l int
+ l int64
h [MTHSize]byte
}
hashes []MTHSeqEnt
buf *bytes.Buffer
events chan MTHEvent
- ctrs []int
+ ctrs []int64
finished bool
}
hasherLeaf: blake3.New(MTHSize, MTHLeafKey[:]),
hasherNode: blake3.New(MTHSize, MTHNodeKey[:]),
buf: bytes.NewBuffer(make([]byte, 0, 2*MTHBlockSize)),
- ctrs: make([]int, 1, 2),
+ ctrs: make([]int64, 1, 2),
}
return &mth
}
func (mth *MTHSeq) BlockSize() int { return MTHBlockSize }
-func (mth *MTHSeq) PrependFrom(r io.Reader) (int, error) {
+func (mth *MTHSeq) PrependFrom(r io.Reader) (int64, error) {
panic("must not reach that code")
}
mth.ctrs[0]++
}
-func (mth *MTHSeq) incr(l int) {
- if len(mth.ctrs) <= l {
+func (mth *MTHSeq) incr(l int64) {
+ if int64(len(mth.ctrs)) <= l {
mth.ctrs = append(mth.ctrs, 0)
} else {
mth.ctrs[l]++
doEncrypt bool,
r io.Reader,
w io.Writer,
-) (int, error) {
+) (int64, error) {
ciphCtr := nonce[len(nonce)-8:]
buf := make([]byte, EncBlkSize+aead.Overhead())
var toRead []byte
var toWrite []byte
var n int
- var readBytes int
+ var readBytes int64
var err error
if doEncrypt {
toRead = buf[:EncBlkSize]
break
}
if err != io.ErrUnexpectedEOF {
- return readBytes + n, err
+ return readBytes + int64(n), err
}
}
- readBytes += n
+ readBytes += int64(n)
ctrIncr(ciphCtr)
if doEncrypt {
toWrite = aead.Seal(buf[:0], nonce, buf[:n], ad)
}
nonce := make([]byte, aead.NonceSize())
- fullSize := pktBuf.Len() + int(size)
+ fullSize := int64(pktBuf.Len()) + size
sizeBuf := make([]byte, 8+aead.Overhead())
- binary.BigEndian.PutUint64(sizeBuf, uint64(sizeWithTags(int64(fullSize))))
+ binary.BigEndian.PutUint64(sizeBuf, uint64(sizeWithTags(fullSize)))
if _, err = out.Write(aead.Seal(sizeBuf[:0], nonce, sizeBuf[:8], ad[:])); err != nil {
return nil, err
}
lr := io.LimitedReader{R: data, N: size}
written, err := aeadProcess(aead, nonce, ad[:], false, &lr, out)
if err != nil {
- return sharedKey[:], their, int64(written), err
+ return sharedKey[:], their, written, err
}
- if written != int(size) {
- return sharedKey[:], their, int64(written), io.ErrUnexpectedEOF
+ if written != size {
+ return sharedKey[:], their, written, io.ErrUnexpectedEOF
}
return sharedKey[:], their, size, nil
}