libgocryptfs
Jakob Unterwurzacher 7 years ago
parent b0ee5258b1
commit c74772bc8d
  1. 2
      internal/configfile/config_file.go
  2. 2
      internal/contentenc/content.go
  3. 11
      internal/contentenc/content_api.go
  4. 6
      internal/contentenc/file_header.go
  5. 16
      internal/cryptocore/crypto_api.go
  6. 6
      internal/fusefrontend/file.go
  7. 12
      internal/fusefrontend/fs.go
  8. 2
      internal/fusefrontend/fs_dir.go
  9. 4
      internal/nametransform/name_api.go
  10. 1
      internal/nametransform/names_core.go
  11. 6
      internal/nametransform/names_diriv.go
  12. 2
      internal/nametransform/pad16.go
  13. 6
      main.go

@ -6,8 +6,8 @@ import (
"io/ioutil"
"log"
"github.com/rfjakob/gocryptfs/internal/cryptocore"
"github.com/rfjakob/gocryptfs/internal/contentenc"
"github.com/rfjakob/gocryptfs/internal/cryptocore"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
)
import "os"

@ -3,8 +3,8 @@ package contentenc
// File content encryption / decryption
import (
"encoding/binary"
"bytes"
"encoding/binary"
"encoding/hex"
"errors"

@ -11,9 +11,9 @@ type ContentEnc struct {
// Cryptographic primitives
cryptoCore *cryptocore.CryptoCore
// Plaintext block size
plainBS uint64
plainBS uint64
// Ciphertext block size
cipherBS uint64
cipherBS uint64
// All-zero block of size cipherBS, for fast compares
allZeroBlock []byte
}
@ -23,14 +23,13 @@ func New(cc *cryptocore.CryptoCore, plainBS uint64) *ContentEnc {
cipherBS := plainBS + uint64(cc.IVLen) + cryptocore.AuthTagLen
return &ContentEnc{
cryptoCore: cc,
plainBS: plainBS,
cipherBS: cipherBS,
cryptoCore: cc,
plainBS: plainBS,
cipherBS: cipherBS,
allZeroBlock: make([]byte, cipherBS),
}
}
func (be *ContentEnc) PlainBS() uint64 {
return be.plainBS
}

@ -15,9 +15,9 @@ const (
// Current On-Disk-Format version
CurrentVersion = 2
HEADER_VERSION_LEN = 2 // uint16
HEADER_ID_LEN = 16 // 128 bit random file id
HEADER_LEN = HEADER_VERSION_LEN + HEADER_ID_LEN // Total header length
HEADER_VERSION_LEN = 2 // uint16
HEADER_ID_LEN = 16 // 128 bit random file id
HEADER_LEN = HEADER_VERSION_LEN + HEADER_ID_LEN // Total header length
)
type FileHeader struct {

@ -1,21 +1,21 @@
package cryptocore
import (
"crypto/cipher"
"crypto/aes"
"crypto/cipher"
"fmt"
)
const (
KeyLen = 32 // AES-256
AuthTagLen = 16
KeyLen = 32 // AES-256
AuthTagLen = 16
)
type CryptoCore struct {
BlockCipher cipher.Block
Gcm cipher.AEAD
GcmIVGen *nonceGenerator
IVLen int
GcmIVGen *nonceGenerator
IVLen int
}
func New(key []byte, useOpenssl bool, GCMIV128 bool) *CryptoCore {
@ -49,8 +49,8 @@ func New(key []byte, useOpenssl bool, GCMIV128 bool) *CryptoCore {
return &CryptoCore{
BlockCipher: blockCipher,
Gcm: gcm,
GcmIVGen: &nonceGenerator{nonceLen: IVLen},
IVLen: IVLen,
Gcm: gcm,
GcmIVGen: &nonceGenerator{nonceLen: IVLen},
IVLen: IVLen,
}
}

@ -49,10 +49,10 @@ func NewFile(fd *os.File, writeOnly bool, contentEnc *contentenc.ContentEnc) nod
wlock.register(st.Ino)
return &file{
fd: fd,
writeOnly: writeOnly,
fd: fd,
writeOnly: writeOnly,
contentEnc: contentEnc,
ino: st.Ino,
ino: st.Ino,
}
}

@ -14,11 +14,11 @@ import (
"github.com/hanwen/go-fuse/fuse/nodefs"
"github.com/hanwen/go-fuse/fuse/pathfs"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
"github.com/rfjakob/gocryptfs/internal/configfile"
"github.com/rfjakob/gocryptfs/internal/contentenc"
"github.com/rfjakob/gocryptfs/internal/cryptocore"
"github.com/rfjakob/gocryptfs/internal/nametransform"
"github.com/rfjakob/gocryptfs/internal/contentenc"
"github.com/rfjakob/gocryptfs/internal/configfile"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
)
type FS struct {
@ -42,10 +42,10 @@ func NewFS(args Args) *FS {
nameTransform := nametransform.New(cryptoCore, args.EMENames)
return &FS{
FileSystem: pathfs.NewLoopbackFileSystem(args.Cipherdir),
args: args,
FileSystem: pathfs.NewLoopbackFileSystem(args.Cipherdir),
args: args,
nameTransform: nameTransform,
contentEnc: contentEnc,
contentEnc: contentEnc,
}
}

@ -10,9 +10,9 @@ import (
"github.com/hanwen/go-fuse/fuse"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
"github.com/rfjakob/gocryptfs/internal/cryptocore"
"github.com/rfjakob/gocryptfs/internal/nametransform"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
)
func (fs *FS) Mkdir(relPath string, mode uint32, context *fuse.Context) (code fuse.Status) {

@ -4,13 +4,13 @@ import "github.com/rfjakob/gocryptfs/internal/cryptocore"
type NameTransform struct {
cryptoCore *cryptocore.CryptoCore
useEME bool
useEME bool
DirIVCache dirIVCache
}
func New(c *cryptocore.CryptoCore, useEME bool) *NameTransform {
return &NameTransform{
cryptoCore: c,
useEME: useEME,
useEME: useEME,
}
}

@ -60,4 +60,3 @@ func (n *NameTransform) encryptName(plainName string, iv []byte) (cipherName64 s
cipherName64 = base64.URLEncoding.EncodeToString(bin)
return cipherName64
}

@ -8,16 +8,16 @@ import (
"strings"
"sync"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
"github.com/rfjakob/gocryptfs/internal/cryptocore"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
)
const (
// identical to AES block size
dirIVLen = 16
dirIVLen = 16
// dirIV is stored in this file. Exported because we have to ignore this
// name in directory listing.
DirIVFilename = "gocryptfs.diriv"
DirIVFilename = "gocryptfs.diriv"
)
// A simple one-entry DirIV cache

@ -1,9 +1,9 @@
package nametransform
import (
"fmt"
"crypto/aes"
"errors"
"fmt"
)
// pad16 - pad data to AES block size (=16 byte) using standard PKCS#7 padding

@ -20,12 +20,12 @@ import (
"github.com/hanwen/go-fuse/fuse/nodefs"
"github.com/hanwen/go-fuse/fuse/pathfs"
"github.com/rfjakob/gocryptfs/internal/fusefrontend"
"github.com/rfjakob/gocryptfs/internal/configfile"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
"github.com/rfjakob/gocryptfs/internal/nametransform"
"github.com/rfjakob/gocryptfs/internal/contentenc"
"github.com/rfjakob/gocryptfs/internal/cryptocore"
"github.com/rfjakob/gocryptfs/internal/fusefrontend"
"github.com/rfjakob/gocryptfs/internal/nametransform"
"github.com/rfjakob/gocryptfs/internal/toggledlog"
)
const (

Loading…
Cancel
Save