Skip to content

Instantly share code, notes, and snippets.

@adamenger
Created January 28, 2022 16:27

Revisions

  1. adamenger created this gist Jan 28, 2022.
    61 changes: 61 additions & 0 deletions benignware.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    package main

    import (
    "crypto/aes"
    "crypto/cipher"
    "crypto/rand"
    "fmt"
    "github.com/urfave/cli/v2"
    "io"
    "io/ioutil"
    "log"
    "os"
    )

    func GenerateKey() []byte {
    token := make([]byte, 16)
    rand.Read(token)
    return token
    }

    func EncryptFile(c *cli.Context) error {
    key := GenerateKey()
    fmt.Println(string(key))

    homeDir, err := os.UserHomeDir()
    if err != nil {
    log.Fatal(err)
    }

    // Create file to encrypt
    filename := fmt.Sprintf("%s/Desktop/%s", homeDir, c.String("filename"))
    dat, err := os.ReadFile(filename)
    if err != nil {
    return err
    }

    block, err := aes.NewCipher(key)
    if err != nil {
    return err
    }

    gcm, err := cipher.NewGCM(block)
    if err != nil {
    return err
    }

    nonce := make([]byte, gcm.NonceSize())
    if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
    return err
    }

    ciphertext := gcm.Seal(nonce, nonce, dat, nil)
    // Save back to file
    encryptedFilePath := fmt.Sprintf("%s.bin", filename)
    err = ioutil.WriteFile(encryptedFilePath, ciphertext, 0777)
    if err != nil {
    return err
    }

    return nil
    }