From b716e6e1b48b1b46fe23cc1f0efafb8239fe3824 Mon Sep 17 00:00:00 2001 From: Ruslan Date: Sat, 20 May 2023 15:43:40 +0400 Subject: [PATCH] Fix garbage at the end of decrypted file & optimize decryption --- pkg/decrypt.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/decrypt.go b/pkg/decrypt.go index 21e70ad..f9b3b84 100644 --- a/pkg/decrypt.go +++ b/pkg/decrypt.go @@ -16,21 +16,22 @@ func (d *Decrypt) Decrypt(reader io.Reader, writer io.Writer) error { return fmt.Errorf("key must be 32 bytes long") } blockNumber := 0 + + nonceBytes := make([]byte, 24) + block := make([]byte, 256) + outBlock := make([]byte, 256) for { - nonceBytes := make([]byte, 24) binary.LittleEndian.PutUint64(nonceBytes, uint64(blockNumber)) - block := make([]byte, 256) - _, err := reader.Read(block) + blockBytes, err := reader.Read(block) if err == io.EOF { return nil } if err != nil { return fmt.Errorf("unable to read file: %v", err) } - outBlock := make([]byte, 256) salsa20.XORKeyStream(outBlock, block, nonceBytes, (*[32]byte)(d.Key)) blockNumber++ - _, err = writer.Write(outBlock) + _, err = writer.Write(outBlock[0:blockBytes]) if err != nil { return fmt.Errorf("unable to write: %v", err) }