diff options
Diffstat (limited to 'internal/nametransform')
| -rw-r--r-- | internal/nametransform/longnames.go | 7 | ||||
| -rw-r--r-- | internal/nametransform/longnames_test.go | 8 | ||||
| -rw-r--r-- | internal/nametransform/names.go | 21 | 
3 files changed, 36 insertions, 0 deletions
| diff --git a/internal/nametransform/longnames.go b/internal/nametransform/longnames.go index 7a6d413..1bbcbb6 100644 --- a/internal/nametransform/longnames.go +++ b/internal/nametransform/longnames.go @@ -69,6 +69,13 @@ func IsLongContent(cName string) bool {  	return NameType(cName) == LongNameContent  } +// RemoveLongNameSuffix removes the ".name" suffix from cName, returning the corresponding +// content file name. +// No check is made if cName actually is a LongNameFilename. +func RemoveLongNameSuffix(cName string) string { +	return cName[:len(cName)-len(LongNameSuffix)] +} +  // ReadLongName - read cName + ".name" from the directory opened as dirfd.  //  // Symlink-safe through Openat(). diff --git a/internal/nametransform/longnames_test.go b/internal/nametransform/longnames_test.go index 8fa19fe..4210492 100644 --- a/internal/nametransform/longnames_test.go +++ b/internal/nametransform/longnames_test.go @@ -20,3 +20,11 @@ func TestIsLongName(t *testing.T) {  		t.Errorf("False positive")  	}  } + +func TestRemoveLongNameSuffix(t *testing.T) { +	filename := "gocryptfs.longname.LkwUdALvV_ANnzQN6ZZMYnxxfARD3IeZWCKnxGJjYmU=.name" +	content := "gocryptfs.longname.LkwUdALvV_ANnzQN6ZZMYnxxfARD3IeZWCKnxGJjYmU=" +	if RemoveLongNameSuffix(filename) != content { +		t.Error(".name suffix not removed") +	} +} diff --git a/internal/nametransform/names.go b/internal/nametransform/names.go index 20fbede..d5c2c8b 100644 --- a/internal/nametransform/names.go +++ b/internal/nametransform/names.go @@ -17,6 +17,17 @@ const (  	NameMax = 255  ) +// NameTransformer is an interface used to transform filenames. +type NameTransformer interface { +	DecryptName(cipherName string, iv []byte) (string, error) +	EncryptName(plainName string, iv []byte) string +	EncryptAndHashName(name string, iv []byte) (string, error) +	HashLongName(name string) string +	WriteLongNameAt(dirfd int, hashName string, plainName string) error +	B64EncodeToString(src []byte) string +	B64DecodeString(s string) ([]byte, error) +} +  // NameTransform is used to transform filenames.  type NameTransform struct {  	emeCipher *eme.EMECipher @@ -88,3 +99,13 @@ func (n *NameTransform) EncryptName(plainName string, iv []byte) (cipherName64 s  	cipherName64 = n.B64.EncodeToString(bin)  	return cipherName64  } + +// B64EncodeToString returns a Base64-encoded string +func (n *NameTransform) B64EncodeToString(src []byte) string { +	return n.B64.EncodeToString(src) +} + +// B64DecodeString decodes a Base64-encoded string +func (n *NameTransform) B64DecodeString(s string) ([]byte, error) { +	return n.B64.DecodeString(s) +} | 
