X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=cmd%2Farmorkey%2Farmorkey.go;fp=cmd%2Farmorkey%2Farmorkey.go;h=628f06a94ec142ced75b05b191d8b4ea8c92bfb6;hb=a86164c8ba48de5cb1a95acc140e811d1c4b1241;hp=0000000000000000000000000000000000000000;hpb=6292f25a3adf8e4ceecd4d578bc71d1ff6035cf9;p=epoint diff --git a/cmd/armorkey/armorkey.go b/cmd/armorkey/armorkey.go new file mode 100644 index 0000000..628f06a --- /dev/null +++ b/cmd/armorkey/armorkey.go @@ -0,0 +1,81 @@ +package main + +import ( + "bufio" + "crypto/openpgp" + "crypto/openpgp/armor" + "flag" + "io" + "log" + "os" +) + +var dearmor = flag.Bool("d", false, "dearmor binary key") +var publiconly = flag.Bool("p", false, "ouput public part only, even if input is a private key") + +func serialize(w io.Writer, e *openpgp.Entity, publiconly bool) (err error) { + if publiconly { + err = e.Serialize(w) + } else { + err = e.SerializePrivate(w) + } + return +} + +func code(e *openpgp.Entity, arm bool) (err error) { + pub := e.PrivateKey == nil || *publiconly + header := openpgp.PublicKeyType + if !pub { + header = openpgp.PrivateKeyType + } + out := bufio.NewWriter(os.Stdout) + if arm { + w, err1 := armor.Encode(out, header, nil) + err = err1 + if err != nil { + return + } + err = serialize(w, e, pub) + if err != nil { + return + } + err = w.Close() + if err != nil { + return + } + _, err = out.Write([]byte{'\n'}) + if err != nil { + return + } + } else { + err = serialize(out, e, pub) + if err != nil { + return + } + } + err = out.Flush() + return +} + +func main() { + flag.Parse() + var elist openpgp.EntityList + var err error + in := bufio.NewReader(os.Stdin) + if *dearmor { + elist, err = openpgp.ReadArmoredKeyRing(in) + } else { + elist, err = openpgp.ReadKeyRing(in) + } + if err != nil { + log.Fatal(err) + } + if len(elist) != 1 { + log.Fatal("expected a single key") + } + err = code(elist[0], !*dearmor) + if err != nil { + log.Fatal(err) + } + return +}