From dc32710045f6f46913ae336b6fb77bf90b6bdb85 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Thu, 21 Oct 2021 09:37:04 +0200 Subject: nametransform: add longNameMax parameter Determines when to start hashing long names instead of hardcoded 255. Will be used to alleviate "name too long" issues some users see on cloud storage. https://github.com/rfjakob/gocryptfs/issues/499 --- internal/nametransform/longnames_test.go | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'internal/nametransform/longnames_test.go') diff --git a/internal/nametransform/longnames_test.go b/internal/nametransform/longnames_test.go index 4210492..7a4e915 100644 --- a/internal/nametransform/longnames_test.go +++ b/internal/nametransform/longnames_test.go @@ -1,7 +1,11 @@ package nametransform import ( + "strings" "testing" + + "github.com/rfjakob/gocryptfs/v2/internal/contentenc" + "github.com/rfjakob/gocryptfs/v2/internal/cryptocore" ) func TestIsLongName(t *testing.T) { @@ -28,3 +32,40 @@ func TestRemoveLongNameSuffix(t *testing.T) { t.Error(".name suffix not removed") } } + +func newLognamesTestInstance(longNameMax uint8) *NameTransform { + key := make([]byte, cryptocore.KeyLen) + cCore := cryptocore.New(key, cryptocore.BackendGoGCM, contentenc.DefaultIVBits, true) + return New(cCore.EMECipher, true, longNameMax, true, nil, false) +} + +func TestLongNameMax(t *testing.T) { + iv := make([]byte, 16) + for max := 0; max <= NameMax; max++ { + n := newLognamesTestInstance(uint8(max)) + if max == 0 { + // effective value is 255 + max = NameMax + } + for l := 0; l <= NameMax+10; l++ { + name := strings.Repeat("x", l) + out, err := n.EncryptAndHashName(name, iv) + if l == 0 || l > NameMax { + if err == nil { + t.Errorf("should have rejected a name of length %d, but did not", l) + } + continue + } + cName, _ := n.EncryptName(name, iv) + rawLen := len(cName) + want := LongNameNone + if rawLen > max { + want = LongNameContent + } + have := NameType(out) + if have != want { + t.Errorf("l=%d max=%d: wanted %v, got %v\nname=%q\nout=%q", l, max, want, have, name, out) + } + } + } +} -- cgit v1.2.3