diff options
Diffstat (limited to 'cryptfs/cryptfile.go')
-rw-r--r-- | cryptfs/cryptfile.go | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/cryptfs/cryptfile.go b/cryptfs/cryptfile.go index 0cd11da..98b6d12 100644 --- a/cryptfs/cryptfile.go +++ b/cryptfs/cryptfile.go @@ -115,14 +115,26 @@ func (ib *intraBlock) IsPartial() bool { return false } -// ciphertextRange - get byte range in ciphertext file corresponding to BlockNo +// CiphertextRange - get byte range in ciphertext file corresponding to BlockNo +// (complete block) func (ib *intraBlock) CiphertextRange() (offset int64, length int64) { return ib.BlockNo * ib.fs.cipherBS, ib.fs.cipherBS } -// CropBlock - crop a full plaintext block down to the relevant part +// PlaintextRange - get byte range in plaintext corresponding to BlockNo +// (complete block) +func (ib *intraBlock) PlaintextRange() (offset int64, length int64) { + return ib.BlockNo * ib.fs.plainBS, ib.fs.plainBS +} + +// CropBlock - crop a potentially larger plaintext block down to the relevant part func (ib *intraBlock) CropBlock(d []byte) []byte{ - return d[ib.Offset:ib.Offset+ib.Length] + lenHave := len(d) + lenWant := int(ib.Offset+ib.Length) + if lenHave < lenWant { + return d[ib.Offset:lenHave] + } + return d[ib.Offset:lenWant] } // Split a plaintext byte range into (possible partial) blocks |