Skip to content

Commit 9daf154

Browse files
authored
Merge pull request #13 from mrf345/testing
Add better error messages and new test case
2 parents 5ba765d + 8351b39 commit 9daf154

File tree

6 files changed

+40
-5
lines changed

6 files changed

+40
-5
lines changed

benchmark/bench_and_plot.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ def decrypt():
7777
exit(err)
7878

7979
os.chdir(os.path.expanduser("~"))
80-
# encrypt()
81-
# decrypt()
80+
encrypt()
81+
decrypt()
8282
os.chdir(root)
8383
plt.margins(3.5)
8484

cmd/root.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var rootCmd = &cobra.Command{
1616
Use: "safelock-cli",
1717
Short: "Simple tool to encrypt/decrypt files with AES encryption",
1818
Long: "Simple command-line tool to encrypt and decrypt files with AES encryption",
19-
Version: "0.4.0",
19+
Version: "0.4.1",
2020
CompletionOptions: cobra.CompletionOptions{
2121
DisableDefaultCmd: true,
2222
},

safelock/core.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (ag *asyncGcm) load() {
5555
}
5656

5757
if gcm, err = getGCM(ag.pwd, nonce, ag.config); err != nil {
58-
ag.errs <- fmt.Errorf("failed to create new GCM > %w", err)
58+
ag.errs <- err
5959
return
6060
}
6161

@@ -100,7 +100,6 @@ func decryptChunk(chunk []byte, pwd string, limit int, config EncryptionConfig)
100100
nonce := chunk[limit-(config.NonceLength) : limit]
101101

102102
if gcm, err = getGCM(pwd, nonce, config); err != nil {
103-
err = fmt.Errorf("failed to create new GCM > %w", err)
104103
return
105104
}
106105

safelock/decrypt_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,28 @@ func TestDecryptWithInvalidOutputPath(t *testing.T) {
2727
assert.True(slErrs.Is[*slErrs.ErrInvalidOutputPath](err))
2828
}
2929

30+
func TestDecryptWithFaultyEncryptedFile(t *testing.T) {
31+
assert := assert.New(t)
32+
password := "testing123456"
33+
sl := GetQuietSafelock()
34+
inputFile, _ := os.CreateTemp("", "input_file")
35+
outputPath, _ := os.MkdirTemp("", "output_dir")
36+
data := make([]byte, sl.HeaderRatio)
37+
_, wErr := inputFile.Write(append(
38+
data,
39+
[]byte("faulty encryption file")...,
40+
))
41+
42+
err := sl.Decrypt(context.TODO(), inputFile, outputPath, password)
43+
44+
assert.Nil(wErr)
45+
assert.NotNil(err)
46+
assert.True(slErrs.Is[*slErrs.ErrFailedToAuthenticate](err))
47+
48+
os.Remove(inputFile.Name())
49+
os.RemoveAll(outputPath)
50+
}
51+
3052
func TestDecryptFileWithTimeout(t *testing.T) {
3153
assert := assert.New(t)
3254
password := "testing123456"

safelock/reader.go

+12
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package safelock
33
import (
44
"bytes"
55
"context"
6+
"fmt"
67
"io"
78
"strconv"
89
"strings"
910

11+
"github.com/mrf345/safelock-cli/slErrs"
1012
"github.com/mrf345/safelock-cli/utils"
1113
)
1214

@@ -53,16 +55,23 @@ func (sr *safelockReader) ReadHeader() (err error) {
5355
headerBytes := make([]byte, sr.headerSize)
5456

5557
if _, err = sr.reader.Seek(sr.diffSize(), io.SeekStart); err != nil {
58+
err = fmt.Errorf("can't seek header > %w", err)
5659
return sr.handleErr(err)
5760
}
5861

5962
if _, err = sr.reader.Read(headerBytes); err != nil {
63+
err = fmt.Errorf("can't read header > %w", err)
6064
return sr.handleErr(err)
6165
}
6266

6367
header := string(bytes.Trim(headerBytes, "\x00")[:])
6468
sr.blocks = strings.Split(header, ";")[1:]
6569

70+
if len(sr.blocks) == 0 {
71+
err = &slErrs.ErrFailedToAuthenticate{Msg: "missing header content"}
72+
return
73+
}
74+
6675
if _, err = sr.reader.Seek(0, io.SeekStart); err != nil {
6776
return sr.handleErr(err)
6877
}
@@ -90,16 +99,19 @@ func (sr *safelockReader) Read(chunk []byte) (read int, err error) {
9099
block, sr.blocks = sr.blocks[0], sr.blocks[1:]
91100

92101
if blockSize, err = strconv.Atoi(block); err != nil {
102+
err = fmt.Errorf("invalid header block size > %w", err)
93103
return 0, sr.handleErr(err)
94104
}
95105

96106
encrypted := make([]byte, blockSize)
97107

98108
if read, err = sr.reader.Read(encrypted); err != nil && err != io.EOF {
109+
err = fmt.Errorf("cant't read encrypted chunk > %w", err)
99110
return read, sr.handleErr(err)
100111
}
101112

102113
if decrypted, err = decryptChunk(encrypted, sr.pwd, read, sr.config); err != nil {
114+
err = fmt.Errorf("can't decrypt chunk > %w", err)
103115
return read, sr.handleErr(err)
104116
}
105117

safelock/writer.go

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ func (sw *safelockWriter) Write(chunk []byte) (written int, err error) {
4545
encrypted := sw.asyncGcm.encryptChunk(chunk)
4646

4747
if written, err = sw.writer.Write(encrypted); err != nil {
48+
err = fmt.Errorf("can't write encrypted chunk > %w", err)
4849
return written, sw.handleErr(err)
4950
}
5051

@@ -67,6 +68,7 @@ func (sw *safelockWriter) WriteHeader() (err error) {
6768
headerBytes = append([]byte(header), headerBytes[len(header):]...)
6869

6970
if _, err = sw.writer.Write(headerBytes); err != nil {
71+
err = fmt.Errorf("can't write header bytes > %w", err)
7072
return sw.handleErr(err)
7173
}
7274

0 commit comments

Comments
 (0)