Move dirIVCache to its own file
This commit is contained in:
parent
9b6894bdbf
commit
6b27b6a1e7
|
@ -0,0 +1,43 @@
|
||||||
|
package nametransform
|
||||||
|
|
||||||
|
import "sync"
|
||||||
|
|
||||||
|
// A simple one-entry DirIV cache
|
||||||
|
type dirIVCache struct {
|
||||||
|
// Invalidated?
|
||||||
|
cleared bool
|
||||||
|
// The DirIV
|
||||||
|
iv []byte
|
||||||
|
// Directory the DirIV belongs to
|
||||||
|
dir string
|
||||||
|
// Ecrypted version of "dir"
|
||||||
|
translatedDir string
|
||||||
|
// Synchronisation
|
||||||
|
lock sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
// lookup - fetch entry for "dir" from the cache
|
||||||
|
func (c *dirIVCache) lookup(dir string) (bool, []byte, string) {
|
||||||
|
c.lock.RLock()
|
||||||
|
defer c.lock.RUnlock()
|
||||||
|
if !c.cleared && c.dir == dir {
|
||||||
|
return true, c.iv, c.translatedDir
|
||||||
|
}
|
||||||
|
return false, nil, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// store - write entry for "dir" into the caches
|
||||||
|
func (c *dirIVCache) store(dir string, iv []byte, translatedDir string) {
|
||||||
|
c.lock.Lock()
|
||||||
|
defer c.lock.Unlock()
|
||||||
|
c.cleared = false
|
||||||
|
c.iv = iv
|
||||||
|
c.dir = dir
|
||||||
|
c.translatedDir = translatedDir
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dirIVCache) Clear() {
|
||||||
|
c.lock.Lock()
|
||||||
|
defer c.lock.Unlock()
|
||||||
|
c.cleared = true
|
||||||
|
}
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/rfjakob/gocryptfs/internal/cryptocore"
|
"github.com/rfjakob/gocryptfs/internal/cryptocore"
|
||||||
"github.com/rfjakob/gocryptfs/internal/toggledlog"
|
"github.com/rfjakob/gocryptfs/internal/toggledlog"
|
||||||
|
@ -20,46 +19,6 @@ const (
|
||||||
DirIVFilename = "gocryptfs.diriv"
|
DirIVFilename = "gocryptfs.diriv"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A simple one-entry DirIV cache
|
|
||||||
type dirIVCache struct {
|
|
||||||
// Invalidated?
|
|
||||||
cleared bool
|
|
||||||
// The DirIV
|
|
||||||
iv []byte
|
|
||||||
// Directory the DirIV belongs to
|
|
||||||
dir string
|
|
||||||
// Ecrypted version of "dir"
|
|
||||||
translatedDir string
|
|
||||||
// Synchronisation
|
|
||||||
lock sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
// lookup - fetch entry for "dir" from the cache
|
|
||||||
func (c *dirIVCache) lookup(dir string) (bool, []byte, string) {
|
|
||||||
c.lock.RLock()
|
|
||||||
defer c.lock.RUnlock()
|
|
||||||
if !c.cleared && c.dir == dir {
|
|
||||||
return true, c.iv, c.translatedDir
|
|
||||||
}
|
|
||||||
return false, nil, ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// store - write entry for "dir" into the caches
|
|
||||||
func (c *dirIVCache) store(dir string, iv []byte, translatedDir string) {
|
|
||||||
c.lock.Lock()
|
|
||||||
defer c.lock.Unlock()
|
|
||||||
c.cleared = false
|
|
||||||
c.iv = iv
|
|
||||||
c.dir = dir
|
|
||||||
c.translatedDir = translatedDir
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dirIVCache) Clear() {
|
|
||||||
c.lock.Lock()
|
|
||||||
defer c.lock.Unlock()
|
|
||||||
c.cleared = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// readDirIV - read the "gocryptfs.diriv" file from "dir" (absolute ciphertext path)
|
// readDirIV - read the "gocryptfs.diriv" file from "dir" (absolute ciphertext path)
|
||||||
func (be *NameTransform) ReadDirIV(dir string) (iv []byte, readErr error) {
|
func (be *NameTransform) ReadDirIV(dir string) (iv []byte, readErr error) {
|
||||||
ivfile := filepath.Join(dir, DirIVFilename)
|
ivfile := filepath.Join(dir, DirIVFilename)
|
||||||
|
|
Loading…
Reference in New Issue