diff options
Diffstat (limited to 'internal/nametransform')
| -rw-r--r-- | internal/nametransform/diriv.go | 30 | 
1 files changed, 15 insertions, 15 deletions
| diff --git a/internal/nametransform/diriv.go b/internal/nametransform/diriv.go index 902999b..5fca1ef 100644 --- a/internal/nametransform/diriv.go +++ b/internal/nametransform/diriv.go @@ -98,6 +98,16 @@ func WriteDirIV(dir string) error {  	return nil  } +// encryptAndHashName encrypts "name" and hashes it to a longname if it is +// too long. +func (be *NameTransform) encryptAndHashName(name string, iv []byte) string { +	cName := be.EncryptName(name, iv) +	if be.longNames && len(cName) > syscall.NAME_MAX { +		return be.HashLongName(cName) +	} +	return cName +} +  // EncryptPathDirIV - encrypt relative plaintext path "plainPath" using EME with  // DirIV. "rootDir" is the backing storage root directory.  // Components that are longer than 255 bytes are hashed if be.longnames == true. @@ -117,12 +127,8 @@ func (be *NameTransform) EncryptPathDirIV(plainPath string, rootDir string) (cip  	parentDir := filepath.Dir(plainPath)  	iv, cParentDir := be.DirIVCache.lookup(parentDir)  	if iv != nil { -		cBaseName := be.EncryptName(baseName, iv) -		if be.longNames && len(cBaseName) > syscall.NAME_MAX { -			cBaseName = be.HashLongName(cBaseName) -		} -		cipherPath = filepath.Join(cParentDir, cBaseName) -		return cipherPath, nil +		cBaseName := be.encryptAndHashName(baseName, iv) +		return filepath.Join(cParentDir, cBaseName), nil  	}  	// We have to walk the directory tree, in the worst case starting at the root  	// directory. @@ -130,15 +136,12 @@ func (be *NameTransform) EncryptPathDirIV(plainPath string, rootDir string) (cip  	plainNames := strings.Split(plainPath, "/")  	// So the DirIV we need is not cached. But maybe one level higher is  	// cached. Then we can skip a few items in the directory walk. -	// The catches the case of walking directories recursively. +	// This catches the case of walking directories recursively.  	parentDir2 := filepath.Dir(parentDir)  	iv, cParentDir = be.DirIVCache.lookup(parentDir2)  	if iv != nil {  		parentDirBase := filepath.Base(parentDir) -		cBaseName := be.EncryptName(parentDirBase, iv) -		if be.longNames && len(cBaseName) > syscall.NAME_MAX { -			cBaseName = be.HashLongName(cBaseName) -		} +		cBaseName := be.encryptAndHashName(parentDirBase, iv)  		wd = filepath.Join(wd, cParentDir, cBaseName)  		cipherPath = filepath.Join(cParentDir, cBaseName)  		skip := len(strings.Split(cipherPath, "/")) @@ -150,10 +153,7 @@ func (be *NameTransform) EncryptPathDirIV(plainPath string, rootDir string) (cip  		if err != nil {  			return "", err  		} -		encryptedName := be.EncryptName(plainName, iv) -		if be.longNames && len(encryptedName) > syscall.NAME_MAX { -			encryptedName = be.HashLongName(encryptedName) -		} +		encryptedName := be.encryptAndHashName(plainName, iv)  		cipherPath = filepath.Join(cipherPath, encryptedName)  		wd = filepath.Join(wd, encryptedName)  	} | 
