key: parse a single key
authornsz <nsz@port70.net>
Fri, 16 Dec 2011 06:40:25 +0000 (07:40 +0100)
committernsz <nsz@port70.net>
Fri, 16 Dec 2011 06:40:25 +0000 (07:40 +0100)
pkg/key/key.go

index 29e92bd..d02d91c 100644 (file)
@@ -16,6 +16,7 @@
 package key
 
 import (
+       "bytes"
        "crypto"
        "crypto/dsa"
        "crypto/openpgp"
@@ -100,6 +101,25 @@ func New(priv *dsa.PrivateKey, currentTimeSecs int64, name, comment, email strin
        return
 }
 
+// Parse armored or binary openpgp public or private key
+func Parse(d []byte) (e *openpgp.Entity, err error) {
+       elist, err := openpgp.ReadArmoredKeyRing(bytes.NewBuffer(d))
+       if err != nil {
+               elist1, err1 := openpgp.ReadKeyRing(bytes.NewBuffer(d))
+               if err1 != nil {
+                       return
+               }
+               err = nil
+               elist = elist1
+       }
+       if len(elist) != 1 {
+               err = fmt.Errorf("Parse: expected exactly one key")
+               return
+       }
+       e = elist[0]
+       return
+}
+
 // Issuer generates a key for obligation issuer clients from random seed r
 func Issuer(r []byte, denomination string) (e *openpgp.Entity, err error) {
        return New(DsaKey(r), 0, "Issuer", denomination, "")