From 6394bf32ee3cc1fa74259f9366b4616276485acf Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 4 Aug 2017 23:57:58 +0200 Subject: Less clutter --- b64file/file.go | 19 ------------------- file.go | 17 +++++++++++++++++ generate.go | 22 ++++++++++++++++++++-- perm.go | 9 --------- sign.go | 24 +++++++++++++++++++----- verify.go | 17 +++++++++++++---- 6 files changed, 69 insertions(+), 39 deletions(-) create mode 100644 file.go delete mode 100644 perm.go 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 } -- cgit v1.2.3