package file import ( "errors" "os" "os/user" "path" "path/filepath" "strings" ) var ErrNames = errors.New("please use naming scheme of keyname.pub and keyname.sec") func Names(pubFile, encFile string) error { pubFile = filepath.Base(pubFile) encFile = filepath.Base(encFile) pubExt := filepath.Ext(pubFile) encExt := filepath.Ext(encFile) if pubExt != ".pub" || encExt != ".sec" || pubFile[:len(pubExt)-1] != encFile[:len(encExt)-1] { return ErrNames } return nil } func PubName(encFile string) string { ext := filepath.Ext(encFile) return filepath.Base(encFile[:len(ext)-1] + ".pub") } func SigName(msgFile string) string { return msgFile + ".sig" } const verifyWith = "verify with " func PubFile(comment string) (string, bool) { if strings.HasPrefix(comment, verifyWith) { file := comment[len(verifyWith):] if strings.HasSuffix(file, ".pub") { return FindFile(file), true } } return "", false } func VerifyWith(encFile string) string { return verifyWith + PubName(encFile) } var safePath = []string{ "/etc/signify", "~/.signify", ".", } func FindFile(fname string) string { usr, _ := user.Current() for _, v := range safePath { p := path.Join(v, fname) if p[0] == '~' { p = path.Join(usr.HomeDir, p[1:]) } if _, err := os.Stat(p); err == nil { return p } } return fname }