From f001e23f9e3a9278c9105d3fb1a6a2e9ff7980e4 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 13 Feb 2018 01:47:16 +0100 Subject: collect --- files.go | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 files.go (limited to 'files.go') diff --git a/files.go b/files.go new file mode 100644 index 0000000..f1a432d --- /dev/null +++ b/files.go @@ -0,0 +1,76 @@ +package main + +import ( + "os" + + "dim13.org/signify/ask" + "dim13.org/signify/b64file" + "dim13.org/signify/key" +) + +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) +} + +func openSec(fname string) (*key.Sec, error) { + sec := new(key.Sec) + 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 { + return nil, err + } + if err := sec.Validate(); err != nil { + return nil, err + } + return sec, nil +} + +func openPub(fname string) (*key.Pub, error) { + pub := new(key.Pub) + 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 { + return nil, err + } + return pub, nil +} + +func openSig(fname string) (*key.Sig, []byte, string, error) { + sig := new(key.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 + } + if err := sig.Validate(); err != nil { + return nil, nil, "", err + } + pubKey := CommentPubFile(comment) + return sig, msg, pubKey, nil +} -- cgit v1.2.3