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 }