@@ -3,10 +3,12 @@ package safelock
3
3
import (
4
4
"bytes"
5
5
"context"
6
+ "fmt"
6
7
"io"
7
8
"strconv"
8
9
"strings"
9
10
11
+ "github.com/mrf345/safelock-cli/slErrs"
10
12
"github.com/mrf345/safelock-cli/utils"
11
13
)
12
14
@@ -53,16 +55,23 @@ func (sr *safelockReader) ReadHeader() (err error) {
53
55
headerBytes := make ([]byte , sr .headerSize )
54
56
55
57
if _ , err = sr .reader .Seek (sr .diffSize (), io .SeekStart ); err != nil {
58
+ err = fmt .Errorf ("can't seek header > %w" , err )
56
59
return sr .handleErr (err )
57
60
}
58
61
59
62
if _ , err = sr .reader .Read (headerBytes ); err != nil {
63
+ err = fmt .Errorf ("can't read header > %w" , err )
60
64
return sr .handleErr (err )
61
65
}
62
66
63
67
header := string (bytes .Trim (headerBytes , "\x00 " )[:])
64
68
sr .blocks = strings .Split (header , ";" )[1 :]
65
69
70
+ if len (sr .blocks ) == 0 {
71
+ err = & slErrs.ErrFailedToAuthenticate {Msg : "missing header content" }
72
+ return
73
+ }
74
+
66
75
if _ , err = sr .reader .Seek (0 , io .SeekStart ); err != nil {
67
76
return sr .handleErr (err )
68
77
}
@@ -90,16 +99,19 @@ func (sr *safelockReader) Read(chunk []byte) (read int, err error) {
90
99
block , sr .blocks = sr .blocks [0 ], sr .blocks [1 :]
91
100
92
101
if blockSize , err = strconv .Atoi (block ); err != nil {
102
+ err = fmt .Errorf ("invalid header block size > %w" , err )
93
103
return 0 , sr .handleErr (err )
94
104
}
95
105
96
106
encrypted := make ([]byte , blockSize )
97
107
98
108
if read , err = sr .reader .Read (encrypted ); err != nil && err != io .EOF {
109
+ err = fmt .Errorf ("cant't read encrypted chunk > %w" , err )
99
110
return read , sr .handleErr (err )
100
111
}
101
112
102
113
if decrypted , err = decryptChunk (encrypted , sr .pwd , read , sr .config ); err != nil {
114
+ err = fmt .Errorf ("can't decrypt chunk > %w" , err )
103
115
return read , sr .handleErr (err )
104
116
}
105
117
0 commit comments