aboutsummaryrefslogtreecommitdiffstats
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/sym/dec.go33
1 files changed, 10 insertions, 23 deletions
diff --git a/internal/sym/dec.go b/internal/sym/dec.go
index 45c7409..93130a4 100644
--- a/internal/sym/dec.go
+++ b/internal/sym/dec.go
@@ -2,7 +2,6 @@ package sym
import (
"bufio"
- "bytes"
"encoding/base64"
"encoding/binary"
"errors"
@@ -13,27 +12,6 @@ import (
"strings"
)
-type lineReader struct {
- r *bufio.Reader
- line []byte
-}
-
-func (r *lineReader) Read(buf []byte) (int, error) {
- for len(r.line) == 0 {
- line, err := r.r.ReadBytes('\n')
- if len(line) == 0 {
- return 0, err
- }
- if bytes.HasPrefix(line, []byte("-")) {
- continue
- }
- r.line = bytes.TrimSuffix(line, []byte("\n"))
- }
- n := copy(buf, r.line)
- r.line = r.line[n:]
- return n, nil
-}
-
func decryptBinary(w io.Writer, r io.Reader, password string) error {
fileFormat := make([]byte, 4)
if _, err := io.ReadFull(r, fileFormat); err != nil {
@@ -68,7 +46,16 @@ func decrypt(w io.Writer, r io.Reader, password string) error {
if b[0] != '-' {
return errors.New("invalid input")
}
- return decryptBinary(w, base64.NewDecoder(base64.StdEncoding, &lineReader{r: bufReader}), password)
+ for {
+ _, err := bufReader.ReadBytes('\n')
+ if err != nil {
+ return err
+ }
+ if b, err := bufReader.Peek(1); err != nil || b[0] != '-' {
+ break
+ }
+ }
+ return decryptBinary(w, base64.NewDecoder(base64.StdEncoding, bufReader), password)
}
type decryptFlags struct {