Documentation ¶
Overview ¶
Package crypt provides wrappers for Fs and Object which implement encryption
Index ¶
- Variables
- func NewFs(name, rpath string) (fs.Fs, error)
- type Cipher
- type Fs
- func (f *Fs) CleanUp() error
- func (f *Fs) ComputeHash(o *Object, src fs.Object, hashType fs.HashType) (hash string, err error)
- func (f *Fs) Copy(src fs.Object, remote string) (fs.Object, error)
- func (f *Fs) DecryptFileName(encryptedFileName string) (string, error)
- func (f *Fs) DirMove(src fs.Fs, srcRemote, dstRemote string) error
- func (f *Fs) Features() *fs.Features
- func (f *Fs) Hashes() fs.HashSet
- func (f *Fs) List(dir string) (entries fs.DirEntries, err error)
- func (f *Fs) ListR(dir string, callback fs.ListRCallback) (err error)
- func (f *Fs) Mkdir(dir string) error
- func (f *Fs) Move(src fs.Object, remote string) (fs.Object, error)
- func (f *Fs) Name() string
- func (f *Fs) NewObject(remote string) (fs.Object, error)
- func (f *Fs) Purge() error
- func (f *Fs) Put(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) (fs.Object, error)
- func (f *Fs) PutStream(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) (fs.Object, error)
- func (f *Fs) PutUnchecked(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) (fs.Object, error)
- func (f *Fs) Rmdir(dir string) error
- func (f *Fs) Root() string
- func (f *Fs) String() string
- func (f *Fs) UnWrap() fs.Fs
- type NameEncryptionMode
- type Object
- func (o *Object) Fs() fs.Info
- func (o *Object) Hash(hash fs.HashType) (string, error)
- func (o *Object) Open(options ...fs.OpenOption) (rc io.ReadCloser, err error)
- func (o *Object) Remote() string
- func (o *Object) Size() int64
- func (o *Object) String() string
- func (o *Object) UnWrap() fs.Object
- func (o *Object) Update(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) error
- type ObjectInfo
- type OpenAtOffset
- type ReadSeekCloser
Constants ¶
This section is empty.
Variables ¶
var ( ErrorBadDecryptUTF8 = errors.New("bad decryption - utf-8 invalid") ErrorBadDecryptControlChar = errors.New("bad decryption - contains control chars") ErrorNotAMultipleOfBlocksize = errors.New("not a multiple of blocksize") ErrorTooShortAfterDecode = errors.New("too short after base32 decode") ErrorEncryptedFileTooShort = errors.New("file is too short to be encrypted") ErrorEncryptedFileBadHeader = errors.New("file has truncated block header") ErrorEncryptedBadMagic = errors.New("not an encrypted file - bad magic string") ErrorEncryptedBadBlock = errors.New("failed to authenticate decrypted block - bad password?") ErrorBadBase32Encoding = errors.New("bad base32 filename encoding") ErrorFileClosed = errors.New("file already closed") ErrorNotAnEncryptedFile = errors.New("not an encrypted file - no \"" + encryptedSuffix + "\" suffix") ErrorBadSeek = errors.New("Seek beyond end of file") )
Errors returned by cipher
Functions ¶
Types ¶
type Cipher ¶
type Cipher interface { // EncryptFileName encrypts a file path EncryptFileName(string) string // DecryptFileName decrypts a file path, returns error if decrypt was invalid DecryptFileName(string) (string, error) // EncryptDirName encrypts a directory path EncryptDirName(string) string // DecryptDirName decrypts a directory path, returns error if decrypt was invalid DecryptDirName(string) (string, error) // EncryptData EncryptData(io.Reader) (io.Reader, error) // DecryptData DecryptData(io.ReadCloser) (io.ReadCloser, error) // DecryptDataSeek decrypt at a given position DecryptDataSeek(open OpenAtOffset, offset int64) (ReadSeekCloser, error) // EncryptedSize calculates the size of the data when encrypted EncryptedSize(int64) int64 // DecryptedSize calculates the size of the data when decrypted DecryptedSize(int64) (int64, error) }
Cipher is used to swap out the encryption implementations
type Fs ¶
Fs represents a wrapped fs.Fs
func (*Fs) CleanUp ¶
CleanUp the trash in the Fs
Implement this if you have a way of emptying the trash or otherwise cleaning up old versions of files.
func (*Fs) ComputeHash ¶
ComputeHash takes the nonce from o, and encrypts the contents of src with it, and calcuates the hash given by HashType on the fly
Note that we break lots of encapsulation in this function.
func (*Fs) Copy ¶
Copy src to this remote using server side copy operations.
This is stored with the remote path given ¶
It returns the destination Object and a possible error ¶
Will only be called if src.Fs().Name() == f.Name()
If it isn't possible then return fs.ErrorCantCopy
func (*Fs) DecryptFileName ¶
DecryptFileName returns a decrypted file name
func (*Fs) DirMove ¶
DirMove moves src, srcRemote to this remote at dstRemote using server side move operations.
Will only be called if src.Fs().Name() == f.Name()
If it isn't possible then return fs.ErrorCantDirMove
If destination exists then return fs.ErrorDirExists
func (*Fs) List ¶
func (f *Fs) List(dir string) (entries fs.DirEntries, err error)
List the objects and directories in dir into entries. The entries can be returned in any order but should be for a complete directory.
dir should be "" to list the root, and should not have trailing slashes.
This should return ErrDirNotFound if the directory isn't found.
func (*Fs) ListR ¶
func (f *Fs) ListR(dir string, callback fs.ListRCallback) (err error)
ListR lists the objects and directories of the Fs starting from dir recursively into out.
dir should be "" to start from the root, and should not have trailing slashes.
This should return ErrDirNotFound if the directory isn't found.
It should call callback for each tranche of entries read. These need not be returned in any particular order. If callback returns an error then the listing will stop immediately.
Don't implement this unless you have a more efficient way of listing recursively that doing a directory traversal.
func (*Fs) Mkdir ¶
Mkdir makes the directory (container, bucket)
Shouldn't return an error if it already exists
func (*Fs) Move ¶
Move src to this remote using server side move operations.
This is stored with the remote path given ¶
It returns the destination Object and a possible error ¶
Will only be called if src.Fs().Name() == f.Name()
If it isn't possible then return fs.ErrorCantMove
func (*Fs) Purge ¶
Purge all files in the root and the root directory
Implement this if you have a way of deleting all the files quicker than just running Remove() on the result of List()
Return an error if it doesn't exist
func (*Fs) Put ¶
func (f *Fs) Put(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) (fs.Object, error)
Put in to the remote path with the modTime given of the given size
May create the object even if it returns an error - if so will return the object and the error, otherwise will return nil and the error
func (*Fs) PutStream ¶
func (f *Fs) PutStream(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) (fs.Object, error)
PutStream uploads to the remote path with the modTime given of indeterminate size
func (*Fs) PutUnchecked ¶
func (f *Fs) PutUnchecked(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) (fs.Object, error)
PutUnchecked uploads the object
This will create a duplicate if we upload a new file without checking to see if there is one already - use Put() for that.
type NameEncryptionMode ¶
type NameEncryptionMode int
NameEncryptionMode is the type of file name encryption in use
const ( NameEncryptionOff NameEncryptionMode = iota NameEncryptionStandard NameEncryptionObfuscated )
NameEncryptionMode levels
func NewNameEncryptionMode ¶
func NewNameEncryptionMode(s string) (mode NameEncryptionMode, err error)
NewNameEncryptionMode turns a string into a NameEncryptionMode
func (NameEncryptionMode) String ¶
func (mode NameEncryptionMode) String() (out string)
String turns mode into a human readable string
type Object ¶
Object describes a wrapped for being read from the Fs
This decrypts the remote name and decrypts the data
func (*Object) Hash ¶
Hash returns the selected checksum of the file If no checksum is available it returns ""
func (*Object) Open ¶
func (o *Object) Open(options ...fs.OpenOption) (rc io.ReadCloser, err error)
Open opens the file for read. Call Close() on the returned io.ReadCloser
func (*Object) Update ¶
func (o *Object) Update(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) error
Update in to the object with the modTime given of the given size
type ObjectInfo ¶
type ObjectInfo struct { fs.ObjectInfo // contains filtered or unexported fields }
ObjectInfo describes a wrapped fs.ObjectInfo for being the source
This encrypts the remote name and adjusts the size
func (*ObjectInfo) Fs ¶
func (o *ObjectInfo) Fs() fs.Info
Fs returns read only access to the Fs that this object is part of
type OpenAtOffset ¶
type OpenAtOffset func(offset int64) (io.ReadCloser, error)
OpenAtOffset opens the file handle at the offset given
Directories ¶
Path | Synopsis |
---|---|
Package pkcs7 implements PKCS#7 padding This is a standard way of encoding variable length buffers into buffers which are a multiple of an underlying crypto block size.
|
Package pkcs7 implements PKCS#7 padding This is a standard way of encoding variable length buffers into buffers which are a multiple of an underlying crypto block size. |