From: nsz Date: Fri, 16 Dec 2011 06:40:25 +0000 (+0100) Subject: key: parse a single key X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=6292f25a3adf8e4ceecd4d578bc71d1ff6035cf9;p=epoint key: parse a single key --- diff --git a/pkg/key/key.go b/pkg/key/key.go index 29e92bd..d02d91c 100644 --- a/pkg/key/key.go +++ b/pkg/key/key.go @@ -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, "")