aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-08-04 23:57:58 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-08-04 23:57:58 +0200
commit6394bf32ee3cc1fa74259f9366b4616276485acf (patch)
tree67c7ceb91475b5241493196cff5be0331965466a
parent245a41f1fa992fefb396fc4591a2bbdd6858e525 (diff)
Less clutter
-rw-r--r--b64file/file.go19
-rw-r--r--file.go17
-rw-r--r--generate.go22
-rw-r--r--perm.go9
-rw-r--r--sign.go24
-rw-r--r--verify.go17
6 files changed, 69 insertions, 39 deletions
diff --git a/b64file/file.go b/b64file/file.go
index 9254303..6f5dd28 100644
--- a/b64file/file.go
+++ b/b64file/file.go
@@ -10,7 +10,6 @@ import (
"fmt"
"io"
"io/ioutil"
- "os"
"strings"
)
@@ -19,15 +18,6 @@ const untrusted = "untrusted comment: "
// Original Error: "invalid comment in %s; must start with 'untrusted comment: '"
var ErrUntrusted = errors.New("comment must start with 'untrusted comment: '")
-func DecodeFile(fname string, u encoding.BinaryUnmarshaler) (string, []byte, error) {
- fd, err := os.Open(fname)
- if err != nil {
- return "", nil, err
- }
- defer fd.Close()
- return Decode(fd, u)
-}
-
func DecodeString(data string, u encoding.BinaryUnmarshaler) (string, []byte, error) {
r := strings.NewReader(data)
return Decode(r, u)
@@ -70,15 +60,6 @@ func Decode(r io.Reader, u encoding.BinaryUnmarshaler) (string, []byte, error) {
return comment, message, nil
}
-func EncodeFile(fname string, perm os.FileMode, u encoding.BinaryMarshaler, comment string, msg []byte) error {
- fd, err := os.OpenFile(fname, os.O_WRONLY|os.O_CREATE|os.O_EXCL, perm)
- if err != nil {
- return err
- }
- defer fd.Close()
- return Encode(fd, u, comment, msg)
-}
-
func Encode(w io.Writer, u encoding.BinaryMarshaler, comment string, msg []byte) error {
raw, err := u.MarshalBinary()
if err != nil {
diff --git a/file.go b/file.go
new file mode 100644
index 0000000..97f5eed
--- /dev/null
+++ b/file.go
@@ -0,0 +1,17 @@
+package main
+
+import "os"
+
+const (
+ ModeSec os.FileMode = 0600
+ ModePub os.FileMode = 0644
+ ModeSig os.FileMode = 0644
+)
+
+func Open(fname string) (*os.File, error) {
+ return os.OpenFile(fname, os.O_RDONLY, 0)
+}
+
+func Create(fname string, perm os.FileMode) (*os.File, error) {
+ return os.OpenFile(fname, os.O_WRONLY|os.O_CREATE|os.O_EXCL, perm)
+}
diff --git a/generate.go b/generate.go
index f067b8b..adc94b8 100644
--- a/generate.go
+++ b/generate.go
@@ -37,11 +37,29 @@ func generate(args []string) error {
return err
}
- if err := b64file.EncodeFile(*secFile, ModeSec, secKey, *comment+" secret key", nil); err != nil {
+ if err := encodeSec(*secFile, *comment+" secret key", secKey); err != nil {
return err
}
- if err := b64file.EncodeFile(*pubFile, ModePub, pubKey, *comment+" public key", nil); err != nil {
+ if err := encodePub(*pubFile, *comment+" public key", pubKey); err != nil {
return err
}
return nil
}
+
+func encodeSec(fname, comment string, sig *key.Sec) error {
+ fd, err := Create(fname, ModeSec)
+ if err != nil {
+ return err
+ }
+ defer fd.Close()
+ return b64file.Encode(fd, sig, comment+" secret key", nil)
+}
+
+func encodePub(fname, comment string, pub *key.Pub) error {
+ fd, err := Create(fname, ModePub)
+ if err != nil {
+ return err
+ }
+ defer fd.Close()
+ return b64file.Encode(fd, pub, comment+" public key", nil)
+}
diff --git a/perm.go b/perm.go
deleted file mode 100644
index 9e11888..0000000
--- a/perm.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package main
-
-import "os"
-
-const (
- ModeSec os.FileMode = 0600
- ModePub os.FileMode = 0644
- ModeSig os.FileMode = 0644
-)
diff --git a/sign.go b/sign.go
index ccdd643..0c56b69 100644
--- a/sign.go
+++ b/sign.go
@@ -4,7 +4,6 @@ import (
"flag"
"io/ioutil"
"log"
- "os"
"dim13.org/signify/ask"
"dim13.org/signify/b64file"
@@ -63,7 +62,12 @@ func signPlain(secFile, msgFile, sigFile string) error {
}
sig := sec.Sign(msg)
comment := VerifyWith(secFile)
- return b64file.EncodeFile(sigFile, ModeSig, sig, comment, nil)
+ fd, err := Create(sigFile, ModeSig)
+ if err != nil {
+ return err
+ }
+ defer fd.Close()
+ return b64file.Encode(fd, sig, comment, nil)
}
func signEmbedded(secFile, msgFile, sigFile string) error {
@@ -77,12 +81,17 @@ func signEmbedded(secFile, msgFile, sigFile string) error {
}
sig := sec.Sign(msg)
comment := VerifyWith(secFile)
- return b64file.EncodeFile(sigFile, ModeSig, sig, comment, msg)
+ fd, err := Create(sigFile, ModeSig)
+ if err != nil {
+ return err
+ }
+ fd.Close()
+ return b64file.Encode(fd, sig, comment, msg)
}
// TODO
func signGzip(secFile, msgFile, sigFile string) error {
- fd, err := os.Open(msgFile)
+ fd, err := Open(msgFile)
if err != nil {
return err
}
@@ -107,7 +116,12 @@ func signGzip(secFile, msgFile, sigFile string) error {
func openSec(fname string) (*key.Sec, error) {
sec := new(key.Sec)
- if _, _, err := b64file.DecodeFile(fname, sec); err != nil {
+ fd, err := Open(fname)
+ if err != nil {
+ return nil, err
+ }
+ defer fd.Close()
+ if _, _, err := b64file.Decode(fd, sec); err != nil {
return nil, err
}
if err := sec.Crypt(ask.Passphrase{}); err != nil {
diff --git a/verify.go b/verify.go
index 5a04d50..0f5294e 100644
--- a/verify.go
+++ b/verify.go
@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"io/ioutil"
- "os"
"dim13.org/signify/b64file"
"dim13.org/signify/key"
@@ -92,7 +91,7 @@ func verifyEmbedded(pubFile, sigFile string) error {
// TODO ugly work-in-progress
func verifyGzip(pubFile, sigFile string) error {
- fd, err := os.Open(sigFile)
+ fd, err := Open(sigFile)
if err != nil {
return err
}
@@ -129,7 +128,12 @@ func verifyGzip(pubFile, sigFile string) error {
func openPub(fname string) (*key.Pub, error) {
pub := new(key.Pub)
- if _, _, err := b64file.DecodeFile(fname, pub); err != nil {
+ fd, err := Open(fname)
+ if err != nil {
+ return nil, err
+ }
+ defer fd.Close()
+ if _, _, err := b64file.Decode(fd, pub); err != nil {
return nil, err
}
if err := pub.Validate(); err != nil {
@@ -140,7 +144,12 @@ func openPub(fname string) (*key.Pub, error) {
func openSig(fname string) (*key.Sig, []byte, string, error) {
sig := new(key.Sig)
- comment, msg, err := b64file.DecodeFile(fname, sig)
+ fd, err := Open(fname)
+ if err != nil {
+ return nil, nil, "", err
+ }
+ defer fd.Close()
+ comment, msg, err := b64file.Decode(fd, sig)
if err != nil {
return nil, nil, "", err
}