diff --git a/README.md b/README.md new file mode 100644 index 0000000..a14c0bc --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +GoCryptFS +========= +A minimal encrypted overlay filesystem written in Go. + +Built on top of the +native Go FUSE library [bazil.org/fuse](https://github.com/bazil/fuse) +and the [ClueFS](https://github.com/airnandez/cluefs) loopback file system. + +Inspired by [EncFS](https://github.com/vgough/encfs). + +Design +------ +* Authenticated encryption of file contents using AES-GCM-128 + * 96 bit nonce that starts from a random value and counts up + * uses openssl through [spacemonkeygo/openssl](https://github.com/spacemonkeygo/openssl) + for a 3x speedup compared to `crypto/cipher` +* AES-CBC filename encryption + +Current Status +-------------- +* Work in progress +* Key is set to static all-zero +* Not ready for anything but testing and debugging + +Testing +------- +Run `./main_benchmark.bash` to run the test suite and the streaming read/write +benchmark. + +The output should look like this: + + $ ./main_benchmark.bash + + go build + + go test -bench=. + PASS + BenchmarkStreamWrite 100 14062281 ns/op 74.57 MB/s + BenchmarkStreamRead 100 11267741 ns/op 93.06 MB/s + ok github.com/rfjakob/gocryptfs 7.569s diff --git a/main.go b/main.go index 3619bb7..071415a 100644 --- a/main.go +++ b/main.go @@ -1,24 +1,23 @@ package main import ( - "path/filepath" - "flag" - "os" - "fmt" - "github.com/rfjakob/gocryptfs/frontend" "bazil.org/fuse" fusefs "bazil.org/fuse/fs" - + "flag" + "fmt" + "github.com/rfjakob/gocryptfs/frontend" + "os" + "path/filepath" ) const ( PROGRAM_NAME = "gocryptfs" - USE_OPENSSL = true + USE_OPENSSL = true - ERREXIT_USAGE = 1 - ERREXIT_NEWFS = 2 - ERREXIT_MOUNT = 3 - ERREXIT_SERVE = 4 + ERREXIT_USAGE = 1 + ERREXIT_NEWFS = 2 + ERREXIT_MOUNT = 3 + ERREXIT_SERVE = 4 ERREXIT_MOUNT2 = 5 ) @@ -48,7 +47,7 @@ func main() { fuse.Subtype(PROGRAM_NAME), fuse.VolumeName(PROGRAM_NAME), fuse.LocalVolume(), - fuse.MaxReadahead(1024*1024), + fuse.MaxReadahead(1024 * 1024), } conn, err := fuse.Mount(mountpoint, mountOpts...) if err != nil { diff --git a/main_test.go b/main_test.go index f17b5f5..6b68b4a 100644 --- a/main_test.go +++ b/main_test.go @@ -1,15 +1,15 @@ package main import ( - "io" - "fmt" - "time" - "testing" - "os" - "os/exec" - "io/ioutil" "crypto/md5" "encoding/hex" + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "testing" + "time" ) const tmpDir = "test_tmp_dir/" @@ -43,7 +43,6 @@ func TestMain(m *testing.M) { r := m.Run() - fu.Run() os.Exit(r) }