Skip to content

Commit

Permalink
added a stricter linter configuration (#37)
Browse files Browse the repository at this point in the history
  • Loading branch information
enrichman authored Oct 27, 2022
1 parent b0df97e commit 18d0ca3
Show file tree
Hide file tree
Showing 14 changed files with 98 additions and 22 deletions.
37 changes: 37 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
run:
go: "1.19"

linters:
enable-all: true

disable:
# deprecated
- maligned
- scopelint
- varcheck
- interfacer
- structcheck
- nosnakecase
- deadcode
- exhaustivestruct
- ifshort
- golint

# warn for generics: https://github.com/golangci/golangci-lint/issues/2649
- rowserrcheck
- sqlclosecheck
- wastedassign

# others
- forbidigo

# to evaluate
- wrapcheck
- varnamelen
- noctx
- gomnd
- gochecknoglobals
- exhaustruct
- godox
- paralleltest
- testpackage
1 change: 0 additions & 1 deletion cmd/stego/stego.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
)

func main() {
fmt.Print()
if err := cli.NewRootCmd().Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
Expand Down
9 changes: 6 additions & 3 deletions internal/cli/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,17 @@ func newImagesCmd() *cobra.Command {
return imagesCmd
}

var client = http.Client{Timeout: 30 * time.Second}
var (
client = http.Client{Timeout: 30 * time.Second}
errInvalidNumOfImages = errors.New("number of images must be at least 1")
)

func runImagesCmd(cmd *cobra.Command, args []string) error {
if imagesNum == 0 {
return errors.New("number of images must be at least 1")
return errInvalidNumOfImages
}
// creates the output folder if it doesn't exists
err := os.MkdirAll(output, 0755)
err := os.MkdirAll(output, 0o755)
if err != nil {
return err
}
Expand Down
1 change: 1 addition & 0 deletions internal/cli/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ func getInputFromStdin() ([]byte, error) {
fmt.Print("Enter text: ")

reader := bufio.NewReader(os.Stdin)

text, err := reader.ReadBytes('\n')
if err != nil {
return nil, err
Expand Down
13 changes: 9 additions & 4 deletions internal/decrypt/decrypt.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ func WithMasterKeyFile(filename string) OptFunc {
}

d.MasterKey = masterKey

return nil
}
}
Expand All @@ -49,6 +50,7 @@ func WithPartialKeyFiles(filenames []string) OptFunc {
return err
}
}

return nil
}
}
Expand All @@ -61,11 +63,12 @@ func WithPartialKeyFile(filename string) OptFunc {
}

d.Parts = append(d.Parts, sss.NewPart(partialKey))

return nil
}
}

// TODO fix
// TODO fix.
func WithPartialKeyImageFile(filename string) OptFunc {
return func(d *Decrypter) error {
partialKey, err := file.ReadKey(filename)
Expand All @@ -74,14 +77,16 @@ func WithPartialKeyImageFile(filename string) OptFunc {
}

d.Parts = append(d.Parts, sss.NewPart(partialKey))

return nil
}
}

func (d *Decrypter) Decrypt(content []byte, filename string) error {

var key []byte
var err error
var (
key []byte
err error
)

if len(d.MasterKey) > 0 {
key = d.MasterKey
Expand Down
15 changes: 12 additions & 3 deletions internal/encrypt/encrypt.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ import (
"os"
"path/filepath"

"github.com/pkg/errors"

"github.com/enrichman/stegosecrets/internal/log"
"github.com/enrichman/stegosecrets/pkg/file"
"github.com/enrichman/stegosecrets/pkg/image"
sss "github.com/enrichman/stegosecrets/pkg/stego"
"github.com/pkg/errors"
)

type Encrypter struct {
Expand Down Expand Up @@ -44,7 +43,9 @@ func WithParts(parts int) OptFunc {
if parts < 0 || parts > 256 {
return errors.New("invalid parts")
}

e.Parts = parts

return nil
}
}
Expand All @@ -54,7 +55,9 @@ func WithThreshold(threshold int) OptFunc {
if threshold < 0 || threshold > 256 {
return errors.New("invalid threshold")
}

e.Threshold = threshold

return nil
}
}
Expand All @@ -63,12 +66,14 @@ func (e *Encrypter) Encrypt(reader io.Reader, filename string) error {
e.Logger.Print(fmt.Sprintf("Encrypting '%s'", filename))

e.Logger.Debug("generateAndSaveMasterKey")

masterKey, err := e.generateAndSaveMasterKey(filename)
if err != nil {
return err
}

e.Logger.Debug("encryptAndSaveMessage")

err = e.encryptAndSaveMessage(masterKey, reader, filename)
if err != nil {
return err
Expand Down Expand Up @@ -96,14 +101,15 @@ func (e *Encrypter) generateAndSaveMasterKey(filename string) ([]byte, error) {
return nil, err
}

if err := os.MkdirAll(outDirName, 0744); err != nil {
if err := os.MkdirAll(outDirName, 0o744); err != nil {
return nil, err
}

err = file.WriteKey(masterKey, fmt.Sprintf("%s/%s.enc", outDirName, filename))
if err != nil {
return nil, err
}

return masterKey, nil
}

Expand Down Expand Up @@ -132,6 +138,7 @@ func (e *Encrypter) encryptAndSaveMessage(masterKey []byte, reader io.Reader, fi
if err != nil {
return err
}

return nil
}

Expand Down Expand Up @@ -175,6 +182,7 @@ func (e *Encrypter) getImages(count int) ([]string, error) {
case ".jpg", ".jpeg", ".png":
images = append(images, filepath.Join(dir, file.Name()))
}

if len(images) >= count {
break
}
Expand All @@ -185,6 +193,7 @@ func (e *Encrypter) getImages(count int) ([]string, error) {
if lenImages == 0 {
return nil, errors.Errorf("no image files in %s dir: run 'stego images' to get some random pics", dir)
}

for lenImages < count {
images = append(images, images...)
lenImages = len(images)
Expand Down
3 changes: 1 addition & 2 deletions internal/encrypt/encrypt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@ import (
"fmt"
"testing"

"github.com/stretchr/testify/assert"

"github.com/enrichman/stegosecrets/internal/encrypt"
"github.com/stretchr/testify/assert"
)

func TestNewEncrypter(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion internal/log/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func (s *SimpleLogger) Debug(a ...any) {
}
}

// SilentLogger is a nop Logger implementation
// SilentLogger is a nop Logger implementation.
type SilentLogger struct{}

func (s *SilentLogger) Print(a ...any) {}
Expand Down
6 changes: 6 additions & 0 deletions pkg/file/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,20 @@ func WriteFileChecksum(filename string) error {

func WriteChecksum(content []byte, filename string) error {
h := sha256.New()

_, err := h.Write(content)
if err != nil {
return err
}

checksum := fmt.Sprintf("%x\t%s", h.Sum(nil), filepath.Base(filename))

return WriteFile([]byte(checksum), fmt.Sprintf("%s.checksum", filename))
}

func WriteKey(key []byte, filename string) error {
base64EncodedKey := base64.StdEncoding.EncodeToString(key)

return WriteFile([]byte(base64EncodedKey), fmt.Sprintf("%s.key", filename))
}

Expand All @@ -48,6 +51,7 @@ func WriteFile(content []byte, filename string) error {
defer f.Close()

_, err = f.Write(content)

return err
}

Expand All @@ -62,6 +66,7 @@ func ReadFile(filename string) ([]byte, error) {
if err != nil {
return nil, err
}

return bb, nil
}

Expand All @@ -75,5 +80,6 @@ func ReadKey(filename string) ([]byte, error) {
if err != nil {
return nil, err
}

return decodedKey, nil
}
5 changes: 3 additions & 2 deletions pkg/file/file_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@ package file

import (
"fmt"
"github.com/stretchr/testify/require"
"os"
"path"
"testing"

"github.com/stretchr/testify/require"
)

func Test_WriteFileChecksum(t *testing.T) {
tmpDir := t.TempDir()
original := path.Join(tmpDir, "file")

err := os.WriteFile(original, []byte("content"), 0600)
err := os.WriteFile(original, []byte("content"), 0o600)
require.NoError(t, err)

err = WriteFileChecksum(original)
Expand Down
10 changes: 7 additions & 3 deletions pkg/image/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ import (
"crypto/sha256"
"fmt"
"image"
_ "image/jpeg" // enable decoding for jpeg images.
_ "image/png" // enable decoding for png images.
"io"
"os"

_ "image/jpeg"
_ "image/png"

"github.com/auyer/steganography"
"github.com/enrichman/stegosecrets/pkg/file"
)
Expand All @@ -34,6 +33,7 @@ func EncodeSecretFromFileWithChecksum(secret []byte, inputFile, outputFile strin
}

checksum := fmt.Sprintf("%x\n", h.Sum(nil))

return file.WriteFile([]byte(checksum), fmt.Sprintf("%s.checksum", outputFile))
}

Expand Down Expand Up @@ -63,12 +63,14 @@ func EncodeSecret(secret []byte, imgIn io.Reader, imgOut io.Writer) error {
// sizeOfMessage := steganography.MaxEncodeSize(img)

w := new(bytes.Buffer)

err = steganography.Encode(w, img, secret)
if err != nil {
return err
}

_, err = w.WriteTo(imgOut)

return err
}

Expand All @@ -77,11 +79,13 @@ func DecodeSecret(imgIn io.Reader) ([]byte, error) {
if err != nil {
return nil, err
}

fmt.Println("format", format)

sizeOfMessage := steganography.GetMessageSizeFromImage(img)
fmt.Println("sizeOfMessage", sizeOfMessage)

msg := steganography.Decode(sizeOfMessage, img)

return msg, nil
}
4 changes: 3 additions & 1 deletion pkg/image/image_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@ package image

import (
"bytes"
"github.com/stretchr/testify/require"
"image"
"image/jpeg"
"testing"

"github.com/stretchr/testify/require"
)

func Test_EncodeDecodeSecret(t *testing.T) {
secret := []byte("test secret")

testImage := image.NewRGBA(image.Rect(0, 0, 256, 256))

var imageBuff bytes.Buffer
err := jpeg.Encode(&imageBuff, testImage, nil)
require.NoError(t, err)
Expand Down
5 changes: 4 additions & 1 deletion pkg/stego/aes.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@ import (
"io"
)

var errCiphertextBlockSizeTooShort = errors.New("ciphertext block size is too short")

func GenerateMasterKey() ([]byte, error) {
key := make([]byte, 32)
if _, err := rand.Read(key); err != nil {
return nil, err
}

return key, nil
}

Expand Down Expand Up @@ -46,7 +49,7 @@ func Decrypt(key []byte, cipherText []byte) ([]byte, error) {

// the length of the cipherText has to be more than 16 Bytes
if len(cipherText) < aes.BlockSize {
return nil, errors.New("ciphertext block size is too short")
return nil, errCiphertextBlockSizeTooShort
}

iv := cipherText[:aes.BlockSize]
Expand Down
Loading

0 comments on commit 18d0ca3

Please sign in to comment.