Skip to content

Commit df3ee02

Browse files
committed
Buffer decrypted bytes more efficiently
1 parent 04cfaf2 commit df3ee02

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

openpgp/packet/aead_crypter.go

+10-13
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
package packet
44

55
import (
6-
"bytes"
76
"crypto/cipher"
87
"encoding/binary"
98
"io"
@@ -59,20 +58,22 @@ func (wo *aeadCrypter) incrementIndex() error {
5958
// aeadDecrypter reads and decrypts bytes. It buffers extra decrypted bytes when
6059
// necessary, similar to aeadEncrypter.
6160
type aeadDecrypter struct {
62-
aeadCrypter // Embedded ciphertext opener
63-
reader io.Reader // 'reader' is a partialLengthReader
61+
aeadCrypter // Embedded ciphertext opener
62+
reader io.Reader // 'reader' is a partialLengthReader
6463
chunkBytes []byte
65-
peekedBytes []byte // Used to detect last chunk
66-
buffer bytes.Buffer // Buffered decrypted bytes
64+
peekedBytes []byte // Used to detect last chunk
65+
buffer []byte // Buffered decrypted bytes
6766
}
6867

6968
// Read decrypts bytes and reads them into dst. It decrypts when necessary and
7069
// buffers extra decrypted bytes. It returns the number of bytes copied into dst
7170
// and an error.
7271
func (ar *aeadDecrypter) Read(dst []byte) (n int, err error) {
7372
// Return buffered plaintext bytes from previous calls
74-
if ar.buffer.Len() > 0 {
75-
return ar.buffer.Read(dst)
73+
if len(ar.buffer) > 0 {
74+
n = copy(dst, ar.buffer)
75+
ar.buffer = ar.buffer[n:]
76+
return
7677
}
7778

7879
// Read a chunk
@@ -92,12 +93,8 @@ func (ar *aeadDecrypter) Read(dst []byte) (n int, err error) {
9293
}
9394

9495
// Return decrypted bytes, buffering if necessary
95-
if len(dst) < len(decrypted) {
96-
n = copy(dst, decrypted[:len(dst)])
97-
ar.buffer.Write(decrypted[len(dst):])
98-
} else {
99-
n = copy(dst, decrypted)
100-
}
96+
n = copy(dst, decrypted)
97+
ar.buffer = decrypted[n:]
10198
return
10299
}
103100

0 commit comments

Comments
 (0)