aboutsummaryrefslogtreecommitdiff
path: root/cryptfs/cryptfile.go
diff options
context:
space:
mode:
Diffstat (limited to 'cryptfs/cryptfile.go')
-rw-r--r--cryptfs/cryptfile.go18
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