aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher2017-03-05 17:44:14 +0100
committerJakob Unterwurzacher2017-03-05 17:44:14 +0100
commit966308eeb7793a4a8ca578e160981e3b059b82e6 (patch)
tree36b0b6d192b26b7c3addcd74bbc566a40736773c
parente6461634422e7713d1863b416934297a8f6c4244 (diff)
Drop Go 1.4 compatability code everywhere
Yields a nice reduction in code size.
-rwxr-xr-xbuild.bash13
-rw-r--r--internal/cryptocore/cryptocore.go2
-rw-r--r--internal/cryptocore/cryptocore_go1.4_test.go20
-rw-r--r--internal/cryptocore/cryptocore_go1.5_test.go16
-rw-r--r--internal/cryptocore/cryptocore_test.go5
-rw-r--r--internal/cryptocore/gcm_go1.4.go29
-rw-r--r--internal/cryptocore/gcm_go1.5.go21
-rw-r--r--internal/nametransform/names.go2
-rw-r--r--internal/nametransform/raw64_go1.4.go18
-rw-r--r--internal/nametransform/raw64_go1.5.go16
-rw-r--r--internal/speed/speed.go2
-rw-r--r--internal/speed/speed_go1.4.go11
-rw-r--r--internal/speed/speed_test.go2
-rw-r--r--internal/stupidgcm/stupidgcm_test.go4
-rw-r--r--internal/tlog/log.go25
-rw-r--r--internal/tlog/log_go1.4.go16
-rw-r--r--internal/tlog/log_go1.5.go32
-rw-r--r--tests/example_filesystems/example_filesystems_test.go8
-rw-r--r--tests/matrix/matrix_test.go10
19 files changed, 39 insertions, 213 deletions
diff --git a/build.bash b/build.bash
index e492f17..1cc266b 100755
--- a/build.bash
+++ b/build.bash
@@ -38,16 +38,17 @@ BUILDTIME=$(date +%s)
# Make sure we have the go binary
go version > /dev/null
-# Go 1.5 changed the CLI syntax. Let's also support 1.3 and 1.4.
-# "go version go1.6.2 linux/amd64" -> "1.6"
+# Parse "go version go1.6.2 linux/amd64" to "1.6"
V=$(go version | cut -d" " -f3 | cut -c3-5)
+# Reject old Go versions already here. It would fail with compile
+# errors anyway.
if [[ $V == "1.3" || $V == "1.4" ]] ; then
- LDFLAGS="-X main.GitVersion $GITVERSION -X main.GitVersionFuse $GITVERSIONFUSE -X main.BuildTime $BUILDTIME"
-else
- # Go 1.5+ wants an "=" here
- LDFLAGS="-X main.GitVersion=$GITVERSION -X main.GitVersionFuse=$GITVERSIONFUSE -X main.BuildTime=$BUILDTIME"
+ echo "Error: you need Go 1.5 or higher to compile gocryptfs"
+ echo -n "You have: "
+ go version
fi
+LDFLAGS="-X main.GitVersion=$GITVERSION -X main.GitVersionFuse=$GITVERSIONFUSE -X main.BuildTime=$BUILDTIME"
go build "-ldflags=$LDFLAGS" $@
(cd gocryptfs-xray; go build $@)
diff --git a/internal/cryptocore/cryptocore.go b/internal/cryptocore/cryptocore.go
index fea0c94..735c409 100644
--- a/internal/cryptocore/cryptocore.go
+++ b/internal/cryptocore/cryptocore.go
@@ -74,7 +74,7 @@ func New(key []byte, aeadType AEADTypeEnum, IVBitLen int) *CryptoCore {
}
aeadCipher = stupidgcm.New(key)
case BackendGoGCM:
- aeadCipher, err = goGCMWrapper(blockCipher, IVLen)
+ aeadCipher, err = cipher.NewGCMWithNonceSize(blockCipher, IVLen)
case BackendAESSIV:
if IVLen != 16 {
// SIV supports any nonce size, but we only use 16.
diff --git a/internal/cryptocore/cryptocore_go1.4_test.go b/internal/cryptocore/cryptocore_go1.4_test.go
deleted file mode 100644
index 14e1e03..0000000
--- a/internal/cryptocore/cryptocore_go1.4_test.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build !go1.5
-// = go 1.4 or lower
-
-package cryptocore
-
-import (
- "testing"
-)
-
-// Native Go crypto with 128-bit IVs is only supported on Go 1.5 and up,
-// this should panic.
-func TestCryptoCoreNewGo14(t *testing.T) {
- defer func() {
- if r := recover(); r == nil {
- t.Errorf("The code did not panic")
- }
- }()
- key := make([]byte, 32)
- New(key, BackendGoGCM, 128)
-}
diff --git a/internal/cryptocore/cryptocore_go1.5_test.go b/internal/cryptocore/cryptocore_go1.5_test.go
deleted file mode 100644
index f9d38e9..0000000
--- a/internal/cryptocore/cryptocore_go1.5_test.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build go1.5
-// = go 1.5 or higher
-
-package cryptocore
-
-import (
- "testing"
-)
-
-func TestCryptoCoreNewGo15(t *testing.T) {
- key := make([]byte, 32)
- c := New(key, BackendGoGCM, 128)
- if c.IVLen != 16 {
- t.Fail()
- }
-}
diff --git a/internal/cryptocore/cryptocore_test.go b/internal/cryptocore/cryptocore_test.go
index c54eac9..252c311 100644
--- a/internal/cryptocore/cryptocore_test.go
+++ b/internal/cryptocore/cryptocore_test.go
@@ -16,7 +16,10 @@ func TestCryptoCoreNew(t *testing.T) {
if c.IVLen != 12 {
t.Fail()
}
- // "New(key, BackendGoGCM, 128)" is tested for Go 1.4 and 1.5+ separately
+ c = New(key, BackendGoGCM, 128)
+ if c.IVLen != 16 {
+ t.Fail()
+ }
}
// "New" should panic on any key not 32 bytes long
diff --git a/internal/cryptocore/gcm_go1.4.go b/internal/cryptocore/gcm_go1.4.go
deleted file mode 100644
index c1aa488..0000000
--- a/internal/cryptocore/gcm_go1.4.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// +build !go1.5
-// = go 1.4 or lower
-
-package cryptocore
-
-import (
- "crypto/cipher"
- "fmt"
-
- "github.com/rfjakob/gocryptfs/internal/tlog"
-)
-
-const (
- // HaveModernGoGCM indicates if Go GCM supports 128-bit nonces
- HaveModernGoGCM = false
-)
-
-// goGCMWrapper - This wrapper makes sure gocryptfs can be compiled on Go
-// versions 1.4 and lower that lack NewGCMWithNonceSize().
-// 128 bit GCM IVs will not work when using built-in Go crypto, obviously, when
-// compiled on 1.4.
-func goGCMWrapper(bc cipher.Block, nonceSize int) (cipher.AEAD, error) {
- if nonceSize != 12 {
- tlog.Warn.Printf("128 bit GCM IVs are not supported by Go 1.4 and lower.")
- tlog.Warn.Printf("Please use openssl crypto or recompile using a newer Go runtime.")
- return nil, fmt.Errorf("128 bit GCM IVs are not supported by Go 1.4 and lower")
- }
- return cipher.NewGCM(bc)
-}
diff --git a/internal/cryptocore/gcm_go1.5.go b/internal/cryptocore/gcm_go1.5.go
deleted file mode 100644
index 3c38357..0000000
--- a/internal/cryptocore/gcm_go1.5.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build go1.5
-// = go 1.5 or higher
-
-package cryptocore
-
-import (
- "crypto/cipher"
-)
-
-const (
- // HaveModernGoGCM indicates if Go GCM supports 128-bit nonces
- HaveModernGoGCM = true
-)
-
-// goGCMWrapper - This wrapper makes sure gocryptfs can be compiled on Go
-// versions 1.4 and lower that lack NewGCMWithNonceSize().
-// 128 bit GCM IVs will not work when using built-in Go crypto, obviously, when
-// compiled on 1.4.
-func goGCMWrapper(bc cipher.Block, nonceSize int) (cipher.AEAD, error) {
- return cipher.NewGCMWithNonceSize(bc, nonceSize)
-}
diff --git a/internal/nametransform/names.go b/internal/nametransform/names.go
index feec017..83724fb 100644
--- a/internal/nametransform/names.go
+++ b/internal/nametransform/names.go
@@ -24,7 +24,7 @@ type NameTransform struct {
func New(e *eme.EMECipher, longNames bool, raw64 bool) *NameTransform {
b64 := base64.URLEncoding
if raw64 {
- b64 = getRaw64Encoding()
+ b64 = base64.RawURLEncoding
}
return &NameTransform{
emeCipher: e,
diff --git a/internal/nametransform/raw64_go1.4.go b/internal/nametransform/raw64_go1.4.go
deleted file mode 100644
index bbffb69..0000000
--- a/internal/nametransform/raw64_go1.4.go
+++ /dev/null
@@ -1,18 +0,0 @@
-//+build !go1.5
-
-package nametransform
-
-import (
- "encoding/base64"
- "log"
-)
-
-const (
- HaveRaw64 = false
-)
-
-func getRaw64Encoding() *base64.Encoding {
- log.Panicf("Tried to use base64.RawURLEncoding but your Go version does not provide it.\n" +
- "You need Go 1.5 or higher.")
- return nil
-}
diff --git a/internal/nametransform/raw64_go1.5.go b/internal/nametransform/raw64_go1.5.go
deleted file mode 100644
index 1896be3..0000000
--- a/internal/nametransform/raw64_go1.5.go
+++ /dev/null
@@ -1,16 +0,0 @@
-//+build go1.5
-
-package nametransform
-
-import (
- "encoding/base64"
-)
-
-const (
- // HaveRaw64 is true when Go is new enough to have base64.RawURLEncoding
- HaveRaw64 = true
-)
-
-func getRaw64Encoding() *base64.Encoding {
- return base64.RawURLEncoding
-}
diff --git a/internal/speed/speed.go b/internal/speed/speed.go
index bc829d4..f9bf93c 100644
--- a/internal/speed/speed.go
+++ b/internal/speed/speed.go
@@ -1,5 +1,3 @@
-// +build go1.5
-
// Package speed implements the "-speed" command-line option,
// similar to "openssl speed".
// It benchmarks the crypto algorithms and libraries used by
diff --git a/internal/speed/speed_go1.4.go b/internal/speed/speed_go1.4.go
deleted file mode 100644
index 9c0125c..0000000
--- a/internal/speed/speed_go1.4.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build !go1.5
-
-package speed
-
-import (
- "fmt"
-)
-
-func Run() {
- fmt.Printf("Compile with Go 1.5 or higher to run the benchmarks\n")
-}
diff --git a/internal/speed/speed_test.go b/internal/speed/speed_test.go
index d6bc187..1e9d859 100644
--- a/internal/speed/speed_test.go
+++ b/internal/speed/speed_test.go
@@ -1,5 +1,3 @@
-// +build go1.5
-
package speed
/*
diff --git a/internal/stupidgcm/stupidgcm_test.go b/internal/stupidgcm/stupidgcm_test.go
index ba25855..3081085 100644
--- a/internal/stupidgcm/stupidgcm_test.go
+++ b/internal/stupidgcm/stupidgcm_test.go
@@ -1,10 +1,6 @@
-// +build go1.5
-// = go 1.5 or higher
-//
// We compare against Go's built-in GCM implementation. Since stupidgcm only
// supports 128-bit IVs and Go only supports that from 1.5 onward, we cannot
// run these tests on older Go versions.
-
package stupidgcm
import (
diff --git a/internal/tlog/log.go b/internal/tlog/log.go
index bd8844b..720bb88 100644
--- a/internal/tlog/log.go
+++ b/internal/tlog/log.go
@@ -6,6 +6,7 @@ import (
"encoding/json"
"fmt"
"log"
+ "log/syslog"
"os"
"golang.org/x/crypto/ssh/terminal"
@@ -117,3 +118,27 @@ func init() {
postfix: ColorReset,
}
}
+
+// SwitchToSyslog redirects the output of this logger to syslog.
+func (l *toggledLogger) SwitchToSyslog(p syslog.Priority) {
+ w, err := syslog.New(p, ProgramName)
+ if err != nil {
+ Warn.Printf("SwitchToSyslog: %v", err)
+ } else {
+ l.SetOutput(w)
+ }
+}
+
+// SwitchLoggerToSyslog redirects the default log.Logger that the go-fuse lib uses
+// to syslog.
+func SwitchLoggerToSyslog(p syslog.Priority) {
+ w, err := syslog.New(p, ProgramName)
+ if err != nil {
+ Warn.Printf("SwitchLoggerToSyslog: %v", err)
+ } else {
+ log.SetPrefix("go-fuse: ")
+ // Disable printing the timestamp, syslog already provides that
+ log.SetFlags(0)
+ log.SetOutput(w)
+ }
+}
diff --git a/internal/tlog/log_go1.4.go b/internal/tlog/log_go1.4.go
deleted file mode 100644
index 98d69db..0000000
--- a/internal/tlog/log_go1.4.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build !go1.5
-// = go 1.4 or lower
-
-package tlog
-
-import (
- "log/syslog"
-)
-
-func (l *toggledLogger) SwitchToSyslog(p syslog.Priority) {
- Info.Printf("Cannot switch to syslog - need Go 1.5 or higher")
-}
-
-func SwitchLoggerToSyslog(p syslog.Priority) {
- Info.Printf("Cannot switch to syslog - need Go 1.5 or higher")
-}
diff --git a/internal/tlog/log_go1.5.go b/internal/tlog/log_go1.5.go
deleted file mode 100644
index 9c152d9..0000000
--- a/internal/tlog/log_go1.5.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// +build go1.5
-// = go 1.5 or higher
-
-package tlog
-
-import (
- "log"
- "log/syslog"
-)
-
-func (l *toggledLogger) SwitchToSyslog(p syslog.Priority) {
- w, err := syslog.New(p, ProgramName)
- if err != nil {
- Warn.Printf("SwitchToSyslog: %v", err)
- } else {
- l.SetOutput(w)
- }
-}
-
-// SwitchLoggerToSyslog redirects the default log.Logger that the go-fuse lib uses
-// to syslog.
-func SwitchLoggerToSyslog(p syslog.Priority) {
- w, err := syslog.New(p, ProgramName)
- if err != nil {
- Warn.Printf("SwitchLoggerToSyslog: %v", err)
- } else {
- log.SetPrefix("go-fuse: ")
- // Disable printing the timestamp, syslog already provides that
- log.SetFlags(0)
- log.SetOutput(w)
- }
-}
diff --git a/tests/example_filesystems/example_filesystems_test.go b/tests/example_filesystems/example_filesystems_test.go
index 5192278..a43d2a9 100644
--- a/tests/example_filesystems/example_filesystems_test.go
+++ b/tests/example_filesystems/example_filesystems_test.go
@@ -12,7 +12,6 @@ import (
"os"
"testing"
- "github.com/rfjakob/gocryptfs/internal/cryptocore"
"github.com/rfjakob/gocryptfs/internal/stupidgcm"
"github.com/rfjakob/gocryptfs/tests/test_helpers"
)
@@ -24,12 +23,7 @@ var opensslOpt string
func TestMain(m *testing.M) {
// Make "testing.Verbose()" return the correct value
flag.Parse()
- var variants []string
- if cryptocore.HaveModernGoGCM {
- variants = append(variants, "-openssl=false")
- } else {
- fmt.Println("Skipping Go GCM tests, Go installation is too old")
- }
+ variants := []string{"-openssl=false"}
if !stupidgcm.BuiltWithoutOpenssl {
variants = append(variants, "-openssl=true")
} else {
diff --git a/tests/matrix/matrix_test.go b/tests/matrix/matrix_test.go
index 1c5d348..88c255e 100644
--- a/tests/matrix/matrix_test.go
+++ b/tests/matrix/matrix_test.go
@@ -23,8 +23,6 @@ import (
"syscall"
"testing"
- "github.com/rfjakob/gocryptfs/internal/cryptocore"
- "github.com/rfjakob/gocryptfs/internal/nametransform"
"github.com/rfjakob/gocryptfs/internal/syscallcompat"
"github.com/rfjakob/gocryptfs/tests/test_helpers"
)
@@ -60,14 +58,6 @@ func TestMain(m *testing.M) {
// Make "testing.Verbose()" return the correct value
flag.Parse()
for _, testcase = range matrix {
- if !cryptocore.HaveModernGoGCM && testcase.openssl != "true" {
- fmt.Printf("Skipping Go GCM variant, Go installation is too old")
- continue
- }
- if testcase.raw64 && !nametransform.HaveRaw64 {
- fmt.Printf("Skipping raw64 test, Go installation is too old")
- continue
- }
if testing.Verbose() {
fmt.Printf("matrix: testcase = %#v\n", testcase)
}