From a3e526f9b89aa52c21cf8da02a5ddf6682795b1b Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 1 May 2017 17:28:38 +0200 Subject: Names --- file/names.go | 24 ++++++++++++++++++++++++ file/names_test.go | 24 ++++++++++++++++++++++++ main.go | 25 +++---------------------- main_test.go | 24 ------------------------ 4 files changed, 51 insertions(+), 46 deletions(-) create mode 100644 file/names.go create mode 100644 file/names_test.go delete mode 100644 main_test.go diff --git a/file/names.go b/file/names.go new file mode 100644 index 0000000..265117e --- /dev/null +++ b/file/names.go @@ -0,0 +1,24 @@ +package file + +import ( + "errors" + "path/filepath" +) + +var ErrNames = errors.New("please use naming scheme of keyname.pub and keyname.sec") + +func Names(pubFile, secFile string) error { + pubFile = filepath.Base(pubFile) + secFile = filepath.Base(secFile) + pubExt := filepath.Ext(pubFile) + secExt := filepath.Ext(secFile) + if pubExt != ".pub" || secExt != ".sec" || pubFile[:len(pubExt)-1] != secFile[:len(secExt)-1] { + return ErrNames + } + return nil +} + +func PubName(secFile string) string { + ext := filepath.Ext(secFile) + return filepath.Base(secFile[:len(ext)-1] + ".pub") +} diff --git a/file/names_test.go b/file/names_test.go new file mode 100644 index 0000000..5c9941a --- /dev/null +++ b/file/names_test.go @@ -0,0 +1,24 @@ +package file + +import "testing" + +func TestNames(t *testing.T) { + testCases := []struct { + pub, sec string + err error + }{ + {"key.pub", "key.sec", nil}, + {"testdata/key.pub", "key.sec", nil}, + {"key.pub", "testdata/key.sec", nil}, + {"foo.pub", "bar.sec", ErrNames}, + {"key.foo", "key.bar", ErrNames}, + } + for _, tc := range testCases { + t.Run(tc.pub+"+"+tc.sec, func(t *testing.T) { + err := Names(tc.pub, tc.sec) + if err != tc.err { + t.Errorf("got %v, want %v", err, tc.err) + } + }) + } +} diff --git a/main.go b/main.go index 6d57343..4471418 100644 --- a/main.go +++ b/main.go @@ -1,12 +1,10 @@ package main import ( - "errors" "flag" "fmt" "io/ioutil" "log" - "path/filepath" "dim13.org/signify/ask" "dim13.org/signify/file" @@ -38,10 +36,6 @@ var ( gzip = flag.Bool("z", false, "Sign and verify gzip archives") ) -var ( - ErrNamingScheme = errors.New("please use naming scheme of keyname.pub and keyname.sec") -) - func main() { flag.Parse() @@ -64,8 +58,8 @@ func main() { } func Generate(pubFile, secFile, comment string, nopass bool) error { - if !NamingScheme(pubFile, secFile) { - return ErrNamingScheme + if err := file.Names(pubFile, secFile); err != nil { + return err } pubKey, encKey, err := signify.NewKey() @@ -174,7 +168,7 @@ func Sign(msgFile, secFile string, embed bool) error { return err } sigfile := &file.Block{ - Comment: fmt.Sprintf("verify with %s", ToPub(secFile)), // TODO replace .sec with .pub + Comment: fmt.Sprintf("verify with %s", file.PubName(secFile)), Bytes: sigRaw, } if embed { @@ -201,16 +195,3 @@ func Verify(msgFile, pubFile string) error { log.Println("Signature Verfied") return nil } - -func NamingScheme(pubFile, secFile string) bool { - pubFile = filepath.Base(pubFile) - secFile = filepath.Base(secFile) - pubExt := filepath.Ext(pubFile) - secExt := filepath.Ext(secFile) - return pubExt == ".pub" && secExt == ".sec" && pubFile[:len(pubExt)-1] == secFile[:len(secExt)-1] -} - -func ToPub(secFile string) string { - ext := filepath.Ext(secFile) - return filepath.Base(secFile[:len(ext)-1] + ".pub") -} diff --git a/main_test.go b/main_test.go deleted file mode 100644 index 1e8d0e5..0000000 --- a/main_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package main - -import "testing" - -func TestNamingScheme(t *testing.T) { - testCases := []struct { - pub, sec string - ok bool - }{ - {"key.pub", "key.sec", true}, - {"testdata/key.pub", "key.sec", true}, - {"key.pub", "testdata/key.sec", true}, - {"foo.pub", "bar.sec", false}, - {"key.foo", "key.bar", false}, - } - for _, tc := range testCases { - t.Run(tc.pub+"+"+tc.sec, func(t *testing.T) { - ok := NamingScheme(tc.pub, tc.sec) - if ok != tc.ok { - t.Errorf("got %v, want %v", ok, tc.ok) - } - }) - } -} -- cgit v1.2.3