Hardcore Sushi
1973153602
Switch to v2 module
2 years ago
Hardcore Sushi
bd5d53f50e
libgocryptfs: update to gocryptfs v2.2.0
2 years ago
Jakob Unterwurzacher
d023cd6c95
cli: drop -forcedecode flag
...
The rewritten openssl backend does not support this flag anymore,
and it was inherently dangerour. Drop it (ignored for compatibility)
2 years ago
Jakob Unterwurzacher
34d8a498c4
Unbreak hyperlinks broken by go mod v2 conversion
...
Commit
69d88505fd
go mod: declare module version v2
translated all instances of "github.com/rfjakob/gocryptfs/" to
"github.com/rfjakob/gocryptfs/v2/".
Unfortunately, this included hyperlinks.
Unbreak the hyperlinks like this:
find . -name \*.go | xargs sed -i s%https://github.com/rfjakob/gocryptfs/v2/%https://github.com/rfjakob/gocryptfs/v2/%
2 years ago
Hardcore Sushi
f0e45c7b7e
libgocryptfs: update to gocryptfs v2.1
2 years ago
Jakob Unterwurzacher
20ca63cdbc
contentenc: remove unused NonceMode constants
...
Looks like these are part of an abandoned plan.
2 years ago
Jakob Unterwurzacher
69d88505fd
go mod: declare module version v2
...
Our git version is v2+ for some time now, but go.mod
still declared v1. Hopefully making both match makes
https://pkg.go.dev/github.com/rfjakob/gocryptfs/v2 work.
All the import paths have been fixed like this:
find . -name \*.go | xargs sed -i s%github.com/rfjakob/gocryptfs/%github.com/rfjakob/gocryptfs/v2/%
2 years ago
Jakob Unterwurzacher
6b0e63c1a8
Improve startup debug output
...
The startup debug output was very verbose but still missing some
effective crypto settings.
2 years ago
Hardcore Sushi
847d4fa781
Genesis patch
2 years ago
Jakob Unterwurzacher
bebd7ed81f
contentenc: update comments
...
Also, replace one open-coded calculation with a
helper function.
2 years ago
Jakob Unterwurzacher
ec74d1d2f4
Update go-fuse import path to github.com/hanwen/go-fuse/v2
...
We need
fd7328faf9
to fix a crash reported in https://github.com/rfjakob/gocryptfs/issues/430 :
2019/10/30 17:14:16 Unknown opcode 2016
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x508d38]
This patch is only in the v2.x.x branch. Upgrade to v2, as the
old API is also supported there.
Running
git grep hanwen/go-fuse | grep -v hanwen/go-fuse/v2
to check for forgotten references comes back clean.
3 years ago
Jakob Unterwurzacher
abc59fa968
contentenc: encryptBlocksParallel: explain why last part runs in new goroutine
...
The result is counter-intuitive, so explain it here.
3 years ago
Jakob Unterwurzacher
9aeb2a3df6
contentenc: move parallel encryption into encryptBlocksParallel
...
Make the logic self-contained in the new helper function.
3 years ago
Sebastian Lackner
07c486603c
configfile: Explicitly wipe scrypt derived key after decrypting/encrypting master key.
...
Further raises the bar for recovering keys from memory.
4 years ago
Sebastian Lackner
874eaf9734
Assorted spelling fixes.
...
Mostly detected with the 'codespell' utility, but also includes some
manual grammar fixes.
4 years ago
Jakob Unterwurzacher
bcca323cb7
contentenc: reserve one extra block in pool plaintext buffers
...
File holes and -fsck can cause unaligned read accesses, which means
we have to decrypt one extra plaintext block.
xfstests generic/083 manage to crash -fsck like this:
generic/083 2018/07/14 15:25:21 wrong len=266240, want=131072
panic: wrong len=266240, want=131072
goroutine 1 [running]:
log.Panicf(0x67fc00, 0x15, 0xc4204fec90, 0x2, 0x2)
/usr/local/go/src/log/log.go:333 +0xda
github.com/rfjakob/gocryptfs/internal/contentenc.(*bPool).Put(0xc4200d4800, 0xc4202f2000, 0x21000, 0x41000)
/home/jakob/go/src/github.com/rfjakob/gocryptfs/internal/contentenc/bpool.go:27 +0x15d
github.com/rfjakob/gocryptfs/internal/fusefrontend.(*File).doRead(0xc4200b4500, 0xc42019e000, 0x0, 0x20000, 0x28400, 0x20000, 0xc42019e000, 0xc4204ff008, 0x435164, 0xc420000180)
/home/jakob/go/src/github.com/rfjakob/gocryptfs/internal/fusefrontend/file.go:227 +0xba9
github.com/rfjakob/gocryptfs/internal/fusefrontend.(*File).Read(0xc4200b4500, 0xc42019e000, 0x20000, 0x20000, 0x28400, 0x0, 0x0, 0x0)
/home/jakob/go/src/github.com/rfjakob/gocryptfs/internal/fusefrontend/file.go:246 +0x23e
main.(*fsckObj).file(0xc420069320, 0xc42001a630, 0x21)
/home/jakob/go/src/github.com/rfjakob/gocryptfs/fsck.go:126 +0x21f
main.(*fsckObj).dir(0xc420069320, 0xc420014dc0, 0x1d)
/home/jakob/go/src/github.com/rfjakob/gocryptfs/fsck.go:76 +0x387
main.(*fsckObj).dir(0xc420069320, 0xc42021dae0, 0x19)
/home/jakob/go/src/github.com/rfjakob/gocryptfs/fsck.go:74 +0x347
5 years ago
Jakob Unterwurzacher
b6c8960b01
fsck: clean up log output
...
Make sure we get only 1 warning output per
problem.
Also, add new corruption types to broken_fs_v1.4.
5 years ago
Jakob Unterwurzacher
1ed3d51df1
fusefrontend: add xattr support
...
At the moment, only for reverse mode.
https://github.com/rfjakob/gocryptfs/issues/217
5 years ago
Jakob Unterwurzacher
29445c976d
contentenc: reserve one additional block in CReqPool
...
...to account for unaligned reads.
I have not seen this happen in the wild because the kernel
always seems to issue 4k-aligned requests. But the cost
of the additional block in the pool is low and prevents
a buffer overrun panic when an unaligned read does happen.
6 years ago
Jakob Unterwurzacher
3009ec9852
fusefrontend: clamp oversized reads
...
Our byte cache pools are sized acc. to MAX_KERNEL_WRITE, but the
running kernel may have a higher limit set. Clamp to what we can
handle.
Fixes a panic on a Synology NAS reported at
https://github.com/rfjakob/gocryptfs/issues/145
6 years ago
Jakob Unterwurzacher
885fdcabda
contentenc: deduplicate AD packing into new concatAD() func
...
The encrypt and decrypt path both had a copy that were equivalent
but ordered differently, which was confusing.
Consolidate it in a new dedicated function.
6 years ago
Jakob Unterwurzacher
4bd2c6736a
contentenc: DecryptBlocks: give block number counter a clearer name
...
Using firstBlockNo as the counter is confusing, create a
copy named "blockNo" and use that.
6 years ago
Jakob Unterwurzacher
ed046aa359
Fix misspellings reported by goreportcard.com
...
https://goreportcard.com/report/github.com/rfjakob/gocryptfs#misspell
6 years ago
Jakob Unterwurzacher
b6bda01c33
contentenc: MergeBlocks: short-circuit the trivial case
...
Saves 3% for the tar extract benchmark because we skip the allocation.
6 years ago
Jakob Unterwurzacher
12c0101a23
contentenc: add PReqPool and use it in DecryptBlocks
...
This gets us a massive speed boost in streaming reads.
6 years ago
Jakob Unterwurzacher
80676c685f
contentenc: add safer "bPool" pool variant; add pBlockPool
...
bPool verifies the lengths of slices going in and out.
Also, add a plaintext block pool - pBlockPool - and use
it for decryption.
6 years ago
Jakob Unterwurzacher
3c6fe98eb1
contentenc: use sync.Pool memory pools for encryption
...
We use two levels of buffers:
1) 4kiB+overhead for each ciphertext block
2) 128kiB+overhead for each FUSE write (32 ciphertext blocks)
This commit adds a sync.Pool for both levels.
The memory-efficiency for small writes could be improved,
as we now always use a 128kiB buffer.
6 years ago
Jakob Unterwurzacher
e52594dae6
contentenc: parallelize encryption for 128kiB writes
...
128kiB = 32 x 4kiB pages is the maximum we get from the kernel. Splitting
up smaller writes is probably not worth it.
Parallelism is limited to two for now.
6 years ago
Jakob Unterwurzacher
294628b384
contentenc: move EncryptBlocks() loop into its own functions
...
This allows easy parallelization in the future.
6 years ago
Jakob Unterwurzacher
a24faa3ba5
fusefrontend: write: consolidate and move encryption to contentenc
...
Collect all the plaintext and pass everything to contentenc in
one call.
This will allow easier parallization of the encryption.
https://github.com/rfjakob/gocryptfs/issues/116
6 years ago
Jakob Unterwurzacher
f44902aaae
Fix two comments
...
One out-of-date and the other with a typo.
6 years ago
Jakob Unterwurzacher
3409ade272
forcedecode: tighten checks
...
...and fix a few golint issues and print a scary warning message on mount.
Also, force the fs to ro,noexec.
6 years ago
danim7
f1945c4daa
Add -forcedecode
...
Force decode of encrypted files even if the integrity check fails, instead of
failing with an IO error. Warning messages are still printed to syslog if corrupted
files are encountered.
It can be useful to recover files from disks with bad sectors or other corrupted
media.
Closes https://github.com/rfjakob/gocryptfs/pull/102 .
6 years ago
Jakob Unterwurzacher
b732881518
configfile: switch to 128-bit IVs for master key encryption
...
There is no security reason for doing this, but it will allow
to consolidate the code once we drop compatibility with gocryptfs v1.2
(and earlier) filesystems.
6 years ago
Jakob Unterwurzacher
c9f4400e6d
Replace all calls to naked panic() with log.Panic()
...
We want all panics to show up in the syslog.
7 years ago
Jakob Unterwurzacher
012152f3d1
fusefrontend: I/O error instead of panic on all-zero nonce
...
Running xfstests generic/075 on tmpfs often triggered a panic
for what seems to be a tmpfs bug.
Quoting from the email to lkml,
http://www.spinics.net/lists/kernel/msg2370127.html :
tmpfs seems to be incorrectly returning 0-bytes when reading from
a file that is concurrently being truncated.
7 years ago
Valient Gough
b764917cd5
lint fixes
7 years ago
Jakob Unterwurzacher
a2510efe12
reverse: use per-purpose nonce generation
...
Also pull all the deterministic nonce code into fusefrontend_reverse
to greatly simplify the normal code path.
7 years ago
Jakob Unterwurzacher
e9bb8b800c
reverse: switch from GCM-SIV to AES-SIV
...
GCM-SIV is not yet finalized, and the reference implemenation is
painfully slow at about 2 MB/s. Switch to AES-SIV.
7 years ago
Jakob Unterwurzacher
abd61d968d
contentenc: rename constant "IVBitLen" to "DefaultIVBits" and clarify comment
...
128-bit IVs are NOT used everywhere.
7 years ago
Jakob Unterwurzacher
12808138ef
contentenc: add "ExternalNonce" mode
...
This will be used for strong symlink encryption in reverse mode.
7 years ago
Jakob Unterwurzacher
7bbf6ad6ea
reverse: derive file ID and block IVs from file paths
7 years ago
Jakob Unterwurzacher
5f726aaa9d
contentenc: add GCM-SIV support
...
Also add ReverseDummyNonce nonce generation.
7 years ago
Jakob Unterwurzacher
7f87ed78f2
cryptocore: add support for GCM-SIV
7 years ago
Jakob Unterwurzacher
5931eea387
contentenc: add helpers for reverse mode
...
Add the reverse variant of DecryptBlocks etc:
* EncryptBlocks
* JointPlaintextRange
* ExplodeCipherRange
7 years ago
Jakob Unterwurzacher
e8a234f658
Add godoc comments to all internal packages
7 years ago
Jakob Unterwurzacher
7b22b426b9
contentenc: rename PlaintextRange and CiphertextRange
...
The name could be misunderstood and actually caused a bug:
doWrite used to always preallocate 4128 instead of the actual
data length.
7 years ago
Jakob Unterwurzacher
7e92ebe16a
Rename nametransform, contentenc source files
...
Let's have shorter names, and merge *_api.go into the "main"
file.
No code changes.
7 years ago
Jakob Unterwurzacher
6c3f97399a
Rename internal "toggledlog" package to "tlog"
...
tlog is used heavily everywhere and deserves a shorter name.
Renamed using sed magic, without any manual rework:
find * -type f -exec sed -i 's/toggledlog/tlog/g' {} +
7 years ago
Jakob Unterwurzacher
c74772bc8d
Run go fmt
7 years ago