From 97828222b81a87b6fb5eeb6ecda33326e7402170 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 28 Nov 2015 11:46:10 +0100 Subject: Add key save/load --- cmd/acme/main.go | 4 ++++ helper.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/cmd/acme/main.go b/cmd/acme/main.go index 43186af..2e35532 100644 --- a/cmd/acme/main.go +++ b/cmd/acme/main.go @@ -20,6 +20,7 @@ const ( var ( server = flag.String("server", acme.LEStaging, "directory server") + port = flag.Int("port", 8443, "port to listen") ) func main() { @@ -33,6 +34,9 @@ func main() { must(err) acme.Print(acc) //acme.Dump(acc) + err = acme.Save(".acme/account.json", acc) + must(err) + acme.SaveKey(".acme/priv.pem", acc.PrivKey) acme.Post(dir.NewReg, acme.NewRegistration(acc.Contact, acme.NewReg{})) diff --git a/helper.go b/helper.go index 0ce20ae..6829fb3 100644 --- a/helper.go +++ b/helper.go @@ -1,10 +1,16 @@ package acme import ( + "crypto/rsa" + "crypto/x509" "encoding/json" + "encoding/pem" "fmt" + "io/ioutil" + "os" ) +// Dump ... func Dump(v interface{}) error { body, err := json.MarshalIndent(v, "", "\t") if err != nil { @@ -14,6 +20,40 @@ func Dump(v interface{}) error { return nil } +// Print ... func Print(v interface{}) (int, error) { return fmt.Printf("%+v\n", v) } + +// Save ... +func Save(fname string, v interface{}) error { + body, err := json.MarshalIndent(v, "", "\t") + if err != nil { + return err + } + return ioutil.WriteFile(fname, body, 0644) +} + +// SaveKey stores RSA private key into file +func SaveKey(fname string, key *rsa.PrivateKey) error { + file, err := os.Create(fname) + if err != nil { + return err + } + defer file.Close() + block := &pem.Block{ + Type: "RSA PRIVATE KEY", + Bytes: x509.MarshalPKCS1PrivateKey(key), + } + return pem.Encode(file, block) +} + +// LoadKey loads RSA private key from file +func LoadKey(fname string) (*rsa.PrivateKey, error) { + file, err := ioutil.ReadFile(fname) + if err != nil { + return nil, err + } + block, _ := pem.Decode(file) + return x509.ParsePKCS1PrivateKey(block.Bytes) +} -- cgit v1.2.3