69d88505fd
Our git version is v2+ for some time now, but go.mod still declared v1. Hopefully making both match makes https://pkg.go.dev/github.com/rfjakob/gocryptfs/v2 work. All the import paths have been fixed like this: find . -name \*.go | xargs sed -i s%github.com/rfjakob/gocryptfs/%github.com/rfjakob/gocryptfs/v2/%
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package contentenc
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/rfjakob/gocryptfs/v2/internal/cryptocore"
|
|
)
|
|
|
|
// TestSizeToSize tests CipherSizeToPlainSize and PlainSizeToCipherSize
|
|
func TestSizeToSize(t *testing.T) {
|
|
key := make([]byte, cryptocore.KeyLen)
|
|
cc := cryptocore.New(key, cryptocore.BackendGoGCM, DefaultIVBits, true, false)
|
|
ce := New(cc, DefaultBS, false)
|
|
|
|
const rangeMax = 10000
|
|
|
|
// y values in this order:
|
|
// 0 ... CipherSizeToPlainSize
|
|
// 1 ... PlainSizeToCipherSize
|
|
// 2 ... PlainOffToCipherOff
|
|
var yTable [rangeMax][3]uint64
|
|
|
|
// Calculate values
|
|
for x := range yTable {
|
|
yTable[x][0] = ce.CipherSizeToPlainSize(uint64(x))
|
|
yTable[x][1] = ce.PlainSizeToCipherSize(uint64(x))
|
|
yTable[x][2] = ce.PlainOffToCipherOff(uint64(x))
|
|
}
|
|
|
|
// Print data table
|
|
fmt.Print("x\tCipherSizeToPlainSize\tPlainSizeToCipherSize\tPlainOffToCipherOff\n")
|
|
for x := range yTable {
|
|
if x > 1 && x < rangeMax-1 {
|
|
// If the point before has value-1 and the point after has value+1,
|
|
// it is not interesting. Don't print it out.
|
|
interesting := false
|
|
for i := 0; i <= 2; i++ {
|
|
if yTable[x-1][i]+1 != yTable[x][i] && yTable[x][i]+1 != yTable[x+1][i]+1 {
|
|
interesting = true
|
|
}
|
|
// Monotonicity check
|
|
if yTable[x][i] < yTable[x-1][i] {
|
|
t.Errorf("column %d is non-monotonic!", i)
|
|
}
|
|
}
|
|
if !interesting {
|
|
continue
|
|
}
|
|
}
|
|
fmt.Printf("%d\t%d\t%d\t%d\n", x, yTable[x][0], yTable[x][1], yTable[x][2])
|
|
}
|
|
}
|