aboutsummaryrefslogtreecommitdiff
path: root/b64file/names.go
diff options
context:
space:
mode:
Diffstat (limited to 'b64file/names.go')
-rw-r--r--b64file/names.go72
1 files changed, 72 insertions, 0 deletions
diff --git a/b64file/names.go b/b64file/names.go
new file mode 100644
index 0000000..83d73d2
--- /dev/null
+++ b/b64file/names.go
@@ -0,0 +1,72 @@
+package b64file
+
+import (
+ "errors"
+ "os"
+ "path"
+ "path/filepath"
+ "strings"
+)
+
+var ErrNames = errors.New("please use naming scheme of keyname.pub and keyname.sec")
+
+const (
+ extPub = ".pub"
+ extSec = ".sec"
+ extSig = ".sig"
+ verifyWith = "verify with "
+)
+
+func splitNameExt(fname string) (string, string) {
+ _, file := path.Split(fname)
+ ext := filepath.Ext(file)
+ return file[:len(file)-len(ext)], ext
+}
+
+func ValidateNames(pubFile, secFile string) error {
+ pubName, pubExt := splitNameExt(pubFile)
+ secName, secExt := splitNameExt(secFile)
+ if pubExt != extPub || secExt != extSec || pubName != secName {
+ return ErrNames
+ }
+ return nil
+}
+
+func PubName(secFile string) string {
+ ext := filepath.Ext(secFile)
+ return filepath.Base(secFile[:len(ext)-1] + extPub)
+}
+
+func SigName(msgFile string) string {
+ return msgFile + extSig
+}
+
+func PubFile(comment string) string {
+ if strings.HasPrefix(comment, verifyWith) {
+ file := comment[len(verifyWith):]
+ if strings.HasSuffix(file, extPub) {
+ return FindFile(file)
+ }
+ }
+ return ""
+}
+
+func VerifyWith(secFile string) string {
+ return verifyWith + PubName(secFile)
+}
+
+var safePath = []string{
+ "/etc/signify",
+ "$HOME/.signify",
+}
+
+// FindFile locates keys in safe path. Falls back to current dir.
+func FindFile(fname string) string {
+ for _, v := range safePath {
+ p := path.Join(os.Expand(v, os.Getenv), fname)
+ if _, err := os.Stat(p); err == nil {
+ return p
+ }
+ }
+ return fname
+}