| Age | Commit message (Collapse) | Author | 
 | 
Build helper script: build-without-openssl.bash
 | 
 | 
As we now also support AES-SIV the old name is no longer
correct.
 | 
 | 
AES-SIV uses 1/2 of the key for authentication, 1/2 for
encryption, so we need a 64-byte key for AES-256. Derive
it from the master key by hashing it with SHA-512.
 | 
 | 
Add a test for that.
Also test operations using a 64-byte key.
 | 
 | 
Also pull all the deterministic nonce code into fusefrontend_reverse
to greatly simplify the normal code path.
 | 
 | 
After all, is's a virtual file.
 | 
 | 
GCM-SIV is not yet finalized, and the reference implemenation is
painfully slow at about 2 MB/s. Switch to AES-SIV.
 | 
 | 
 | 
 | 
On a CPU without AES-NI:
$ go test -bench .
Benchmark4kEncStupidGCM-2   	   50000	     24155 ns/op	 169.57 MB/s
Benchmark4kEncGoGCM-2       	   20000	     93965 ns/op	  43.59 MB/s
Benchmark4kEncGCMSIV-2      	     500	   2576193 ns/op	   1.59 MB/s
 | 
 | 
This happens all the time in reverse mode when somebody stats
an encrypted symlink target.
 | 
 | 
Also delete the unused "dirIVNameStruct", found by deadcode.
 | 
 | 
...and fix reported errors:
internal/fusefrontend_reverse/rfile.go:40: github.com/rfjakob/gocryptfs/internal/contentenc.FileHeader composite literal uses unkeyed fields
internal/fusefrontend_reverse/rfs.go:249: github.com/hanwen/go-fuse/fuse.DirEntry composite literal uses unkeyed fields
internal/fusefrontend_reverse/rfs.go:264: github.com/hanwen/go-fuse/fuse.DirEntry composite literal uses unkeyed fields
 | 
 | 
 | 
 | 
128-bit IVs are NOT used everywhere.
 | 
 | 
 | 
 | 
This will be used for strong symlink encryption in reverse mode.
 | 
 | 
Calling into go-fuse's loopbackFileSystem does not add
any value here.
 | 
 | 
 | 
 | 
 | 
 | 
findLongnameParent has to read the whole directory to find the
right file; add a simple cache to avoid most directory scans.
 | 
 | 
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.
 | 
 | 
 | 
 | 
As ReadDirIV operates on a path anyway, opening the directory
has no clear safety advantage w.r.t. concurrent renames.
If the backing directory is a reverse-mounted gocryptfs filesystem,
each directory open is an OPENDIR, and this causes a full directory
read!
This patch improves the "ls -lR" performance of an
  DIR --> gocryptfs-reverse --> gocryptfs
chain by a factor of ~10.
OPENDIR counts for ls -lR:
  Before 15570
  After   2745
 | 
 | 
With the generic fmt.Errorf we trigger a warning from go-fuse:
  2016/09/21 21:42:31 can't convert error type: Invalid padding
 | 
 | 
...with stable mappings for hard-linked files.
 | 
 | 
Also add ReverseDummyNonce nonce generation.
 | 
 | 
 | 
 | 
And also don't return the encrypted version of
.gocryptfs.reverse.conf in readdir.
 | 
 | 
 | 
 | 
 | 
 | 
Should be derived from the directory name only.
 | 
 | 
Also refactor the header generation for nicer code.
 | 
 | 
Introduce a unique per-directory diriv that is generated
by hashing the encrypted directory path.
 | 
 | 
Also create virtual gocryptfs.diriv entries (no content yet).
 | 
 | 
Will be needed by reverse mode.
 | 
 | 
 | 
 | 
...to prevent confusion with the forward variants.
FS   -> reverseFS
file -> reverseFile
Also add an incomplete read implementation.
 | 
 | 
Add the reverse variant of DecryptBlocks etc:
* EncryptBlocks
* JointPlaintextRange
* ExplodeCipherRange
 | 
 | 
 | 
 | 
Previously caused an integer underflow.
 | 
 | 
Compiles but does not do much else.
 | 
 | 
Commit af5441dcd9033e81da43ab77887a7b5aac693ab6 has caused a
regression ( https://github.com/rfjakob/gocryptfs/issues/35 )
that is fixed by this commit.
The go-fuse library by now has all the syscall wrappers in
place to correctly handle Utimens, also for symlinks.
Instead of duplicating the effort here just call into go-fuse.
Closes #35
 | 
 | 
This fixes a build problem on 32-bit hosts:
  internal/fusefrontend/file.go:400: cannot use a.Unix() (type int64) as
  type int32 in assignment
  internal/fusefrontend/file.go:406: cannot use m.Unix() (type int64) as
  type int32 in assignment
It also enables full nanosecond timestamps for dates
after 1970.
 | 
 | 
 | 
 | 
 | 
 | 
OSX does not have /proc/cpuinfo, but let's not warn
the user about it.
 | 
 | 
[...]/stupidgcm/locking.go:16:2:
  warning: indirection of non-volatile null pointer will
  be deleted, not trap [-Wnull-dereference]
  [...]/stupidgcm/locking.go:16:2:
  note: consider using __builtin_trap() or qualifying
  pointer with 'volatile'
https://github.com/rfjakob/gocryptfs/issues/15
 | 
 | 
Protip: find naked *at syscalls using:
   git grep "syscall." | grep "at(" | grep -v syscallcompat
 | 
 | 
Also, replace remaining naked syscall.Openat calls.
 | 
 | 
 |