Fix garbage at the end of decrypted file & optimize decryption

This commit is contained in:
Ruslan
2023-05-20 15:43:40 +04:00
parent 9654ab011d
commit b716e6e1b4

View File

@@ -16,21 +16,22 @@ func (d *Decrypt) Decrypt(reader io.Reader, writer io.Writer) error {
return fmt.Errorf("key must be 32 bytes long") return fmt.Errorf("key must be 32 bytes long")
} }
blockNumber := 0 blockNumber := 0
nonceBytes := make([]byte, 24)
block := make([]byte, 256)
outBlock := make([]byte, 256)
for { for {
nonceBytes := make([]byte, 24)
binary.LittleEndian.PutUint64(nonceBytes, uint64(blockNumber)) binary.LittleEndian.PutUint64(nonceBytes, uint64(blockNumber))
block := make([]byte, 256) blockBytes, err := reader.Read(block)
_, err := reader.Read(block)
if err == io.EOF { if err == io.EOF {
return nil return nil
} }
if err != nil { if err != nil {
return fmt.Errorf("unable to read file: %v", err) return fmt.Errorf("unable to read file: %v", err)
} }
outBlock := make([]byte, 256)
salsa20.XORKeyStream(outBlock, block, nonceBytes, (*[32]byte)(d.Key)) salsa20.XORKeyStream(outBlock, block, nonceBytes, (*[32]byte)(d.Key))
blockNumber++ blockNumber++
_, err = writer.Write(outBlock) _, err = writer.Write(outBlock[0:blockBytes])
if err != nil { if err != nil {
return fmt.Errorf("unable to write: %v", err) return fmt.Errorf("unable to write: %v", err)
} }