Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,17 @@ import (

type CorruptionError struct {
msg string
err error
}

func (e CorruptionError) Error() string {
return "Triplesec corruption: " + e.msg
}

func (e CorruptionError) Unwrap() error {
return e.err
}

type VersionError struct {
v Version
}
Expand Down
10 changes: 5 additions & 5 deletions triplesec.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ func encryptData(plain, keys []byte, rng RandomnessGenerator, versionParams Vers
ivOffset -= len(aesIV)

if ivOffset != 0 {
return nil, CorruptionError{"something went terribly wrong during encryption: ivOffset final value non-zero"}
return nil, CorruptionError{msg: "something went terribly wrong during encryption: ivOffset final value non-zero"}
}

return res, nil
Expand Down Expand Up @@ -344,20 +344,20 @@ func generateMACs(data, keys []byte, versionParams VersionParams) []byte {
// authentication fails or on memory failures.
func (c *Cipher) Decrypt(src []byte) (res []byte, err error) {
if len(src) < len(MagicBytes)+VersionBytesLen {
err = CorruptionError{"decryption underrun"}
err = CorruptionError{msg: "decryption underrun"}
return
}

if !bytes.Equal(src[:len(MagicBytes)], MagicBytes[0:]) {
err = CorruptionError{"wrong magic bytes"}
err = CorruptionError{msg: "wrong magic bytes"}
return
}

vB := bytes.NewBuffer(src[len(MagicBytes) : len(MagicBytes)+VersionBytesLen])
var version Version
err = binary.Read(vB, binary.BigEndian, &version)
if err != nil {
err = CorruptionError{err.Error()}
err = CorruptionError{msg: err.Error(), err: err}
return
}

Expand Down Expand Up @@ -442,7 +442,7 @@ func decryptData(dst, data, keys []byte, versionParams VersionParams) error {
salsa20.XORKeyStream(dst, buffer[ivOffset:], iv, keyArray)

if len(buffer[ivOffset:]) != len(data)-versionParams.TotalIVLen {
return CorruptionError{"something went terribly wrong during decryption: buffer size is wrong"}
return CorruptionError{msg: "something went terribly wrong during decryption: buffer size is wrong"}
}

return nil
Expand Down
5 changes: 3 additions & 2 deletions triplesec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"bytes"
"encoding/hex"
"encoding/json"
"errors"
"fmt"
"os"
"testing"
Expand Down Expand Up @@ -201,7 +202,7 @@ func TestBadPwV3(t *testing.T) {
_, err := c.Decrypt(ciphertext)
if err == nil {
t.Error("needed an error on bad PW")
} else if _, ok := err.(BadPassphraseError); !ok {
} else if !errors.As(err, new(BadPassphraseError)) {
t.Error("got wrong type of error")
}
}
Expand Down Expand Up @@ -229,7 +230,7 @@ func TestBadPwV4(t *testing.T) {
_, err := c.Decrypt(ciphertext)
if err == nil {
t.Error("needed an error on bad PW")
} else if _, ok := err.(BadPassphraseError); !ok {
} else if !errors.As(err, new(BadPassphraseError)) {
t.Error("got wrong type of error")
}
}
Expand Down
Loading