embed-encrypt

This program wraps the newly in Go 1.16 embed package, to save files aes encrypted in the binary.

The goal is to be as easy to use as the embed package, while providing

Note: You will need the go 1.19 or newer to use this.

If you have an older go version

To install the Go 1.19 just run:

go get golang.org/dl/go1.19
go1.19 download

How to Install

go1.19 get github.com/abakum/embed-encrypt

Usage

Please look example

Replace your //go:embed file.txt directive with //encrypted:embed file.txt, the syntax is the same as the embed directives read the embed docs here. Replace your embed.FS type with encryptedfs.FS.

After you added the comment directives to some variables run:

embed-encrypt

or if you haven't added GOBIN to your PATH

go run github.com/abakum/embed-encrypt

This generates an aes encrypted version for all embedded files, <filename>.enc and generates a encrypted_fs.go which includes these files via //go:embed, these files are automatically decrypted at runtime.

Supported

Multiple directives, for a single variable:

//encrypted:embed bin/gopher.png
//encrypted:embed hello.txt
var multipleDirectives encryptedfs.FS

Multiple files, for a single variable:

//encrypted:embed bin/gopher.png
//encrypted:embed hello.txt "another.txt" "with spaces .txt"
var multipleFiles encryptedfs.FS

Glob patterns:

//encrypted:embed bin/* *.txt
var glob encryptedfs.FS

Strings variables:

//encrypted:embed hello.txt
var hello string

Byte slices:

//encrypted:embed bin/gopher.png
var gopher []byte

Caveats

  • locally scoped embed variables are not supported, in go1.19
func main() {
	//go:embed test.txt
    var glob encryptedfs.FS
}
  • Block variables are currently not supported, they would be relatively easy to implement:
var (
	//go:embed hello.txt
	hello string
	//go:embed gopher.png
	gopher []byte
)

Пять потому, что в ответ на вопрос почему я использую этот форк encrypted:embed вместо go:embed

  • даже без секретного ключа шифрования полезно шифровать исполняемые файлы в embed чтоб не беспокоить антивирусы и площадки где запрещена дистрибуция чужих бинарников
  • даже без секретного ключа шифрования этот форк сохраняет и восстанавливает даты embed файлов
  • этот форк может не включать ключ шифрования в embed
  • в этом форке можно использовать WalkDir, Xcopy, GlobStar
  • в этом форке ключ шифрования
var key []byte

может иметь имя отличное от key