cache read performance improvements

This commit is contained in:
ston1th 2022-05-19 01:29:23 +02:00
commit f69d3149f3
14 changed files with 140 additions and 71 deletions

View file

@ -10,7 +10,11 @@ import (
type cryptoReader interface {
io.Reader
io.ReaderAt
}
type nonce struct {
N [NonceSize]byte
C int
}
type reader struct {
@ -21,9 +25,10 @@ type reader struct {
buf [FullSize]byte
off int64
err error
nonce [NonceSize]byte
cn int64
err error
nonce [NonceSize]byte
cn int64
outBuf []byte
}
func newReader(key []byte, src cryptoReader) (*reader, error) {
@ -32,9 +37,10 @@ func newReader(key []byte, src cryptoReader) (*reader, error) {
return nil, err
}
return &reader{
a: aead,
src: src,
cn: -1,
a: aead,
src: src,
cn: -1,
outBuf: make([]byte, 0, FullSize),
}, nil
}
@ -91,19 +97,24 @@ func (r *reader) readChunk() (last bool, err error) {
return false, err
}
outBuf := make([]byte, 0, ChunkSize)
out, err := r.a.Open(outBuf, r.nonce[:], in, nil)
//outBuf := make([]byte, 0, ChunkSize)
out, err := r.a.Open(r.outBuf, r.nonce[:], in, nil)
if err != nil && !last {
// Check if this was a full-length final chunk.
last = true
setLastChunkFlag(&r.nonce)
out, err = r.a.Open(outBuf, r.nonce[:], in, nil)
out, err = r.a.Open(r.outBuf, r.nonce[:], in, nil)
}
if err != nil {
return false, errors.New("failed to decrypt and authenticate payload chunk")
}
incNonce(&r.nonce)
r.unread = r.buf[:copy(r.buf[:], out)]
//r.unread = r.buf[:copy(r.buf[:], out)]
size := FullSize
if len(out) < FullSize {
size = len(out)
}
r.unread = out[:size]
return last, nil
}