diff options
author | Jakob Unterwurzacher | 2016-09-22 23:28:11 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2016-09-25 16:43:17 +0200 |
commit | a6a7b424f8e8a0f8ddd1c94b7463250ef1337811 (patch) | |
tree | 2281d7062d893d70209ecb7a82589e49decac164 /internal/fusefrontend_reverse/reverse_diriv.go | |
parent | 35bcc2dca2dc928e3b7c31e34d785b7a42c06722 (diff) |
reverse: resolve long names in Open and GetAttr
The last patch added functionality for generating gocryptfs.longname.*
files, this patch adds support for mapping them back to the full
filenames.
Note that resolving a long name needs a full readdir. A cache
will be implemented later on to improve performance.
Diffstat (limited to 'internal/fusefrontend_reverse/reverse_diriv.go')
-rw-r--r-- | internal/fusefrontend_reverse/reverse_diriv.go | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/internal/fusefrontend_reverse/reverse_diriv.go b/internal/fusefrontend_reverse/reverse_diriv.go new file mode 100644 index 0000000..df3a4d1 --- /dev/null +++ b/internal/fusefrontend_reverse/reverse_diriv.go @@ -0,0 +1,26 @@ +package fusefrontend_reverse + +import ( + "crypto/sha256" + + "github.com/hanwen/go-fuse/fuse" + "github.com/hanwen/go-fuse/fuse/nodefs" + + "github.com/rfjakob/gocryptfs/internal/nametransform" +) + +// deriveDirIV derives the DirIV from the encrypted directory path by +// hashing it +func deriveDirIV(dirPath string) []byte { + hash := sha256.Sum256([]byte(dirPath)) + return hash[:nametransform.DirIVLen] +} + +func (rfs *reverseFS) newDirIVFile(cRelPath string) (nodefs.File, fuse.Status) { + cDir := saneDir(cRelPath) + absDir, err := rfs.abs(rfs.decryptPath(cDir)) + if err != nil { + return nil, fuse.ToStatus(err) + } + return rfs.NewVirtualFile(deriveDirIV(cDir), absDir) +} |