diff options
| -rw-r--r-- | README.md | 38 | ||||
| -rw-r--r-- | main.go | 21 | ||||
| -rw-r--r-- | main_test.go | 13 | 
3 files changed, 54 insertions, 18 deletions
| 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 @@ -1,24 +1,23 @@  package main  import ( -	"path/filepath" +	"bazil.org/fuse" +	fusefs "bazil.org/fuse/fs"  	"flag" -	"os"  	"fmt"  	"github.com/rfjakob/gocryptfs/frontend" -	"bazil.org/fuse" -	fusefs "bazil.org/fuse/fs" - +	"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" +	"crypto/md5" +	"encoding/hex"  	"fmt" -	"time" -	"testing" +	"io" +	"io/ioutil"  	"os"  	"os/exec" -	"io/ioutil" -	"crypto/md5" -	"encoding/hex" +	"testing" +	"time"  )  const tmpDir = "test_tmp_dir/" @@ -43,7 +43,6 @@ func TestMain(m *testing.M) {  	r := m.Run() -  	fu.Run()  	os.Exit(r)  } | 
